From 0eca1587088d5d51f0f9cbfbdbc7535f06d7f41d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 02:49:09 +0000 Subject: [PATCH 01/32] chore(deps): update dependency vite to v4.3.7 (#8340) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/studio/frontend/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/studio/frontend/yarn.lock b/packages/studio/frontend/yarn.lock index 36d97ab63e4e..4543a9bd46c7 100644 --- a/packages/studio/frontend/yarn.lock +++ b/packages/studio/frontend/yarn.lock @@ -4368,8 +4368,8 @@ __metadata: linkType: hard "vite@npm:^4.1.0": - version: 4.3.6 - resolution: "vite@npm:4.3.6" + version: 4.3.7 + resolution: "vite@npm:4.3.7" dependencies: esbuild: ^0.17.5 fsevents: ~2.3.2 @@ -4400,7 +4400,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 4efff856f46f094b925d8a4738e99eebca199946662bf4676c540c921c7d8a3669f1493f48f263cd20e147bb2fae7d95e4b2fffaa3c0bc1fdc90aaa44cf80868 + checksum: 7d148052419840dfc2b650309924f841d333dfcf5da10d839c9af715da45b1313a771dbb0356145db4aa827e86eb9f7673daffeca9a90d24eade2d4f70d5dad6 languageName: node linkType: hard From 3251109129e882af6d6eb4e4f16dafac99d94d2b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 03:34:54 +0000 Subject: [PATCH 02/32] fix(deps): update typescript-eslint monorepo to v5.59.6 (#8335) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/eslint-config/package.json | 4 +- yarn.lock | 100 ++++++++++++++-------------- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 04ea1869174a..10264a525c38 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -17,8 +17,8 @@ "@babel/eslint-plugin": "7.19.1", "@redwoodjs/internal": "5.0.0", "@redwoodjs/project-config": "5.0.0", - "@typescript-eslint/eslint-plugin": "5.59.5", - "@typescript-eslint/parser": "5.59.5", + "@typescript-eslint/eslint-plugin": "5.59.6", + "@typescript-eslint/parser": "5.59.6", "eslint": "8.40.0", "eslint-config-prettier": "8.8.0", "eslint-import-resolver-babel-module": "5.3.2", diff --git a/yarn.lock b/yarn.lock index bce3f49bafd6..a031105c3f01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7133,8 +7133,8 @@ __metadata: "@babel/eslint-plugin": 7.19.1 "@redwoodjs/internal": 5.0.0 "@redwoodjs/project-config": 5.0.0 - "@typescript-eslint/eslint-plugin": 5.59.5 - "@typescript-eslint/parser": 5.59.5 + "@typescript-eslint/eslint-plugin": 5.59.6 + "@typescript-eslint/parser": 5.59.6 eslint: 8.40.0 eslint-config-prettier: 8.8.0 eslint-import-resolver-babel-module: 5.3.2 @@ -10338,14 +10338,14 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:5.59.5": - version: 5.59.5 - resolution: "@typescript-eslint/eslint-plugin@npm:5.59.5" +"@typescript-eslint/eslint-plugin@npm:5.59.6": + version: 5.59.6 + resolution: "@typescript-eslint/eslint-plugin@npm:5.59.6" dependencies: "@eslint-community/regexpp": ^4.4.0 - "@typescript-eslint/scope-manager": 5.59.5 - "@typescript-eslint/type-utils": 5.59.5 - "@typescript-eslint/utils": 5.59.5 + "@typescript-eslint/scope-manager": 5.59.6 + "@typescript-eslint/type-utils": 5.59.6 + "@typescript-eslint/utils": 5.59.6 debug: ^4.3.4 grapheme-splitter: ^1.0.4 ignore: ^5.2.0 @@ -10358,43 +10358,43 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 6d2e7397c9111bb538d20b2fdc301a318415a499c53eb064707a480bd15ef6dfa86f7047cda51fd9cf812e2f8cb489accf74fb074372f08b8b5ab1d9cfc72b6a + checksum: cfb64827d3bf82f708e7c6ea2e3d6b7e7db2364a2f02e6d2b6ac6a5fd151a3ddd6f23ac79de5f3cd4b96270d1e9e04dce398cfffc729a94d8f23b0ecc8d4bfa3 languageName: node linkType: hard -"@typescript-eslint/parser@npm:5.59.5": - version: 5.59.5 - resolution: "@typescript-eslint/parser@npm:5.59.5" +"@typescript-eslint/parser@npm:5.59.6": + version: 5.59.6 + resolution: "@typescript-eslint/parser@npm:5.59.6" dependencies: - "@typescript-eslint/scope-manager": 5.59.5 - "@typescript-eslint/types": 5.59.5 - "@typescript-eslint/typescript-estree": 5.59.5 + "@typescript-eslint/scope-manager": 5.59.6 + "@typescript-eslint/types": 5.59.6 + "@typescript-eslint/typescript-estree": 5.59.6 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 77669ac187ba253d1a65411afbeddebd1f462037c4524e70479db73c8b772b2cc82203c0ad1378dd246025b3fd22b989e8aaa86174097d47cc2502c99f38775a + checksum: 8477c900857060ea3ae7e8098284cb3dc1c9b5302ef5afd174b5d11a4bdb370d96f685fd2e4aa152fea670b8564d7d4d1e1bf276c23b57de1239de1044d87aee languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.59.5": - version: 5.59.5 - resolution: "@typescript-eslint/scope-manager@npm:5.59.5" +"@typescript-eslint/scope-manager@npm:5.59.6": + version: 5.59.6 + resolution: "@typescript-eslint/scope-manager@npm:5.59.6" dependencies: - "@typescript-eslint/types": 5.59.5 - "@typescript-eslint/visitor-keys": 5.59.5 - checksum: dccb4d495827f4375c4e80ee8a40b4e9ecc41022786eb760afc4725d36d09de30bbc578d6bb93ee8546a7e9ee8c732f5b057a13ffd2ac763d28eb7e876aaa9f2 + "@typescript-eslint/types": 5.59.6 + "@typescript-eslint/visitor-keys": 5.59.6 + checksum: 7c41eb95b98e89e50002b94122020dab6d99362032262db47768aeb1b5f1035d5432708e0fe15072fa9d6747097eae4d3a9d4dcc5ea0ce135103056d5130b20c languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.59.5": - version: 5.59.5 - resolution: "@typescript-eslint/type-utils@npm:5.59.5" +"@typescript-eslint/type-utils@npm:5.59.6": + version: 5.59.6 + resolution: "@typescript-eslint/type-utils@npm:5.59.6" dependencies: - "@typescript-eslint/typescript-estree": 5.59.5 - "@typescript-eslint/utils": 5.59.5 + "@typescript-eslint/typescript-estree": 5.59.6 + "@typescript-eslint/utils": 5.59.6 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -10402,23 +10402,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 7720e306ae71f91ef31aad7a30ceb183bb38aad1f3f44be0df7d04dc1af697b77ac80e104c7375d234bfd77f70afa16bec2f087763cc1ff389cb02a31ea3cf9f + checksum: 0d4cdb6ecb0f7f37cc82b4faedad3215700b97042586398a3f228b1a9dfb01c17714127f2d3726870a1cdbc03a21784d99001283c7d0802fb51c6ecf24589be3 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.59.5": - version: 5.59.5 - resolution: "@typescript-eslint/types@npm:5.59.5" - checksum: a019981b270fdfd800fb240db9256ee39e3b41380f0b979a7fa5a14980852b3237b6c728860adfe1992a1b8d47b99d584e1d5251ebc5ba9ca437b76d957df0f2 +"@typescript-eslint/types@npm:5.59.6": + version: 5.59.6 + resolution: "@typescript-eslint/types@npm:5.59.6" + checksum: cc48c11409371e20675f46addf16d484a48db1377ed414c6d912d4afbec45f85baa60afeebfe114fdee040fe6ff2a183187bc643f0219e429b6aacbf10e47cac languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.59.5": - version: 5.59.5 - resolution: "@typescript-eslint/typescript-estree@npm:5.59.5" +"@typescript-eslint/typescript-estree@npm:5.59.6": + version: 5.59.6 + resolution: "@typescript-eslint/typescript-estree@npm:5.59.6" dependencies: - "@typescript-eslint/types": 5.59.5 - "@typescript-eslint/visitor-keys": 5.59.5 + "@typescript-eslint/types": 5.59.6 + "@typescript-eslint/visitor-keys": 5.59.6 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -10427,35 +10427,35 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 6e7cab3bc6659689a6e7f72e9db5738e8cdab43c38621bc625125e88879f9af33a81fbd696acf6bb3c8a32586f2af9779e0df1555a8630309879b8ea6370545b + checksum: eba7c2298223b5004f6dd16610a8e1e8f7e6981b76351eb58c4dfa56429cdefdb7b3ccf0dda15656fdfddd04268a61f8606fbfe4effe0a88c68c2bd6c895c27e languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.59.5": - version: 5.59.5 - resolution: "@typescript-eslint/utils@npm:5.59.5" +"@typescript-eslint/utils@npm:5.59.6": + version: 5.59.6 + resolution: "@typescript-eslint/utils@npm:5.59.6" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@types/json-schema": ^7.0.9 "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.59.5 - "@typescript-eslint/types": 5.59.5 - "@typescript-eslint/typescript-estree": 5.59.5 + "@typescript-eslint/scope-manager": 5.59.6 + "@typescript-eslint/types": 5.59.6 + "@typescript-eslint/typescript-estree": 5.59.6 eslint-scope: ^5.1.1 semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: af0f3c6f314cbb2e8fb646ffb28ac78ee2b2c7951c3df4458d01a182c903e65f455e72db0525b5c4ff05c89c59696717c97dd87f906fa648bb7313079fa88385 + checksum: 73a1cd5768d98af3a3baa9f79693484d9a921fd60928394b5c8fefe020d588d942c2bcf19e51b05ffef636eb6883872a10a81ba063b83394d97ec2736bfcde6b languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.59.5": - version: 5.59.5 - resolution: "@typescript-eslint/visitor-keys@npm:5.59.5" +"@typescript-eslint/visitor-keys@npm:5.59.6": + version: 5.59.6 + resolution: "@typescript-eslint/visitor-keys@npm:5.59.6" dependencies: - "@typescript-eslint/types": 5.59.5 + "@typescript-eslint/types": 5.59.6 eslint-visitor-keys: ^3.3.0 - checksum: b3be652ffc4476ab5fbe8833b758d9e3e75c7c4880d7ccc607bdc2815d642f7eddcc31a033a6bbf8dcf4902c0d6c015b4383b9b0fc989ec5cf03c7c06d6dd34e + checksum: da70b586a1783c31f9e0a9ebeffbaff3d3373d548c7bbac15ddad5280ef2c6c396417bc4610ab29dfe159bde70ff4295b490bbafc24215dd0ac95a5857efb685 languageName: node linkType: hard From f11c324e119cdaefed76400b9f7ea94222084997 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 06:53:26 +0000 Subject: [PATCH 03/32] fix(deps): update dependency @vscode/ripgrep to v1.15.3 (#8341) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/codemods/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/codemods/package.json b/packages/codemods/package.json index a4057a87ea62..5ec3c8cbf200 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -29,7 +29,7 @@ "@babel/runtime-corejs3": "7.21.5", "@babel/traverse": "7.21.5", "@iarna/toml": "2.2.5", - "@vscode/ripgrep": "1.15.2", + "@vscode/ripgrep": "1.15.3", "@whatwg-node/fetch": "0.8.8", "cheerio": "1.0.0-rc.12", "core-js": "3.30.2", diff --git a/yarn.lock b/yarn.lock index a031105c3f01..005b0ec6031b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7028,7 +7028,7 @@ __metadata: "@types/jscodeshift": 0.11.6 "@types/prettier": 2.7.2 "@types/yargs": 17.0.24 - "@vscode/ripgrep": 1.15.2 + "@vscode/ripgrep": 1.15.3 "@whatwg-node/fetch": 0.8.8 cheerio: 1.0.0-rc.12 core-js: 3.30.2 @@ -10473,13 +10473,13 @@ __metadata: languageName: node linkType: hard -"@vscode/ripgrep@npm:1.15.2": - version: 1.15.2 - resolution: "@vscode/ripgrep@npm:1.15.2" +"@vscode/ripgrep@npm:1.15.3": + version: 1.15.3 + resolution: "@vscode/ripgrep@npm:1.15.3" dependencies: https-proxy-agent: ^5.0.0 proxy-from-env: ^1.1.0 - checksum: c6fc5978c0d9211feca225cbb90a6237cc5887372f65f7aebc685ff9f3d0a61be0a768e1b174276074efbf7470d96f8ac5f104963f157ba07093f82036053104 + checksum: 802043ccd08f05af5425d501565afcbc2936bef25bb98bbd91a6f61c4f1aaf9ad95e188ca3a31033ca2b7f0df334c2f3e3e43662a40d23479d860a7099a09cc6 languageName: node linkType: hard From b4a45b7b7028ad52dc12e0c0935dac6766876075 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 11:08:28 +0000 Subject: [PATCH 04/32] fix(deps): update dependency @clerk/clerk-sdk-node to v4.9.1 (#8327) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../auth-providers/clerk/api/package.json | 2 +- yarn.lock | 35 ++++++++++++------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/packages/auth-providers/clerk/api/package.json b/packages/auth-providers/clerk/api/package.json index aa5ceea99e8d..9747327811bf 100644 --- a/packages/auth-providers/clerk/api/package.json +++ b/packages/auth-providers/clerk/api/package.json @@ -23,7 +23,7 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.21.5", - "@clerk/clerk-sdk-node": "4.8.7", + "@clerk/clerk-sdk-node": "4.9.1", "core-js": "3.30.2" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 005b0ec6031b..181cac8d0879 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2107,18 +2107,18 @@ __metadata: languageName: node linkType: hard -"@clerk/backend@npm:^0.18.0": - version: 0.18.0 - resolution: "@clerk/backend@npm:0.18.0" +"@clerk/backend@npm:^0.19.1": + version: 0.19.1 + resolution: "@clerk/backend@npm:0.19.1" dependencies: - "@clerk/types": ^3.36.0 + "@clerk/types": ^3.37.1 "@peculiar/webcrypto": 1.4.1 "@types/node": 16.18.6 deepmerge: 4.2.2 node-fetch-native: 1.0.1 snakecase-keys: 5.4.4 tslib: 2.4.1 - checksum: e41aceb9ca844b998d41d879b3abbad5d8faae248edd14f21f539ec74eae4d6d89ef9267f5e8792ae8b8215ccfecbfea2fae5c1828d99fb9f6d0b36fc33f64ae + checksum: 945dd6435117c3b5a9c891954f995de9fe2f4702b4cf291a7d61f4e4480b8f570a118467d33c21d75336dacaaeacf8fd40115c7e27e99b3c9ca292577b3fc222 languageName: node linkType: hard @@ -2136,12 +2136,12 @@ __metadata: languageName: node linkType: hard -"@clerk/clerk-sdk-node@npm:4.8.7": - version: 4.8.7 - resolution: "@clerk/clerk-sdk-node@npm:4.8.7" +"@clerk/clerk-sdk-node@npm:4.9.1": + version: 4.9.1 + resolution: "@clerk/clerk-sdk-node@npm:4.9.1" dependencies: - "@clerk/backend": ^0.18.0 - "@clerk/types": ^3.36.0 + "@clerk/backend": ^0.19.1 + "@clerk/types": ^3.37.1 "@types/cookies": 0.7.7 "@types/express": 4.17.14 "@types/node-fetch": 2.6.2 @@ -2149,7 +2149,7 @@ __metadata: cookie: 0.5.0 snakecase-keys: 3.2.1 tslib: 2.4.1 - checksum: fb76c3b0285e8a66daca29fe85e0dc9c2e1d95584b34dedf82a66d97f0a59ad3928523f466e9bf674cabc77e17af5307cb81fd61650b72598c10fd18abeaa3e2 + checksum: 4ea96b2ee8360669ab4fbed41e8a296d6beea904c3368ea7ff4ab0ede3d557b3561e9c580b69eec431863a5ffc713f287b7fa64f2d9454bf6ef388de7e5d4ab5 languageName: node linkType: hard @@ -2162,7 +2162,7 @@ __metadata: languageName: node linkType: hard -"@clerk/types@npm:3.36.0, @clerk/types@npm:^3.36.0": +"@clerk/types@npm:3.36.0": version: 3.36.0 resolution: "@clerk/types@npm:3.36.0" dependencies: @@ -2171,6 +2171,15 @@ __metadata: languageName: node linkType: hard +"@clerk/types@npm:^3.36.0, @clerk/types@npm:^3.37.1": + version: 3.37.1 + resolution: "@clerk/types@npm:3.37.1" + dependencies: + csstype: 3.1.1 + checksum: 6ecf745a26c3f816ec92c03c9435d08fb3db73ecf234e91cbcd8c5ebd3935133bd8b9b8aa70dd6f7365e5808a6aba3b9acfab5a17b1e26ee97b97b35a26d4e05 + languageName: node + linkType: hard + "@cnakazawa/watch@npm:^1.0.3": version: 1.0.4 resolution: "@cnakazawa/watch@npm:1.0.4" @@ -6580,7 +6589,7 @@ __metadata: "@babel/cli": 7.21.5 "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 - "@clerk/clerk-sdk-node": 4.8.7 + "@clerk/clerk-sdk-node": 4.9.1 "@redwoodjs/api": 5.0.0 "@types/aws-lambda": 8.10.115 core-js: 3.30.2 From f4ac25293a3a01fc5a4b1dd890367ed7012c1eb4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 15:09:27 +0000 Subject: [PATCH 05/32] fix(deps): update dependency vite to v4.3.7 (#8338) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/vite/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/vite/package.json b/packages/vite/package.json index b7edd5250424..34763d1c3a42 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -31,7 +31,7 @@ "@vitejs/plugin-react": "4.0.0", "buffer": "6.0.3", "core-js": "3.30.2", - "vite": "4.3.5", + "vite": "4.3.7", "vite-plugin-commonjs": "0.6.2", "vite-plugin-environment": "1.1.3", "vite-plugin-html": "3.2.0" diff --git a/yarn.lock b/yarn.lock index 181cac8d0879..d79f723d25b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7571,7 +7571,7 @@ __metadata: glob: 10.2.4 jest: 29.5.0 typescript: 5.0.4 - vite: 4.3.5 + vite: 4.3.7 vite-plugin-commonjs: 0.6.2 vite-plugin-environment: 1.1.3 vite-plugin-html: 3.2.0 @@ -31976,9 +31976,9 @@ __metadata: languageName: node linkType: hard -"vite@npm:4.3.5": - version: 4.3.5 - resolution: "vite@npm:4.3.5" +"vite@npm:4.3.7": + version: 4.3.7 + resolution: "vite@npm:4.3.7" dependencies: esbuild: ^0.17.5 fsevents: ~2.3.2 @@ -32009,7 +32009,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 56c5de4c6a4cb383492302173372be71c4e55a9eabc7268b6036152880800b7a85ee19be3d4c9f2cdd7af33df53c0153c58e6db402b08e8f6299a7b15fd53b88 + checksum: 7d148052419840dfc2b650309924f841d333dfcf5da10d839c9af715da45b1313a771dbb0356145db4aa827e86eb9f7673daffeca9a90d24eade2d4f70d5dad6 languageName: node linkType: hard From 39da062d10d40106a68a77dfbf0d07164f04ecb1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 10:30:47 -0700 Subject: [PATCH 06/32] fix(deps): update dependency @whatwg-node/fetch to v0.9.0 (#8344) --- packages/api/package.json | 2 +- packages/codemods/package.json | 2 +- packages/graphql-server/package.json | 2 +- packages/prerender/package.json | 2 +- packages/telemetry/package.json | 2 +- yarn.lock | 42 ++++++++++++++++++++++++---- 6 files changed, 41 insertions(+), 11 deletions(-) diff --git a/packages/api/package.json b/packages/api/package.json index bf0b85fd441d..221b2d168d97 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -33,7 +33,7 @@ "dependencies": { "@babel/runtime-corejs3": "7.21.5", "@prisma/client": "4.14.0", - "@whatwg-node/fetch": "0.8.8", + "@whatwg-node/fetch": "0.9.0", "core-js": "3.30.2", "humanize-string": "2.1.0", "jsonwebtoken": "9.0.0", diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 5ec3c8cbf200..a029890f9193 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -30,7 +30,7 @@ "@babel/traverse": "7.21.5", "@iarna/toml": "2.2.5", "@vscode/ripgrep": "1.15.3", - "@whatwg-node/fetch": "0.8.8", + "@whatwg-node/fetch": "0.9.0", "cheerio": "1.0.0-rc.12", "core-js": "3.30.2", "deepmerge": "4.3.1", diff --git a/packages/graphql-server/package.json b/packages/graphql-server/package.json index 599ae113f50f..ee3ed1a1c737 100644 --- a/packages/graphql-server/package.json +++ b/packages/graphql-server/package.json @@ -53,7 +53,7 @@ "@types/lodash.merge": "4.6.7", "@types/lodash.omitby": "4.6.7", "@types/uuid": "9.0.1", - "@whatwg-node/fetch": "0.8.8", + "@whatwg-node/fetch": "0.9.0", "aws-lambda": "1.0.7", "jest": "29.5.0", "jsonwebtoken": "9.0.0", diff --git a/packages/prerender/package.json b/packages/prerender/package.json index 4ff1f0c3c3f9..fd11d4156773 100644 --- a/packages/prerender/package.json +++ b/packages/prerender/package.json @@ -31,7 +31,7 @@ "@redwoodjs/router": "5.0.0", "@redwoodjs/structure": "5.0.0", "@redwoodjs/web": "5.0.0", - "@whatwg-node/fetch": "0.8.8", + "@whatwg-node/fetch": "0.9.0", "babel-plugin-ignore-html-and-css-imports": "0.1.0", "cheerio": "1.0.0-rc.12", "core-js": "3.30.2", diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index 227afc4a573d..03caff9a3bc1 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -29,7 +29,7 @@ "@babel/runtime-corejs3": "7.21.5", "@redwoodjs/project-config": "5.0.0", "@redwoodjs/structure": "5.0.0", - "@whatwg-node/fetch": "0.8.8", + "@whatwg-node/fetch": "0.9.0", "ci-info": "3.8.0", "core-js": "3.30.2", "envinfo": "7.8.1", diff --git a/yarn.lock b/yarn.lock index d79f723d25b2..3b4ab7494bb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6449,7 +6449,7 @@ __metadata: "@types/memjs": 1 "@types/pascalcase": 1.0.1 "@types/split2": 4.2.0 - "@whatwg-node/fetch": 0.8.8 + "@whatwg-node/fetch": 0.9.0 core-js: 3.30.2 humanize-string: 2.1.0 jest: 29.5.0 @@ -7038,7 +7038,7 @@ __metadata: "@types/prettier": 2.7.2 "@types/yargs": 17.0.24 "@vscode/ripgrep": 1.15.3 - "@whatwg-node/fetch": 0.8.8 + "@whatwg-node/fetch": 0.9.0 cheerio: 1.0.0-rc.12 core-js: 3.30.2 deepmerge: 4.3.1 @@ -7237,7 +7237,7 @@ __metadata: "@types/lodash.merge": 4.6.7 "@types/lodash.omitby": 4.6.7 "@types/uuid": 9.0.1 - "@whatwg-node/fetch": 0.8.8 + "@whatwg-node/fetch": 0.9.0 aws-lambda: 1.0.7 core-js: 3.30.2 graphql: 16.6.0 @@ -7320,7 +7320,7 @@ __metadata: "@redwoodjs/structure": 5.0.0 "@redwoodjs/web": 5.0.0 "@types/mime-types": 2.1.1 - "@whatwg-node/fetch": 0.8.8 + "@whatwg-node/fetch": 0.9.0 babel-plugin-ignore-html-and-css-imports: 0.1.0 babel-plugin-tester: 11.0.4 cheerio: 1.0.0-rc.12 @@ -7489,7 +7489,7 @@ __metadata: "@types/envinfo": 7.8.1 "@types/uuid": 9.0.1 "@types/yargs": 17.0.24 - "@whatwg-node/fetch": 0.8.8 + "@whatwg-node/fetch": 0.9.0 ci-info: 3.8.0 core-js: 3.30.2 envinfo: 7.8.1 @@ -10871,7 +10871,24 @@ __metadata: languageName: node linkType: hard -"@whatwg-node/fetch@npm:0.8.8, @whatwg-node/fetch@npm:^0.8.0, @whatwg-node/fetch@npm:^0.8.1, @whatwg-node/fetch@npm:^0.8.2, @whatwg-node/fetch@npm:^0.8.4": +"@whatwg-node/events@npm:^0.1.0": + version: 0.1.0 + resolution: "@whatwg-node/events@npm:0.1.0" + checksum: 6fbd1ce0d08fb61193390654d77ddc728cf955f664858d87d1de6bbb8ce8ca3bd424575d6979d864831a89790087a8521f403fa8ec3a81360e3c335f663b4e32 + languageName: node + linkType: hard + +"@whatwg-node/fetch@npm:0.9.0": + version: 0.9.0 + resolution: "@whatwg-node/fetch@npm:0.9.0" + dependencies: + "@whatwg-node/node-fetch": ^0.4.0 + urlpattern-polyfill: ^8.0.0 + checksum: ca050f1f8e24e88ad37d84f7307fe116cf973ecc4691707490214b7b8d17355cd4dc0c02811255d015ce57381f0505443647dd12e800dd46f8205c84ac5487bc + languageName: node + linkType: hard + +"@whatwg-node/fetch@npm:^0.8.0, @whatwg-node/fetch@npm:^0.8.1, @whatwg-node/fetch@npm:^0.8.2, @whatwg-node/fetch@npm:^0.8.4": version: 0.8.8 resolution: "@whatwg-node/fetch@npm:0.8.8" dependencies: @@ -10897,6 +10914,19 @@ __metadata: languageName: node linkType: hard +"@whatwg-node/node-fetch@npm:^0.4.0": + version: 0.4.0 + resolution: "@whatwg-node/node-fetch@npm:0.4.0" + dependencies: + "@whatwg-node/events": ^0.1.0 + busboy: ^1.6.0 + fast-querystring: ^1.1.1 + fast-url-parser: ^1.1.3 + tslib: ^2.3.1 + checksum: d08bbd46fcaf505e22782acfca12d68ce7d3edd7bb3b268851070fff98d7e3c5377a5ec47dd00fe2136141f21a8978ceee99c8cc7e2ba992521f10199ca550f9 + languageName: node + linkType: hard + "@whatwg-node/server@npm:^0.7.3": version: 0.7.4 resolution: "@whatwg-node/server@npm:0.7.4" From 8783e5907599961a6965ad3bd6231e1117f5a53e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 10:31:24 -0700 Subject: [PATCH 07/32] chore(deps): update dependency nx to v16.2.1 (#8343) --- package.json | 2 +- yarn.lock | 94 ++++++++++++++++++++++++++-------------------------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index d61e869d63e2..cced9f10dcdb 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "ncp": "2.0.0", "nodemon": "2.0.22", "npm-packlist": "7.0.4", - "nx": "16.1.4", + "nx": "16.2.1", "nx-cloud": "16.0.5", "octokit": "2.0.14", "ora": "5.4.1", diff --git a/yarn.lock b/yarn.lock index 3b4ab7494bb9..a9f42003c431 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5276,76 +5276,76 @@ __metadata: languageName: node linkType: hard -"@nrwl/tao@npm:16.1.4": - version: 16.1.4 - resolution: "@nrwl/tao@npm:16.1.4" +"@nrwl/tao@npm:16.2.1": + version: 16.2.1 + resolution: "@nrwl/tao@npm:16.2.1" dependencies: - nx: 16.1.4 + nx: 16.2.1 bin: tao: index.js - checksum: 6ab1acd633b1bf1c53a9e7580f4a1bd9e91e651fe15b8e2823b338dab346a508e427f025b086b478d53120552aac4c59c59636b877dd0c0f7fd5f0d8d2e939d1 + checksum: a11a1da116a776df20c9eb784310f9d3e48b4edcd1e46482c73b64d7653a92f65833eaf3626fb500518f3bae66610aa15b1ee3bcb16def3170dcb98594cc4c3f languageName: node linkType: hard -"@nx/nx-darwin-arm64@npm:16.1.4": - version: 16.1.4 - resolution: "@nx/nx-darwin-arm64@npm:16.1.4" +"@nx/nx-darwin-arm64@npm:16.2.1": + version: 16.2.1 + resolution: "@nx/nx-darwin-arm64@npm:16.2.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@nx/nx-darwin-x64@npm:16.1.4": - version: 16.1.4 - resolution: "@nx/nx-darwin-x64@npm:16.1.4" +"@nx/nx-darwin-x64@npm:16.2.1": + version: 16.2.1 + resolution: "@nx/nx-darwin-x64@npm:16.2.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@nx/nx-linux-arm-gnueabihf@npm:16.1.4": - version: 16.1.4 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:16.1.4" +"@nx/nx-linux-arm-gnueabihf@npm:16.2.1": + version: 16.2.1 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:16.2.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@nx/nx-linux-arm64-gnu@npm:16.1.4": - version: 16.1.4 - resolution: "@nx/nx-linux-arm64-gnu@npm:16.1.4" +"@nx/nx-linux-arm64-gnu@npm:16.2.1": + version: 16.2.1 + resolution: "@nx/nx-linux-arm64-gnu@npm:16.2.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-arm64-musl@npm:16.1.4": - version: 16.1.4 - resolution: "@nx/nx-linux-arm64-musl@npm:16.1.4" +"@nx/nx-linux-arm64-musl@npm:16.2.1": + version: 16.2.1 + resolution: "@nx/nx-linux-arm64-musl@npm:16.2.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@nx/nx-linux-x64-gnu@npm:16.1.4": - version: 16.1.4 - resolution: "@nx/nx-linux-x64-gnu@npm:16.1.4" +"@nx/nx-linux-x64-gnu@npm:16.2.1": + version: 16.2.1 + resolution: "@nx/nx-linux-x64-gnu@npm:16.2.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-x64-musl@npm:16.1.4": - version: 16.1.4 - resolution: "@nx/nx-linux-x64-musl@npm:16.1.4" +"@nx/nx-linux-x64-musl@npm:16.2.1": + version: 16.2.1 + resolution: "@nx/nx-linux-x64-musl@npm:16.2.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@nx/nx-win32-arm64-msvc@npm:16.1.4": - version: 16.1.4 - resolution: "@nx/nx-win32-arm64-msvc@npm:16.1.4" +"@nx/nx-win32-arm64-msvc@npm:16.2.1": + version: 16.2.1 + resolution: "@nx/nx-win32-arm64-msvc@npm:16.2.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@nx/nx-win32-x64-msvc@npm:16.1.4": - version: 16.1.4 - resolution: "@nx/nx-win32-x64-msvc@npm:16.1.4" +"@nx/nx-win32-x64-msvc@npm:16.2.1": + version: 16.2.1 + resolution: "@nx/nx-win32-x64-msvc@npm:16.2.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -24876,20 +24876,20 @@ __metadata: languageName: node linkType: hard -"nx@npm:16.1.4": - version: 16.1.4 - resolution: "nx@npm:16.1.4" +"nx@npm:16.2.1": + version: 16.2.1 + resolution: "nx@npm:16.2.1" dependencies: - "@nrwl/tao": 16.1.4 - "@nx/nx-darwin-arm64": 16.1.4 - "@nx/nx-darwin-x64": 16.1.4 - "@nx/nx-linux-arm-gnueabihf": 16.1.4 - "@nx/nx-linux-arm64-gnu": 16.1.4 - "@nx/nx-linux-arm64-musl": 16.1.4 - "@nx/nx-linux-x64-gnu": 16.1.4 - "@nx/nx-linux-x64-musl": 16.1.4 - "@nx/nx-win32-arm64-msvc": 16.1.4 - "@nx/nx-win32-x64-msvc": 16.1.4 + "@nrwl/tao": 16.2.1 + "@nx/nx-darwin-arm64": 16.2.1 + "@nx/nx-darwin-x64": 16.2.1 + "@nx/nx-linux-arm-gnueabihf": 16.2.1 + "@nx/nx-linux-arm64-gnu": 16.2.1 + "@nx/nx-linux-arm64-musl": 16.2.1 + "@nx/nx-linux-x64-gnu": 16.2.1 + "@nx/nx-linux-x64-musl": 16.2.1 + "@nx/nx-win32-arm64-msvc": 16.2.1 + "@nx/nx-win32-x64-msvc": 16.2.1 "@parcel/watcher": 2.0.4 "@yarnpkg/lockfile": ^1.1.0 "@yarnpkg/parsers": ^3.0.0-rc.18 @@ -24952,7 +24952,7 @@ __metadata: optional: true bin: nx: bin/nx.js - checksum: 2c291bbf771de5a3c98bbe1707f699ca58fad109ed29a7f96a61ce415acd024f37a723a98894c6517e3bf17f9b476973fbce51fff9f3b494cbf72dd821827270 + checksum: a6d78686dea2cb72d84d06dc1feed0dc0e07080c607c78939c1083b7a05cc9d30514016aa79dc584fd54dffa0612c7051666ddb7fb1ddf4e7373f0515f7ed6f6 languageName: node linkType: hard @@ -28432,7 +28432,7 @@ __metadata: ncp: 2.0.0 nodemon: 2.0.22 npm-packlist: 7.0.4 - nx: 16.1.4 + nx: 16.2.1 nx-cloud: 16.0.5 octokit: 2.0.14 ora: 5.4.1 From 32d79176dbde4410e71b446372c7ee9c81d89cf3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 10:32:06 -0700 Subject: [PATCH 08/32] chore(deps): update dependency @clerk/types to v3.38.0 (#8325) --- .../auth-providers/clerk/web/package.json | 2 +- yarn.lock | 19 +++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/packages/auth-providers/clerk/web/package.json b/packages/auth-providers/clerk/web/package.json index 6a6e33ed1462..da81bde0da53 100644 --- a/packages/auth-providers/clerk/web/package.json +++ b/packages/auth-providers/clerk/web/package.json @@ -30,7 +30,7 @@ "@babel/cli": "7.21.5", "@babel/core": "7.21.8", "@clerk/clerk-react": "4.15.4", - "@clerk/types": "3.36.0", + "@clerk/types": "3.38.0", "@types/react": "18.2.6", "jest": "29.5.0", "react": "18.2.0", diff --git a/yarn.lock b/yarn.lock index a9f42003c431..e6c1ee96a203 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2162,21 +2162,12 @@ __metadata: languageName: node linkType: hard -"@clerk/types@npm:3.36.0": - version: 3.36.0 - resolution: "@clerk/types@npm:3.36.0" +"@clerk/types@npm:3.38.0, @clerk/types@npm:^3.36.0, @clerk/types@npm:^3.37.1": + version: 3.38.0 + resolution: "@clerk/types@npm:3.38.0" dependencies: csstype: 3.1.1 - checksum: 365fe33449ef0d3f124f76b96cfa97b08d5621809f7cc829092511aa04c739e737c15bf9741edb23709dadca91348327c269186812039f68ea2d1ec159ec0d5c - languageName: node - linkType: hard - -"@clerk/types@npm:^3.36.0, @clerk/types@npm:^3.37.1": - version: 3.37.1 - resolution: "@clerk/types@npm:3.37.1" - dependencies: - csstype: 3.1.1 - checksum: 6ecf745a26c3f816ec92c03c9435d08fb3db73ecf234e91cbcd8c5ebd3935133bd8b9b8aa70dd6f7365e5808a6aba3b9acfab5a17b1e26ee97b97b35a26d4e05 + checksum: 7611703cd9dbfe2bc03fbc97ca1470c807d4cd8fff4ed3bc7af8cb9ff3f6b83ea578b24ba94fff16107c9e250399cceec5370e6969c2d19489a7b7549675bc7a languageName: node linkType: hard @@ -6621,7 +6612,7 @@ __metadata: "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 "@clerk/clerk-react": 4.15.4 - "@clerk/types": 3.36.0 + "@clerk/types": 3.38.0 "@redwoodjs/auth": 5.0.0 "@types/react": 18.2.6 core-js: 3.30.2 From 8396ea6bfa648f8b8edf7ffef275650d9e096a9a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 10:35:55 -0700 Subject: [PATCH 09/32] chore(deps): update dependency @clerk/clerk-react to v4.16.1 (#8324) --- .../auth-providers/clerk/web/package.json | 4 +- yarn.lock | 42 ++++++++++--------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/packages/auth-providers/clerk/web/package.json b/packages/auth-providers/clerk/web/package.json index da81bde0da53..da5bbd37fe7b 100644 --- a/packages/auth-providers/clerk/web/package.json +++ b/packages/auth-providers/clerk/web/package.json @@ -29,7 +29,7 @@ "devDependencies": { "@babel/cli": "7.21.5", "@babel/core": "7.21.8", - "@clerk/clerk-react": "4.15.4", + "@clerk/clerk-react": "4.16.1", "@clerk/types": "3.38.0", "@types/react": "18.2.6", "jest": "29.5.0", @@ -37,7 +37,7 @@ "typescript": "5.0.4" }, "peerDependencies": { - "@clerk/clerk-react": "4.15.4" + "@clerk/clerk-react": "4.16.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/yarn.lock b/yarn.lock index e6c1ee96a203..f5d33aef5e29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2122,17 +2122,17 @@ __metadata: languageName: node linkType: hard -"@clerk/clerk-react@npm:4.15.4": - version: 4.15.4 - resolution: "@clerk/clerk-react@npm:4.15.4" +"@clerk/clerk-react@npm:4.16.1": + version: 4.16.1 + resolution: "@clerk/clerk-react@npm:4.16.1" dependencies: - "@clerk/shared": ^0.15.7 - "@clerk/types": ^3.36.0 + "@clerk/shared": ^0.16.1 + "@clerk/types": ^3.37.1 swr: 1.3.0 tslib: 2.4.1 peerDependencies: react: ">=16" - checksum: 73bf3ec599ca6470ea8a9e1a9cff6501781c3480dca3ec5c0a84bf1dea108568838a00d1b849f5ffb38eef3969316f8275dcd4a60eedab078b7f1271fc5a1926 + checksum: 1288c8fe4aa70af6685b61770e6d443affbe16084cbe13598c45e009f8481181e12e8bb1df858cc445b30c0c34e91195e5bbd6db7678e040353fbd468617e744 languageName: node linkType: hard @@ -2153,16 +2153,18 @@ __metadata: languageName: node linkType: hard -"@clerk/shared@npm:^0.15.7": - version: 0.15.7 - resolution: "@clerk/shared@npm:0.15.7" +"@clerk/shared@npm:^0.16.1": + version: 0.16.1 + resolution: "@clerk/shared@npm:0.16.1" + dependencies: + glob-to-regexp: 0.4.1 peerDependencies: react: ">=16" - checksum: 555abc739a2d6e7508de2a28a9cda07c6a7d030df358119d3cb308af067fd28c93c59b694fa9b7284b8f102e83d98d38ac37e204e77e3207e1c47fb801c9b974 + checksum: 5818970f52ec99cea3ca15379a2a103ebd64a67d29add79adbcc76a091c2b97608f5ad2352721d65b2f67519d44ffa52b13a1e12d7a5254a4f6daa7b455de213 languageName: node linkType: hard -"@clerk/types@npm:3.38.0, @clerk/types@npm:^3.36.0, @clerk/types@npm:^3.37.1": +"@clerk/types@npm:3.38.0, @clerk/types@npm:^3.37.1": version: 3.38.0 resolution: "@clerk/types@npm:3.38.0" dependencies: @@ -6611,7 +6613,7 @@ __metadata: "@babel/cli": 7.21.5 "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 - "@clerk/clerk-react": 4.15.4 + "@clerk/clerk-react": 4.16.1 "@clerk/types": 3.38.0 "@redwoodjs/auth": 5.0.0 "@types/react": 18.2.6 @@ -6620,7 +6622,7 @@ __metadata: react: 18.2.0 typescript: 5.0.4 peerDependencies: - "@clerk/clerk-react": 4.15.4 + "@clerk/clerk-react": 4.16.1 languageName: unknown linkType: soft @@ -18620,6 +18622,13 @@ __metadata: languageName: node linkType: hard +"glob-to-regexp@npm:0.4.1, glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + "glob-to-regexp@npm:^0.3.0": version: 0.3.0 resolution: "glob-to-regexp@npm:0.3.0" @@ -18627,13 +18636,6 @@ __metadata: languageName: node linkType: hard -"glob-to-regexp@npm:^0.4.1": - version: 0.4.1 - resolution: "glob-to-regexp@npm:0.4.1" - checksum: 0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 - languageName: node - linkType: hard - "glob@npm:10.2.4, glob@npm:^10.0.0": version: 10.2.4 resolution: "glob@npm:10.2.4" From 88f68ef867db29327c0848f9bed5e89435775683 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 10:42:05 -0700 Subject: [PATCH 10/32] chore(deps): update dependency dependency-cruiser to v13 (#8322) --- packages/project-config/package.json | 2 +- yarn.lock | 134 ++++++++++++++------------- 2 files changed, 73 insertions(+), 63 deletions(-) diff --git a/packages/project-config/package.json b/packages/project-config/package.json index 0191f1ae2129..556d834daf39 100644 --- a/packages/project-config/package.json +++ b/packages/project-config/package.json @@ -34,7 +34,7 @@ }, "devDependencies": { "@types/findup-sync": "4.0.2", - "dependency-cruiser": "12.12.2", + "dependency-cruiser": "13.0.1", "jest": "29.5.0", "rimraf": "5.0.0", "typescript": "5.0.4" diff --git a/yarn.lock b/yarn.lock index f5d33aef5e29..74eb3498604d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7335,7 +7335,7 @@ __metadata: "@iarna/toml": 2.2.5 "@types/findup-sync": 4.0.2 deepmerge: 4.3.1 - dependency-cruiser: 12.12.2 + dependency-cruiser: 13.0.1 fast-glob: 3.2.12 findup-sync: 5.0.0 jest: 29.5.0 @@ -13419,6 +13419,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:5.2.0, chalk@npm:^5.2.0": + version: 5.2.0 + resolution: "chalk@npm:5.2.0" + checksum: 8a519b35c239f96e041b7f1ed8fdd79d3ca2332a8366cb957378b8a1b8a4cdfb740d19628e8bf74654d4c0917aa10cf39c20752e177a1304eac29a1168a740e9 + languageName: node + linkType: hard + "chalk@npm:^2.0.0, chalk@npm:^2.4.1": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -13440,13 +13447,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.2.0": - version: 5.2.0 - resolution: "chalk@npm:5.2.0" - checksum: 8a519b35c239f96e041b7f1ed8fdd79d3ca2332a8366cb957378b8a1b8a4cdfb740d19628e8bf74654d4c0917aa10cf39c20752e177a1304eac29a1168a740e9 - languageName: node - linkType: hard - "change-case-all@npm:1.0.14": version: 1.0.14 resolution: "change-case-all@npm:1.0.14" @@ -15583,9 +15583,9 @@ __metadata: languageName: node linkType: hard -"dependency-cruiser@npm:12.12.2": - version: 12.12.2 - resolution: "dependency-cruiser@npm:12.12.2" +"dependency-cruiser@npm:13.0.1": + version: 13.0.1 + resolution: "dependency-cruiser@npm:13.0.1" dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2 @@ -15593,15 +15593,15 @@ __metadata: acorn-loose: 8.3.0 acorn-walk: 8.2.0 ajv: 8.12.0 - chalk: ^4.1.2 + chalk: 5.2.0 commander: 10.0.1 enhanced-resolve: 5.14.0 - figures: ^3.2.0 + figures: 5.0.0 get-stream: ^6.0.1 - glob: 7.2.0 + glob: 10.2.4 handlebars: 4.7.7 ignore: 5.2.4 - indent-string: ^4.0.0 + indent-string: 5.0.0 interpret: ^3.1.1 is-installed-globally: 0.4.0 json5: 2.2.3 @@ -15609,20 +15609,20 @@ __metadata: prompts: 2.4.2 rechoir: ^0.8.0 safe-regex: 2.1.1 - semver: ^7.3.7 + semver: ^7.5.1 semver-try-require: 6.2.2 teamcity-service-messages: 0.1.14 tsconfig-paths-webpack-plugin: 4.0.1 - watskeburt: 0.11.1 - wrap-ansi: ^7.0.0 + watskeburt: 0.11.2 + wrap-ansi: 8.1.0 bin: - depcruise: bin/dependency-cruise.js - depcruise-baseline: bin/depcruise-baseline.js - depcruise-fmt: bin/depcruise-fmt.js - depcruise-wrap-stream-in-html: bin/wrap-stream-in-html.js - dependency-cruise: bin/dependency-cruise.js - dependency-cruiser: bin/dependency-cruise.js - checksum: 205d5ed363eb126f1a5405590a583f639ca6d60f220e56d1bdcb08f9c275ac51a2cef1eb7a88210535ff4305d18d34668a8e756af97e859aa831d32375470e78 + depcruise: bin/dependency-cruise.mjs + depcruise-baseline: bin/depcruise-baseline.mjs + depcruise-fmt: bin/depcruise-fmt.mjs + depcruise-wrap-stream-in-html: bin/wrap-stream-in-html.mjs + dependency-cruise: bin/dependency-cruise.mjs + dependency-cruiser: bin/dependency-cruise.mjs + checksum: 3b0765d0f4825ce8d5d8e30e30b5ca62bac32af4ed023002979259e6a463fc52e9d1353fd5d366fb4ba59b00ada0a5535c395b49383bc5553d469fe7751b3310 languageName: node linkType: hard @@ -16585,6 +16585,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + "escodegen@npm:^2.0.0": version: 2.0.0 resolution: "escodegen@npm:2.0.0" @@ -17590,6 +17597,16 @@ __metadata: languageName: node linkType: hard +"figures@npm:5.0.0": + version: 5.0.0 + resolution: "figures@npm:5.0.0" + dependencies: + escape-string-regexp: ^5.0.0 + is-unicode-supported: ^1.2.0 + checksum: ce0f17d4ea8b0fc429c5207c343534a2f5284ecfb22aa08607da7dc84ed9e1cf754f5b97760e8dcb98d3c9d1a1e4d3d578fe3b5b99c426f05d0f06c7ba618e16 + languageName: node + linkType: hard + "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -18665,20 +18682,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.2.0": - version: 7.2.0 - resolution: "glob@npm:7.2.0" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.0.4 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 478b40e38be5a3d514e64950e1e07e0ac120585add6a37c98d0ed24d72d9127d734d2a125786073c8deb687096e84ae82b641c441a869ada3a9cc91b68978632 - languageName: node - linkType: hard - "glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -19884,6 +19887,13 @@ __metadata: languageName: node linkType: hard +"indent-string@npm:5.0.0, indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 + languageName: node + linkType: hard + "indent-string@npm:^2.1.0": version: 2.1.0 resolution: "indent-string@npm:2.1.0" @@ -19893,13 +19903,6 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^5.0.0": - version: 5.0.0 - resolution: "indent-string@npm:5.0.0" - checksum: 8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 - languageName: node - linkType: hard - "infer-owner@npm:^1.0.3, infer-owner@npm:^1.0.4": version: 1.0.4 resolution: "infer-owner@npm:1.0.4" @@ -20749,6 +20752,13 @@ __metadata: languageName: node linkType: hard +"is-unicode-supported@npm:^1.2.0": + version: 1.3.0 + resolution: "is-unicode-supported@npm:1.3.0" + checksum: b8674ea95d869f6faabddc6a484767207058b91aea0250803cbf1221345cb0c56f466d4ecea375dc77f6633d248d33c47bd296fb8f4cdba0b4edba8917e83d8a + languageName: node + linkType: hard + "is-upper-case@npm:^2.0.2": version: 2.0.2 resolution: "is-upper-case@npm:2.0.2" @@ -28753,7 +28763,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.5.1, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": +"semver@npm:7.5.1, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.1": version: 7.5.1 resolution: "semver@npm:7.5.1" dependencies: @@ -32153,14 +32163,14 @@ __metadata: languageName: node linkType: hard -"watskeburt@npm:0.11.1": - version: 0.11.1 - resolution: "watskeburt@npm:0.11.1" +"watskeburt@npm:0.11.2": + version: 0.11.2 + resolution: "watskeburt@npm:0.11.2" dependencies: commander: 10.0.1 bin: watskeburt: bin/cli.js - checksum: f5c1e454cfeb04407e4c112710f70f2b6affc5ef848365de49b2dc7d3d9743aa2c86bb07c7d8f13d59ac6107fffbd905a4d11d25347ebf43a956029dbeac95cc + checksum: 4001673995b52fd9009301f3a5b65c15328fda4e12c5e1f8a18b71595ad30ca277cc3a081817af9a9c0ffe2c06cc200641cc1caaeed1dd18b156c92916908b37 languageName: node linkType: hard @@ -32782,6 +32792,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:8.1.0, wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + "wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -32804,17 +32825,6 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: ^6.1.0 - string-width: ^5.0.1 - strip-ansi: ^7.0.1 - checksum: 138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" From 02c815eee271614cab874778efa3d7965c9ac94e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 14:01:49 -0700 Subject: [PATCH 11/32] fix(deps): update dependency webpack to v5.83.1 (#8348) * fix(deps): update dependency webpack to v5.83.0 * upgrade to v5.83.1 * dedupe --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Dominic Saadi --- packages/core/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 9fe92a3a1aae..0045c956f527 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -79,7 +79,7 @@ "style-loader": "3.3.2", "typescript": "5.0.4", "url-loader": "4.1.1", - "webpack": "5.82.1", + "webpack": "5.83.1", "webpack-bundle-analyzer": "4.8.0", "webpack-cli": "5.1.1", "webpack-dev-server": "4.15.0", diff --git a/yarn.lock b/yarn.lock index 74eb3498604d..effb3508220d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7102,7 +7102,7 @@ __metadata: style-loader: 3.3.2 typescript: 5.0.4 url-loader: 4.1.1 - webpack: 5.82.1 + webpack: 5.83.1 webpack-bundle-analyzer: 4.8.0 webpack-cli: 5.1.1 webpack-dev-server: 4.15.0 @@ -32535,9 +32535,9 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5.82.1, webpack@npm:>=4.43.0 <6.0.0, webpack@npm:^5, webpack@npm:^5.9.0": - version: 5.82.1 - resolution: "webpack@npm:5.82.1" +"webpack@npm:5.83.1, webpack@npm:>=4.43.0 <6.0.0, webpack@npm:^5, webpack@npm:^5.9.0": + version: 5.83.1 + resolution: "webpack@npm:5.83.1" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^1.0.0 @@ -32568,7 +32568,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 8583c71f30af348d16b63b8c2112653445063351b8bebd6033451a3bcf89176c1aec45fcd0f5a048e429e78004b79bb76d1a19f6e166d5bd802306a2df19b725 + checksum: 5a3b12776dd4fbc73c757762d100781c97e2edf70b574a29653613a3b89b447d55ec534419c52bc6aeb78a77c432f5106f01af5742fbc2fe9cd8533bcffcedcd languageName: node linkType: hard From f82dfb9c1f8baa2c2599bfbae378d801e3edc905 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 14:28:39 -0700 Subject: [PATCH 12/32] fix(deps): update prisma monorepo to v4.14.1 (#8346) --- packages/api/package.json | 2 +- packages/cli/package.json | 4 +- packages/record/package.json | 4 +- packages/structure/package.json | 2 +- yarn.lock | 106 ++++++++++++++++---------------- 5 files changed, 59 insertions(+), 59 deletions(-) diff --git a/packages/api/package.json b/packages/api/package.json index 221b2d168d97..464fa15b3211 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.21.5", - "@prisma/client": "4.14.0", + "@prisma/client": "4.14.1", "@whatwg-node/fetch": "0.9.0", "core-js": "3.30.2", "humanize-string": "2.1.0", diff --git a/packages/cli/package.json b/packages/cli/package.json index 9e110719f952..3414653e236f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -30,7 +30,7 @@ "dependencies": { "@babel/runtime-corejs3": "7.21.5", "@iarna/toml": "2.2.5", - "@prisma/internals": "4.14.0", + "@prisma/internals": "4.14.1", "@redwoodjs/api-server": "5.0.0", "@redwoodjs/cli-helpers": "5.0.0", "@redwoodjs/fastify": "5.0.0", @@ -65,7 +65,7 @@ "pluralize": "8.0.0", "portfinder": "1.0.32", "prettier": "2.8.8", - "prisma": "4.14.0", + "prisma": "4.14.1", "prompts": "2.4.2", "rimraf": "5.0.0", "secure-random-password": "0.2.3", diff --git a/packages/record/package.json b/packages/record/package.json index 4a233c7051aa..714e214b4278 100644 --- a/packages/record/package.json +++ b/packages/record/package.json @@ -28,14 +28,14 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.21.5", - "@prisma/client": "4.14.0", + "@prisma/client": "4.14.1", "@redwoodjs/project-config": "5.0.0", "core-js": "3.30.2" }, "devDependencies": { "@babel/cli": "7.21.5", "@babel/core": "7.21.8", - "@prisma/internals": "4.14.0", + "@prisma/internals": "4.14.1", "esbuild": "0.17.19", "jest": "29.5.0" }, diff --git a/packages/structure/package.json b/packages/structure/package.json index 07dc50ce723a..c5aec8fa82ca 100644 --- a/packages/structure/package.json +++ b/packages/structure/package.json @@ -32,7 +32,7 @@ "dependencies": { "@babel/runtime-corejs3": "7.21.5", "@iarna/toml": "2.2.5", - "@prisma/internals": "4.14.0", + "@prisma/internals": "4.14.1", "@redwoodjs/project-config": "5.0.0", "@types/line-column": "1.0.0", "camelcase": "6.3.0", diff --git a/yarn.lock b/yarn.lock index effb3508220d..d39001e7bc07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6080,9 +6080,9 @@ __metadata: languageName: node linkType: hard -"@prisma/client@npm:4.14.0": - version: 4.14.0 - resolution: "@prisma/client@npm:4.14.0" +"@prisma/client@npm:4.14.1": + version: 4.14.1 + resolution: "@prisma/client@npm:4.14.1" dependencies: "@prisma/engines-version": 4.14.0-67.d9a4c5988f480fa576d43970d5a23641aa77bc9c peerDependencies: @@ -6090,18 +6090,18 @@ __metadata: peerDependenciesMeta: prisma: optional: true - checksum: b3e42f108014de18e1049bcdce8772771abe0c6856e928df489cdea3bf850471853169175e4a5b2a7441357f69d69472391aaa4a1397add81d54d93663327022 + checksum: 94ca39d2303a68255c145d4035572611fe3470d0aa8f1ee6b76a142cb7110b6d320a0f4354ebd9a338e14fe8f4fdc0ab1675cb8d3990e882a2352b039fb9fb52 languageName: node linkType: hard -"@prisma/debug@npm:4.14.0": - version: 4.14.0 - resolution: "@prisma/debug@npm:4.14.0" +"@prisma/debug@npm:4.14.1": + version: 4.14.1 + resolution: "@prisma/debug@npm:4.14.1" dependencies: "@types/debug": 4.1.7 debug: 4.3.4 strip-ansi: 6.0.1 - checksum: b702fbdf2a618e4ce667c69affb215bef370dae503c3fe149559c574b148595384489e1c9faa91d53d970fe545fe0c25a68fe97768992660cb76cb98d79b5a72 + checksum: 98bbefb702c41e1cdc4051d14dcd46c8fff4a9d203e415d56002d5198c577879492d463c0dd271980cdeca550c924f452469a2d55178b9d519b943f612ba4820 languageName: node linkType: hard @@ -6112,19 +6112,19 @@ __metadata: languageName: node linkType: hard -"@prisma/engines@npm:4.14.0": - version: 4.14.0 - resolution: "@prisma/engines@npm:4.14.0" - checksum: 60b6acd0efba0aa8d536901b3a2667ed22a42bec686e5f8e59ffa80aa08ae0ff0e5a277b4e70e6872ba69481fe68673c15773d7999a433e8a7bebed6c8a48a4c +"@prisma/engines@npm:4.14.1": + version: 4.14.1 + resolution: "@prisma/engines@npm:4.14.1" + checksum: b94da89d7d20708b62ed70c78c6260e3fceb4123daa586938e50ae9d180df032138ebd01164a48974c614b42e5a4faa542eb425fb3d77df3251e86492fcb8e3f languageName: node linkType: hard -"@prisma/fetch-engine@npm:4.14.0": - version: 4.14.0 - resolution: "@prisma/fetch-engine@npm:4.14.0" +"@prisma/fetch-engine@npm:4.14.1": + version: 4.14.1 + resolution: "@prisma/fetch-engine@npm:4.14.1" dependencies: - "@prisma/debug": 4.14.0 - "@prisma/get-platform": 4.14.0 + "@prisma/debug": 4.14.1 + "@prisma/get-platform": 4.14.1 execa: 5.1.1 find-cache-dir: 3.3.2 fs-extra: 11.1.1 @@ -6140,27 +6140,27 @@ __metadata: rimraf: 3.0.2 temp-dir: 2.0.0 tempy: 1.0.1 - checksum: e504702b15a4b10f2624b583f8834384cd12a1c03878715a81e9a01572ffc9d877a246755a56f19ac110866cec664aac422c3d20622cd8701121e217ed729c00 + checksum: 4247ed6419b234e1d5fda5c1ee85b08319e352e3544de9d91130afbc55b3d20bf36f3cdb26724fda7632a395b866413bc5dd22701d3ea1204999c0350fb86ffc languageName: node linkType: hard -"@prisma/generator-helper@npm:4.14.0": - version: 4.14.0 - resolution: "@prisma/generator-helper@npm:4.14.0" +"@prisma/generator-helper@npm:4.14.1": + version: 4.14.1 + resolution: "@prisma/generator-helper@npm:4.14.1" dependencies: - "@prisma/debug": 4.14.0 + "@prisma/debug": 4.14.1 "@types/cross-spawn": 6.0.2 cross-spawn: 7.0.3 kleur: 4.1.5 - checksum: dd94327d4c6a1aa51d9aaf931e09d36ec16fb0a07a481720796d113ffa48eb6ff9cc97a79788869ee0c916002979ff4dcbeba9f19bae07383cab799fd7d78592 + checksum: 576ace1e4ec348855d631b9f41d425f8fe85dc19157c09f335fd329185822b58385c05205d16cf54dc072f10b9bfb86f3a450c7b8649cb96c7e18208aad49a8d languageName: node linkType: hard -"@prisma/get-platform@npm:4.14.0": - version: 4.14.0 - resolution: "@prisma/get-platform@npm:4.14.0" +"@prisma/get-platform@npm:4.14.1": + version: 4.14.1 + resolution: "@prisma/get-platform@npm:4.14.1" dependencies: - "@prisma/debug": 4.14.0 + "@prisma/debug": 4.14.1 escape-string-regexp: 4.0.0 execa: 5.1.1 fs-jetpack: 5.1.0 @@ -6170,21 +6170,21 @@ __metadata: tempy: 1.0.1 terminal-link: 2.1.1 ts-pattern: 4.2.2 - checksum: 0cad531cf01dc5fd3bf9406e0d63e510ab581cd324fc5af4fe48b348e68d2426eb4ce494382f81b733d8485a1977fec56d6cc05019a5251b7855a745439367c5 + checksum: fed734e7550df794cce8d5567e905b55b69bab50b76aba8b0345361ac87e4f374d95ef9cc152165bb96f9db7ec3857767bd0fb28e9679e31f2197b4d80fea9c4 languageName: node linkType: hard -"@prisma/internals@npm:4.14.0": - version: 4.14.0 - resolution: "@prisma/internals@npm:4.14.0" +"@prisma/internals@npm:4.14.1": + version: 4.14.1 + resolution: "@prisma/internals@npm:4.14.1" dependencies: "@opentelemetry/api": 1.4.1 - "@prisma/debug": 4.14.0 - "@prisma/engines": 4.14.0 - "@prisma/fetch-engine": 4.14.0 - "@prisma/generator-helper": 4.14.0 - "@prisma/get-platform": 4.14.0 - "@prisma/ni": 4.14.0 + "@prisma/debug": 4.14.1 + "@prisma/engines": 4.14.1 + "@prisma/fetch-engine": 4.14.1 + "@prisma/generator-helper": 4.14.1 + "@prisma/get-platform": 4.14.1 + "@prisma/ni": 4.14.1 "@prisma/prisma-fmt-wasm": 4.14.0-67.d9a4c5988f480fa576d43970d5a23641aa77bc9c archiver: 5.3.1 arg: 5.0.2 @@ -6221,14 +6221,14 @@ __metadata: terminal-link: 2.1.1 tmp: 0.2.1 ts-pattern: 4.2.2 - checksum: 66dc72454c5d98552f8953bdbe5b3e05f6a8b03dc55e7e0d1c4f494c11cdeab01429786538f5992b520281b402ff33eeb5d0aa962fcf66d17f57349e62558178 + checksum: fe883fbf93cea007b4d3a3a9af6fb10531b4168c2d47f3ac0b5015f7c49da00ecf442b63d521f8b771c496124b9c3635ad5a107dc04c726ab7465d5aae7886bf languageName: node linkType: hard -"@prisma/ni@npm:4.14.0": - version: 4.14.0 - resolution: "@prisma/ni@npm:4.14.0" - checksum: 125adb521b6ee7c2516776ab79e787da6fe90196ec4163f8001a90137bf7e38f587f338595899dc60c4d0b6b6420d850da65dd5aaa4266cfb128c710fef7d8b9 +"@prisma/ni@npm:4.14.1": + version: 4.14.1 + resolution: "@prisma/ni@npm:4.14.1" + checksum: 2110299b7b7284074b22db3b52c162c8cf5bfea9bab44a87715b92eee2d51deb527915020f5c89820729cace027e2f6e299153569b8f36f0044b1e1a0febc2b5 languageName: node linkType: hard @@ -6436,7 +6436,7 @@ __metadata: "@babel/cli": 7.21.5 "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 - "@prisma/client": 4.14.0 + "@prisma/client": 4.14.1 "@types/aws-lambda": 8.10.115 "@types/jsonwebtoken": 9.0.2 "@types/memjs": 1 @@ -6957,7 +6957,7 @@ __metadata: "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 "@iarna/toml": 2.2.5 - "@prisma/internals": 4.14.0 + "@prisma/internals": 4.14.1 "@redwoodjs/api-server": 5.0.0 "@redwoodjs/cli-helpers": 5.0.0 "@redwoodjs/fastify": 5.0.0 @@ -6994,7 +6994,7 @@ __metadata: pluralize: 8.0.0 portfinder: 1.0.32 prettier: 2.8.8 - prisma: 4.14.0 + prisma: 4.14.1 prompts: 2.4.2 rimraf: 5.0.0 secure-random-password: 0.2.3 @@ -7352,8 +7352,8 @@ __metadata: "@babel/cli": 7.21.5 "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 - "@prisma/client": 4.14.0 - "@prisma/internals": 4.14.0 + "@prisma/client": 4.14.1 + "@prisma/internals": 4.14.1 "@redwoodjs/project-config": 5.0.0 core-js: 3.30.2 esbuild: 0.17.19 @@ -7391,7 +7391,7 @@ __metadata: "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 "@iarna/toml": 2.2.5 - "@prisma/internals": 4.14.0 + "@prisma/internals": 4.14.1 "@redwoodjs/project-config": 5.0.0 "@types/fs-extra": 11.0.1 "@types/line-column": 1.0.0 @@ -26728,15 +26728,15 @@ __metadata: languageName: node linkType: hard -"prisma@npm:4.14.0": - version: 4.14.0 - resolution: "prisma@npm:4.14.0" +"prisma@npm:4.14.1": + version: 4.14.1 + resolution: "prisma@npm:4.14.1" dependencies: - "@prisma/engines": 4.14.0 + "@prisma/engines": 4.14.1 bin: prisma: build/index.js prisma2: build/index.js - checksum: 17646e91f62d10fd27aea8bd846986c4704966546f89d36fc5150a15f8c1061eb200a2300b0b58e781c31fcfa0f7393b7bea0a0e2f6d3abc794ba041417b11f1 + checksum: 94b0429f1247d60fda49de20029dce8587ba5b82e2a2afc8fa73c42e625ab495dc13978a219c0e005285462947ae29c62d4d70fbb6adfd796abcd79452add3a2 languageName: node linkType: hard From 80461b1a5afe213d143a761f136c22761b18b383 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 14:29:01 -0700 Subject: [PATCH 13/32] fix(deps): update dependency react-router-dom to v6.11.2 (#8345) --- packages/studio/frontend/yarn.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/studio/frontend/yarn.lock b/packages/studio/frontend/yarn.lock index 4543a9bd46c7..18f512686092 100644 --- a/packages/studio/frontend/yarn.lock +++ b/packages/studio/frontend/yarn.lock @@ -1180,10 +1180,10 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.6.1": - version: 1.6.1 - resolution: "@remix-run/router@npm:1.6.1" - checksum: 6d6dad1b6a06171d5d8549eca7cd7ef332a40987b732829e48993d55b3c7a7ca661c7d891be938055a42a4b18f07b5f2b66295c89cb221464eda2678ac41621e +"@remix-run/router@npm:1.6.2": + version: 1.6.2 + resolution: "@remix-run/router@npm:1.6.2" + checksum: 73da6884e53873e4290abb3978373cafc3f351994273b0663eda5e12c81cb427fc6fe4df1924569d9a214f701d0106cf37122455951e0239d7e6fa35071df558 languageName: node linkType: hard @@ -3633,26 +3633,26 @@ __metadata: linkType: hard "react-router-dom@npm:^6.8.1": - version: 6.11.1 - resolution: "react-router-dom@npm:6.11.1" + version: 6.11.2 + resolution: "react-router-dom@npm:6.11.2" dependencies: - "@remix-run/router": 1.6.1 - react-router: 6.11.1 + "@remix-run/router": 1.6.2 + react-router: 6.11.2 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 17f1f9c3d71604fb9e270b672a97accbee0bedf5b8cb03518fd20068aa4d653fcbb46c2dfd5cd04a41864bed21cc23c275d7af39e4be2224435529779bf7e7e4 + checksum: be7433bc290e56c0dd3e1008d53a76cc9866bf460980658501880876420086f11810ec3355a3abcd79ac537d6a1351eda009fade841c266456d0e8df60967b76 languageName: node linkType: hard -"react-router@npm:6.11.1": - version: 6.11.1 - resolution: "react-router@npm:6.11.1" +"react-router@npm:6.11.2": + version: 6.11.2 + resolution: "react-router@npm:6.11.2" dependencies: - "@remix-run/router": 1.6.1 + "@remix-run/router": 1.6.2 peerDependencies: react: ">=16.8" - checksum: 3b49692947ef2ddae134a15462e4fa47022d82c358cc90085b471989e4bc3c4e1637aa3a81389166b69db557ac420c289f64d64309f4d0bd87a6099e49aee6e1 + checksum: a437606078d6096a6dfa322adf80d00ce153f20cd470ad888088c8da99f44477b963425c53f5461a540b909fc274154292ed80d636482dcdc58a423915ca1433 languageName: node linkType: hard From a6b70be8073d52f8ff54ab9a590eded83a57da5c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 14:29:29 -0700 Subject: [PATCH 14/32] fix(deps): update dependency listr2 to v6.6.0 (#8347) --- package.json | 2 +- packages/cli-helpers/package.json | 2 +- packages/cli/package.json | 2 +- yarn.lock | 14 +++++++------- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index cced9f10dcdb..3591f672ad4d 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "jest-runner-tsd": "5.0.0", "jscodeshift": "0.15.0", "lerna": "6.6.2", - "listr2": "6.5.0", + "listr2": "6.6.0", "lodash.template": "4.5.0", "make-dir-cli": "3.0.0", "msw": "1.2.1", diff --git a/packages/cli-helpers/package.json b/packages/cli-helpers/package.json index a83899a163b1..c81a069e063c 100644 --- a/packages/cli-helpers/package.json +++ b/packages/cli-helpers/package.json @@ -29,7 +29,7 @@ "chalk": "4.1.2", "core-js": "3.30.2", "execa": "5.1.1", - "listr2": "6.5.0", + "listr2": "6.6.0", "lodash.memoize": "4.1.2", "pascalcase": "1.0.0", "prettier": "2.8.8", diff --git a/packages/cli/package.json b/packages/cli/package.json index 3414653e236f..f13613220900 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -58,7 +58,7 @@ "fs-extra": "11.1.1", "humanize-string": "2.1.0", "latest-version": "5.1.0", - "listr2": "6.5.0", + "listr2": "6.6.0", "lodash": "4.17.21", "param-case": "3.0.4", "pascalcase": "1.0.0", diff --git a/yarn.lock b/yarn.lock index d39001e7bc07..b040c7bd81ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6939,7 +6939,7 @@ __metadata: core-js: 3.30.2 execa: 5.1.1 jest: 29.5.0 - listr2: 6.5.0 + listr2: 6.6.0 lodash.memoize: 4.1.2 pascalcase: 1.0.0 prettier: 2.8.8 @@ -6987,7 +6987,7 @@ __metadata: humanize-string: 2.1.0 jest: 29.5.0 latest-version: 5.1.0 - listr2: 6.5.0 + listr2: 6.6.0 lodash: 4.17.21 param-case: 3.0.4 pascalcase: 1.0.0 @@ -22456,9 +22456,9 @@ __metadata: languageName: node linkType: hard -"listr2@npm:6.5.0": - version: 6.5.0 - resolution: "listr2@npm:6.5.0" +"listr2@npm:6.6.0": + version: 6.6.0 + resolution: "listr2@npm:6.6.0" dependencies: cli-truncate: ^3.1.0 colorette: ^2.0.20 @@ -22471,7 +22471,7 @@ __metadata: peerDependenciesMeta: enquirer: optional: true - checksum: 29f5cd57d506b1396db89d23771609ff1825353ab49c48fe7de377d63c3dbe7347b9c4fac82dee690047cd6fbfce1b6fef18c5bcf23850bdbf1458c3a8aaada4 + checksum: 78da38e08c9311a022cbe0b24e1e7a81f7e55f69a2786f9549d590331b807137dfddaafc346d8d66332f77fdfa486c60e4370493537c431b4fb594c18c4705bc languageName: node linkType: hard @@ -28428,7 +28428,7 @@ __metadata: jest-runner-tsd: 5.0.0 jscodeshift: 0.15.0 lerna: 6.6.2 - listr2: 6.5.0 + listr2: 6.6.0 lodash.template: 4.5.0 make-dir-cli: 3.0.0 msw: 1.2.1 From de8b0fa1aafce29857324c9356604b5dba731b12 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Wed, 17 May 2023 14:51:09 -0700 Subject: [PATCH 15/32] feat(coherence deploy): add setup deploy coherence (#8234) * feat: add setup deploy coherence * add changes to yaml template * Update packages/cli/src/commands/setup/deploy/providers/coherenceHandler.js * warn on prerender, style * add warning to docs * properly escape quotes * configure toml * throw instead of warn * style: move notes inline * properly try-catch * add to intro * add note about data migrations --- docs/docs/deploy/coherence.md | 40 +++ docs/docs/deploy/introduction.md | 1 + docs/sidebars.js | 5 + .../setup/deploy/providers/coherence.js | 16 ++ .../deploy/providers/coherenceHandler.js | 241 ++++++++++++++++++ 5 files changed, 303 insertions(+) create mode 100644 docs/docs/deploy/coherence.md create mode 100644 packages/cli/src/commands/setup/deploy/providers/coherence.js create mode 100644 packages/cli/src/commands/setup/deploy/providers/coherenceHandler.js diff --git a/docs/docs/deploy/coherence.md b/docs/docs/deploy/coherence.md new file mode 100644 index 000000000000..2bc8897d88ce --- /dev/null +++ b/docs/docs/deploy/coherence.md @@ -0,0 +1,40 @@ +--- +description: Serverful deploys on GCP or AWS via Coherence's full-lifecycle environment automation +--- + +# Deploy to Coherence + +[Coherence](https://www.withcoherence.com/) delivers automated environments across the full software development lifecycle, without requiring you to glue together your own mess of open source tools to get a world-class develper experience for your team. Coherence is focused on serving startups, who are doing mission-critical work. With one simple configuration, Coherence offers: + +- Cloud-hosted development environments, based on VSCode. Similar to Gitpod or GitHub CodeSpaces +- Production-ready CI/CD running in your own GCP/AWS account, including: database migration/seeding/snapshot loading, parallelized tests, container building and docker registry management +- Full-stack branch previews. Vercel/Netlify-like developer experience for arbitrary container apps, including dependencies such as CDN, redis, and database resources +- Staging and production environment management in your AWS/GCP accounts. Production runs in its own cloud account (AWS) or project (GCP). Integrated secrets management across all environment types with a developer-friendly UI + +## Coherence Prerequisites + +To deploy to Coherence, your Redwood project needs to be hosted on GitHub and you must have an [AWS](https://docs.withcoherence.com/docs/tutorials/creating-an-app-on-aws) or [GCP](https://docs.withcoherence.com/docs/tutorials/creating-an-app-on-gcp) account. + +## Coherence Deploy + +:::caution Prerender doesn't work with Coherence yet + +You can see its current status and follow updates here on GitHub: https://github.com/redwoodjs/redwood/issues/8333. + +But if you don't use prerender, carry on! + +::: + +If you want to deploy your Redwood project on Coherence, run the setup command: + +``` +yarn rw setup deploy coherence +``` + +The command will inspect your Prisma config to determine if you're using a supported database (at the moment, only `postgres` or `mysql` are supported on Coherence). + +Then follow the [Coherence Redwood deploy docs](https://docs.withcoherence.com/docs/configuration/frameworks#redwood-js) for more information, including if you want to set up: +- a redis server +- database migration/seeding/snapshot loading +- cron jobs or async workers +- object storage using Google Cloud Storage or AWS's S3 diff --git a/docs/docs/deploy/introduction.md b/docs/docs/deploy/introduction.md index ddddcdf10910..1cbb38e0fcd7 100644 --- a/docs/docs/deploy/introduction.md +++ b/docs/docs/deploy/introduction.md @@ -13,6 +13,7 @@ Redwood is designed for both serverless and traditional infrastructure deploymen Currently, these are the officially supported deploy targets: - Baremetal (physical server that you have SSH access to) +- [Coherence](https://www.withcoherence.com/) - [Flightcontrol.dev](https://www.flightcontrol.dev?ref=redwood) - [Edg.io](https://edg.io) - [Netlify.com](https://www.netlify.com/) diff --git a/docs/sidebars.js b/docs/sidebars.js index 00a75f37f515..6f0b29a2a59a 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -114,6 +114,11 @@ module.exports = { items: [ { type: 'doc', label: 'Introduction', id: 'deploy/introduction' }, { type: 'doc', label: 'Baremetal', id: 'deploy/baremetal' }, + { + type: 'doc', + label: 'GCP or AWS via Coherence', + id: 'deploy/coherence', + }, { type: 'doc', label: 'AWS via Flightcontrol', diff --git a/packages/cli/src/commands/setup/deploy/providers/coherence.js b/packages/cli/src/commands/setup/deploy/providers/coherence.js new file mode 100644 index 000000000000..21d0a59d2a59 --- /dev/null +++ b/packages/cli/src/commands/setup/deploy/providers/coherence.js @@ -0,0 +1,16 @@ +export const command = 'coherence' + +export const description = 'Setup Coherence deploy' + +export function builder(yargs) { + yargs.option('force', { + description: 'Overwrite existing configuration', + type: 'boolean', + default: false, + }) +} + +export async function handler(options) { + const { handler } = await import('./coherenceHandler') + return handler(options) +} diff --git a/packages/cli/src/commands/setup/deploy/providers/coherenceHandler.js b/packages/cli/src/commands/setup/deploy/providers/coherenceHandler.js new file mode 100644 index 000000000000..12bbc23ce183 --- /dev/null +++ b/packages/cli/src/commands/setup/deploy/providers/coherenceHandler.js @@ -0,0 +1,241 @@ +import fs from 'fs' +import path from 'path' + +import toml from '@iarna/toml' +import { getSchema, getConfig } from '@prisma/internals' +import { Listr } from 'listr2' + +import { + colors as c, + getPaths, + isTypeScriptProject, +} from '@redwoodjs/cli-helpers' +import { errorTelemetry } from '@redwoodjs/telemetry' + +import { printSetupNotes, addFilesTask } from '../helpers' + +const redwoodProjectPaths = getPaths() + +const EXTENSION = isTypeScriptProject ? 'ts' : 'js' + +export async function handler({ force }) { + try { + const addCoherenceFilesTask = await getAddCoherenceFilesTask(force) + + const tasks = new Listr( + [ + addCoherenceFilesTask, + updateRedwoodTOMLTask(), + printSetupNotes([ + "You're ready to deploy to Coherence! ✨\n", + 'Go to https://app.withcoherence.com to create your account and setup your cloud or GitHub connections.', + 'Check out the deployment docs at https://docs.withcoherence.com for detailed instructions and more information.\n', + "Reach out to redwood@withcoherence.com with any questions! We're here to support you.", + ]), + ], + { rendererOptions: { collapse: false } } + ) + + await tasks.run() + } catch (e) { + errorTelemetry(process.argv, e.message) + console.error(c.error(e.message)) + process.exit(e?.exitCode || 1) + } +} + +// ------------------------ +// Tasks and helpers +// ------------------------ + +/** + * Adds a health check file and a coherence.yml file by introspecting the prisma schema. + */ +async function getAddCoherenceFilesTask(force) { + const files = [ + { + path: path.join(redwoodProjectPaths.api.functions, `health.${EXTENSION}`), + content: coherenceFiles.healthCheck, + }, + ] + + const coherenceConfigFile = { + path: path.join(redwoodProjectPaths.base, 'coherence.yml'), + } + + coherenceConfigFile.content = await getCoherenceConfigFileContent() + + files.push(coherenceConfigFile) + + return addFilesTask({ + title: `Adding coherence.yml and health.${EXTENSION}`, + files, + force, + }) +} + +/** + * Check the value of `provider` in the datasource block in `schema.prisma`: + * + * ```prisma title="schema.prisma" + * datasource db { + * provider = "sqlite" + * url = env("DATABASE_URL") + * } + * ``` + */ +async function getCoherenceConfigFileContent() { + const prismaSchema = await getSchema(redwoodProjectPaths.api.dbSchema) + const prismaConfig = await getConfig({ datamodel: prismaSchema }) + + let db = prismaConfig.datasources[0].activeProvider + + if (!SUPPORTED_DATABASES.includes(db)) { + throw new Error( + `Coherence doesn't support the "${db}" provider. To proceed, switch to one of the following: ` + + SUPPORTED_DATABASES.join(', ') + ) + } + + if (db === 'postgresql') { + db = 'postgres' + } + + return coherenceFiles.yamlTemplate(db) +} + +const SUPPORTED_DATABASES = ['mysql', 'postgresql'] + +/** + * should probably parse toml at this point... + * if host, set host + * Updates the ports in redwood.toml to use an environment variable. + */ +function updateRedwoodTOMLTask() { + return { + title: 'Updating redwood.toml...', + task: () => { + const redwoodTOMLPath = path.join( + redwoodProjectPaths.base, + 'redwood.toml' + ) + let redwoodTOMLContent = fs.readFileSync(redwoodTOMLPath, 'utf-8') + const redwoodTOMLObject = toml.parse(redwoodTOMLContent) + + // Replace or add the host + // How to handle matching one vs the other... + if (!redwoodTOMLObject.web.host) { + const [beforeWeb, afterWeb] = redwoodTOMLContent.split(/\[web\]\s/) + redwoodTOMLContent = [ + beforeWeb, + '[web]\n host = "0.0.0.0"\n', + afterWeb, + ].join('') + } + + if (!redwoodTOMLObject.api.host) { + const [beforeApi, afterApi] = redwoodTOMLContent.split(/\[api\]\s/) + redwoodTOMLContent = [ + beforeApi, + '[api]\n host = "0.0.0.0"\n', + afterApi, + ].join('') + } + + redwoodTOMLContent = redwoodTOMLContent.replaceAll( + HOST_REGEXP, + (match, spaceBeforeAssign, spaceAfterAssign) => + ['host', spaceBeforeAssign, '=', spaceAfterAssign, '"0.0.0.0"'].join( + '' + ) + ) + + // Replace the apiUrl + redwoodTOMLContent = redwoodTOMLContent.replace( + API_URL_REGEXP, + (match, spaceBeforeAssign, spaceAfterAssign) => + ['apiUrl', spaceBeforeAssign, '=', spaceAfterAssign, '"/api"'].join( + '' + ) + ) + + // Replace the web and api ports. + redwoodTOMLContent = redwoodTOMLContent.replaceAll( + PORT_REGEXP, + (_match, spaceBeforeAssign, spaceAfterAssign, port) => + [ + 'port', + spaceBeforeAssign, + '=', + spaceAfterAssign, + `"\${PORT:${port}}"`, + ].join('') + ) + + fs.writeFileSync(redwoodTOMLPath, redwoodTOMLContent) + }, + } +} + +const HOST_REGEXP = /host(\s*)=(\s*)\".+\"/g +const API_URL_REGEXP = /apiUrl(\s*)=(\s*)\".+\"/ +const PORT_REGEXP = /port(\s*)=(\s*)(?\d{4})/g + +// ------------------------ +// Files +// ------------------------ + +const coherenceFiles = { + yamlTemplate(db) { + return `\ +api: + type: backend + url_path: "/api" + prod: + command: ["yarn", "rw", "build", "api", "&&", "yarn", "rw", "serve", "api", "--apiRootPath=/api"] + dev: + command: ["yarn", "rw", "build", "api", "&&", "yarn", "rw", "dev", "api", "--apiRootPath=/api"] + local_packages: ["node_modules"] + + system: + cpu: 2 + memory: 2G + health_check: "/health" + + resources: + - name: ${path.basename(redwoodProjectPaths.base)}-db + engine: ${db} + version: 13 + type: database + ${db === 'postgres' ? 'adapter: postgresql' : ''} + + # If you use data migrations, add "&&", "yarn", "rw" "data-migrate" "up". + migration: ["yarn", "rw", "prisma", "migrate", "deploy"] + +web: + type: frontend + assets_path: "web/dist" + prod: + command: ["yarn", "rw", "serve", "web"] + dev: + command: ["yarn", "rw", "dev", "web", "--fwd=\\"--allowed-hosts all\\""] + + # Heads up: Redwood's prerender doesn't work with Coherence yet. + # For current status and updates, see https://github.com/redwoodjs/redwood/issues/8333. + build: ["yarn", "rw", "build", "web", "--no-prerender"] + local_packages: ["node_modules"] + + system: + cpu: 2 + memory: 2G +` + }, + healthCheck: `\ +// Coherence health check +export const handler = async () => { + return { + statusCode: 200, + } +} +`, +} From 1d5cb0cf0f7466bf68cb571160d19e2cbb243b6f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 18:09:01 -0700 Subject: [PATCH 16/32] chore(deps): update dependency glob to v10.2.5 (#8349) --- packages/vite/package.json | 2 +- yarn.lock | 27 +++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/packages/vite/package.json b/packages/vite/package.json index 34763d1c3a42..02dbf93a1770 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -38,7 +38,7 @@ }, "devDependencies": { "@babel/cli": "7.21.5", - "glob": "10.2.4", + "glob": "10.2.5", "jest": "29.5.0", "typescript": "5.0.4" }, diff --git a/yarn.lock b/yarn.lock index b040c7bd81ac..4060dd5138c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7561,7 +7561,7 @@ __metadata: "@vitejs/plugin-react": 4.0.0 buffer: 6.0.3 core-js: 3.30.2 - glob: 10.2.4 + glob: 10.2.5 jest: 29.5.0 typescript: 5.0.4 vite: 4.3.7 @@ -18653,7 +18653,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:10.2.4, glob@npm:^10.0.0": +"glob@npm:10.2.4": version: 10.2.4 resolution: "glob@npm:10.2.4" dependencies: @@ -18668,6 +18668,21 @@ __metadata: languageName: node linkType: hard +"glob@npm:10.2.5, glob@npm:^10.0.0": + version: 10.2.5 + resolution: "glob@npm:10.2.5" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.0.3 + minimatch: ^9.0.0 + minipass: ^5.0.0 || ^6.0.2 + path-scurry: ^1.7.0 + bin: + glob: dist/cjs/src/bin.js + checksum: 7c3cdf44fd4a1f85c91ce948a0a94b0bac248bc3ee0bcce7ea95646e8f290acf5da7305a37cbfefb5286cd3365eaa3c94f2c5f43c2d2cdb5c818cdd978514c1b + languageName: node + linkType: hard + "glob@npm:7.1.4": version: 7.1.4 resolution: "glob@npm:7.1.4" @@ -23811,10 +23826,10 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.0": - version: 6.0.1 - resolution: "minipass@npm:6.0.1" - checksum: 4a82bdcef5bdf4b798cf62adb755dd668612f48c60aeef8fab0eab3fccf885b52e37a9f7793e3abfe4a6b461f06a551a06690add368b2fa29648768611e60fff +"minipass@npm:^5.0.0 || ^6.0.0, minipass@npm:^5.0.0 || ^6.0.2": + version: 6.0.2 + resolution: "minipass@npm:6.0.2" + checksum: 3878076578f44ef4078ceed10af2cfebbec1b6217bf9f7a3d8b940da8153769db29bf88498b2de0d1e0c12dfb7b634c5729b7ca03457f46435e801578add210a languageName: node linkType: hard From f65063205f3712be9e75f4363fbcf44cb5d2dfd5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 18:09:15 -0700 Subject: [PATCH 17/32] chore(deps): update dependency rimraf to v5.0.1 (#8350) --- package.json | 2 +- packages/cli/package.json | 2 +- packages/core/package.json | 2 +- packages/internal/package.json | 2 +- packages/project-config/package.json | 2 +- yarn.lock | 35 ++++++++++++++++++++-------- 6 files changed, 30 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 3591f672ad4d..b5a4c9b2318f 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "octokit": "2.0.14", "ora": "5.4.1", "prompts": "2.4.2", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "typescript": "5.0.4", "yargs": "17.7.2", "zx": "7.2.2" diff --git a/packages/cli/package.json b/packages/cli/package.json index f13613220900..e549f9626774 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -67,7 +67,7 @@ "prettier": "2.8.8", "prisma": "4.14.1", "prompts": "2.4.2", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "secure-random-password": "0.2.3", "semver": "7.5.1", "string-env-interpolation": "1.0.1", diff --git a/packages/core/package.json b/packages/core/package.json index 0045c956f527..f57b42dbdcf9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -75,7 +75,7 @@ "nodemon": "2.0.22", "null-loader": "4.0.1", "react-refresh": "0.14.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "style-loader": "3.3.2", "typescript": "5.0.4", "url-loader": "4.1.1", diff --git a/packages/internal/package.json b/packages/internal/package.json index 2f76bb8e8fd4..235eb33b84ee 100644 --- a/packages/internal/package.json +++ b/packages/internal/package.json @@ -55,7 +55,7 @@ "graphql": "16.6.0", "kill-port": "1.6.1", "prettier": "2.8.8", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "string-env-interpolation": "1.0.1", "systeminformation": "5.17.12", "terminal-link": "2.1.1", diff --git a/packages/project-config/package.json b/packages/project-config/package.json index 556d834daf39..44abb60833cc 100644 --- a/packages/project-config/package.json +++ b/packages/project-config/package.json @@ -36,7 +36,7 @@ "@types/findup-sync": "4.0.2", "dependency-cruiser": "13.0.1", "jest": "29.5.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "typescript": "5.0.4" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/yarn.lock b/yarn.lock index 4060dd5138c3..d34b2acd7e6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6996,7 +6996,7 @@ __metadata: prettier: 2.8.8 prisma: 4.14.1 prompts: 2.4.2 - rimraf: 5.0.0 + rimraf: 5.0.1 secure-random-password: 0.2.3 semver: 7.5.1 string-env-interpolation: 1.0.1 @@ -7098,7 +7098,7 @@ __metadata: nodemon: 2.0.22 null-loader: 4.0.1 react-refresh: 0.14.0 - rimraf: 5.0.0 + rimraf: 5.0.1 style-loader: 3.3.2 typescript: 5.0.4 url-loader: 4.1.1 @@ -7286,7 +7286,7 @@ __metadata: jest: 29.5.0 kill-port: 1.6.1 prettier: 2.8.8 - rimraf: 5.0.0 + rimraf: 5.0.1 string-env-interpolation: 1.0.1 systeminformation: 5.17.12 terminal-link: 2.1.1 @@ -7339,7 +7339,7 @@ __metadata: fast-glob: 3.2.12 findup-sync: 5.0.0 jest: 29.5.0 - rimraf: 5.0.0 + rimraf: 5.0.1 string-env-interpolation: 1.0.1 typescript: 5.0.4 languageName: unknown @@ -18697,6 +18697,21 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.2.5": + version: 10.2.5 + resolution: "glob@npm:10.2.5" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.0.3 + minimatch: ^9.0.0 + minipass: ^5.0.0 || ^6.0.2 + path-scurry: ^1.7.0 + bin: + glob: dist/cjs/src/bin.js + checksum: 7c3cdf44fd4a1f85c91ce948a0a94b0bac248bc3ee0bcce7ea95646e8f290acf5da7305a37cbfefb5286cd3365eaa3c94f2c5f43c2d2cdb5c818cdd978514c1b + languageName: node + linkType: hard + "glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -28324,14 +28339,14 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:5.0.0": - version: 5.0.0 - resolution: "rimraf@npm:5.0.0" +"rimraf@npm:5.0.1": + version: 5.0.1 + resolution: "rimraf@npm:5.0.1" dependencies: - glob: ^10.0.0 + glob: ^10.2.5 bin: rimraf: dist/cjs/src/bin.js - checksum: 965dcd7928334a86eeb02dc59874c6d1bf1a1361da4f55561083e5d216bfc52b933c14dae69450bea6943e52d0f704445e8f80c428c3390bd905f15daefdb0f7 + checksum: 9e6062c0aea96f384dd937e6bb06b624c881de2eee79a83d3068193183d44eb9b1f3f68a27a54b9ca8cce56bf34c2951ff4239b093b970e0501a091907031f52 languageName: node linkType: hard @@ -28455,7 +28470,7 @@ __metadata: octokit: 2.0.14 ora: 5.4.1 prompts: 2.4.2 - rimraf: 5.0.0 + rimraf: 5.0.1 typescript: 5.0.4 yargs: 17.7.2 zx: 7.2.2 From 82be88d3084f25e6582bbaf196719a0436a5938a Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Wed, 17 May 2023 17:39:28 -0700 Subject: [PATCH 18/32] chore(release): update release command for minors --- tasks/release/releaseCommand.mjs | 67 ++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 7 deletions(-) diff --git a/tasks/release/releaseCommand.mjs b/tasks/release/releaseCommand.mjs index 5b679fe221ba..108a3bfc504f 100644 --- a/tasks/release/releaseCommand.mjs +++ b/tasks/release/releaseCommand.mjs @@ -363,9 +363,6 @@ async function releaseMajorOrMinor() { console.log() } - await updateCreateRedwoodAppTemplates() - await versionDocs() - exitIfNo( await question( `Ok to continue to publish? (Say no here if you want to push this branch to GitHub to create an RC) [Y/n] > ` @@ -374,8 +371,12 @@ async function releaseMajorOrMinor() { ) console.log() + await versionDocs() + console.log() await cleanInstallUpdate() + console.log() await runQA(nextVersion) + console.log() exitIfNo( await question( @@ -384,9 +385,59 @@ async function releaseMajorOrMinor() { ) console.log() - await $`git push -u origin ${releaseBranch}` - await $`git push --tags` + // Temporarily remove `"packages/create-redwood-app"` from the workspaces field + // so that we can publish it separately later. + // ------------------------ + const frameworkPackageConfigPath = fileURLToPath( + new URL('../../package.json', import.meta.url) + ) + + const frameworkPackageConfig = fs.readJSONSync(frameworkPackageConfigPath) + + const packagePaths = (await $`yarn workspaces list --json`).stdout + .trim() + .split('\n') + .map(JSON.parse) + .filter(({ name }) => name) + .map(({ location }) => location) + + frameworkPackageConfig.workspaces = packagePaths.filter( + (packagePath) => packagePath !== 'packages/create-redwood-app' + ) + + fs.writeJSONSync(frameworkPackageConfigPath, frameworkPackageConfig, { + spaces: 2, + }) + + await $`git commit -am "chore: temporary update to workspaces"` + console.log() + + // ------------------------ + try { + await $`yarn lerna publish from-package` + } catch (_error) { + exitIfNo( + await question( + 'Publishing failed. You can usually recover from this by running `yarn lerna publish from-package` again. Continue? [Y/n] > ' + ) + ) + } + console.log() + + await $`git reset --hard HEAD~1` + console.log() + + // ------------------------ + await updateCreateRedwoodAppTemplates() + console.log() + await $`yarn lerna publish from-package` + console.log() + + await $`git reset --soft HEAD~2` + await $`git commit -m "${nextVersion}"` + await $`git tag -am ${nextVersion} "${nextVersion}"` + await $`git push --tags` console.log(rocketBoxen(`Released ${chalk.green(nextVersion)}`)) @@ -680,7 +731,8 @@ async function updateCreateRedwoodAppTemplates() { cd('../..') await $`yarn ts-to-js` - await $`git commit -am "chore: update create-redwood-app templates"` + await $`git add .` + await $`git commit -m "chore: update create-redwood-app templates"` cd('../..') } @@ -731,6 +783,7 @@ async function versionDocs() { await $`yarn` await $`yarn clear` await $`yarn docusaurus docs:version ${nextDocsVersion}` - await $`git commit -am "Version docs to ${nextDocsVersion}"` + await $`git add .` + await $`git commit -m "Version docs to ${nextDocsVersion}"` await cd('../') } From d66984a4c4e034cb83f325659da71e54f3423dfd Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Wed, 17 May 2023 18:13:24 -0700 Subject: [PATCH 19/32] chore: update yarn.lock --- yarn.lock | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/yarn.lock b/yarn.lock index d34b2acd7e6d..906f84035a3e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18668,7 +18668,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:10.2.5, glob@npm:^10.0.0": +"glob@npm:10.2.5, glob@npm:^10.2.5": version: 10.2.5 resolution: "glob@npm:10.2.5" dependencies: @@ -18697,21 +18697,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.5": - version: 10.2.5 - resolution: "glob@npm:10.2.5" - dependencies: - foreground-child: ^3.1.0 - jackspeak: ^2.0.3 - minimatch: ^9.0.0 - minipass: ^5.0.0 || ^6.0.2 - path-scurry: ^1.7.0 - bin: - glob: dist/cjs/src/bin.js - checksum: 7c3cdf44fd4a1f85c91ce948a0a94b0bac248bc3ee0bcce7ea95646e8f290acf5da7305a37cbfefb5286cd3365eaa3c94f2c5f43c2d2cdb5c818cdd978514c1b - languageName: node - linkType: hard - "glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" From a44a41bc03bb703d1471201c4e88abcb520fdc53 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Wed, 17 May 2023 21:49:13 -0700 Subject: [PATCH 20/32] Update forms.md (#8352) A small grammar fix. --- docs/docs/forms.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/forms.md b/docs/docs/forms.md index 75dc6d5023a3..db7b39ce2657 100644 --- a/docs/docs/forms.md +++ b/docs/docs/forms.md @@ -165,7 +165,7 @@ All of Redwood's form helpers need the `register` function to do what they do. B ### Using `formMethods` -There's some functions that `useForm` returns that it'd be nice to have access to. +There are some functions that `useForm` returns that it'd be nice to have access to. For example, `useForm` returns a function `reset`, which resets the form's fields. To access it, you have to call `useForm` yourself. But you still need to pass `useForm`'s return to the `` so that Redwood's helpers can register themselves: From cce553fec162441ab117763c8a85bab669082fdd Mon Sep 17 00:00:00 2001 From: Josh GM Walker <56300765+Josh-Walker-GM@users.noreply.github.com> Date: Thu, 18 May 2023 18:48:08 +0100 Subject: [PATCH 21/32] Parse as int, fix jsdoc (#8357) --- packages/cli/src/commands/devHandler.js | 3 +-- packages/cli/src/lib/ports.js | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/commands/devHandler.js b/packages/cli/src/commands/devHandler.js index 918f3a2afa95..31ff262545a9 100644 --- a/packages/cli/src/commands/devHandler.js +++ b/packages/cli/src/commands/devHandler.js @@ -50,9 +50,8 @@ export const handler = async ({ ...forward.matchAll(/\-\-port(\=|\s)(?[^\s]*)/g), ] if (forwardedPortMatches.length) { - webPreferredPort = forwardedPortMatches.pop().groups.port + webPreferredPort = parseInt(forwardedPortMatches.pop().groups.port) } - webAvailablePort = await getFreePort(webPreferredPort, [ apiPreferredPort, apiAvailablePort, diff --git a/packages/cli/src/lib/ports.js b/packages/cli/src/lib/ports.js index d0bb391e633f..d0dcbfaeb4b1 100644 --- a/packages/cli/src/lib/ports.js +++ b/packages/cli/src/lib/ports.js @@ -2,9 +2,9 @@ import portfinder from 'portfinder' /** * Finds a free port - * @param {[number]} requestedPort Port to start searching from - * @param {[number[]]} excludePorts Array of port numbers to exclude - * @return {[number]} A free port equal or higher than requestedPort but not within excludePorts. If no port can be found then returns -1 + * @param {number} requestedPort Port to start searching from + * @param {number[]} excludePorts Array of port numbers to exclude + * @return {Promise} A free port equal or higher than requestedPort but not within excludePorts. If no port can be found then returns -1 */ export async function getFreePort(requestedPort, excludePorts = []) { try { From 3490b88803829231a70c64a7daa41758010a8ff7 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Thu, 18 May 2023 11:26:49 -0700 Subject: [PATCH 22/32] fix(coherence): correct doc links, add commas to template (#8351) * fix(coherence): correct doc links, add commas to template * replace placeholders with correct links * swap order of comments * better error message --- docs/docs/deploy/coherence.md | 2 +- .../setup/deploy/providers/coherenceHandler.js | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/docs/deploy/coherence.md b/docs/docs/deploy/coherence.md index 2bc8897d88ce..970eaa98fa31 100644 --- a/docs/docs/deploy/coherence.md +++ b/docs/docs/deploy/coherence.md @@ -13,7 +13,7 @@ description: Serverful deploys on GCP or AWS via Coherence's full-lifecycle envi ## Coherence Prerequisites -To deploy to Coherence, your Redwood project needs to be hosted on GitHub and you must have an [AWS](https://docs.withcoherence.com/docs/tutorials/creating-an-app-on-aws) or [GCP](https://docs.withcoherence.com/docs/tutorials/creating-an-app-on-gcp) account. +To deploy to Coherence, your Redwood project needs to be hosted on GitHub and you must have an [AWS](https://docs.withcoherence.com/docs/overview/aws-deep-dive) or [GCP](https://docs.withcoherence.com/docs/overview/gcp-deep-dive) account. ## Coherence Deploy diff --git a/packages/cli/src/commands/setup/deploy/providers/coherenceHandler.js b/packages/cli/src/commands/setup/deploy/providers/coherenceHandler.js index 12bbc23ce183..25cde15afffe 100644 --- a/packages/cli/src/commands/setup/deploy/providers/coherenceHandler.js +++ b/packages/cli/src/commands/setup/deploy/providers/coherenceHandler.js @@ -92,8 +92,12 @@ async function getCoherenceConfigFileContent() { if (!SUPPORTED_DATABASES.includes(db)) { throw new Error( - `Coherence doesn't support the "${db}" provider. To proceed, switch to one of the following: ` + - SUPPORTED_DATABASES.join(', ') + [ + `Coherence doesn't support the "${db}" provider in your Prisma schema.`, + `To proceed, switch to one of the following: ${SUPPORTED_DATABASES.join( + ', ' + )}.`, + ].join('\n') ) } @@ -209,7 +213,8 @@ api: type: database ${db === 'postgres' ? 'adapter: postgresql' : ''} - # If you use data migrations, add "&&", "yarn", "rw" "data-migrate" "up". + # If you use data migrations, use the following instead: + # migration: ["yarn", "rw", "prisma", "migrate", "deploy", "&&", "yarn", "rw", "data-migrate", "up"] migration: ["yarn", "rw", "prisma", "migrate", "deploy"] web: From cb73537ebf1e2286f6f91daa378814a69da96167 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 11:48:45 -0700 Subject: [PATCH 23/32] chore(deps): update dependency octokit to v2.0.15 (#8360) --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index b5a4c9b2318f..e7b293834cda 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "npm-packlist": "7.0.4", "nx": "16.2.1", "nx-cloud": "16.0.5", - "octokit": "2.0.14", + "octokit": "2.0.15", "ora": "5.4.1", "prompts": "2.4.2", "rimraf": "5.0.1", diff --git a/yarn.lock b/yarn.lock index 906f84035a3e..57568ecc49de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25129,9 +25129,9 @@ __metadata: languageName: node linkType: hard -"octokit@npm:2.0.14": - version: 2.0.14 - resolution: "octokit@npm:2.0.14" +"octokit@npm:2.0.15": + version: 2.0.15 + resolution: "octokit@npm:2.0.15" dependencies: "@octokit/app": ^13.1.1 "@octokit/core": ^4.0.4 @@ -25141,7 +25141,7 @@ __metadata: "@octokit/plugin-retry": ^4.0.3 "@octokit/plugin-throttling": ^5.0.0 "@octokit/types": ^9.0.0 - checksum: 97cafa7c50821b0b52ec64218538678a19254182bd9d64f24e1b0ee8f9d196e748f9aa857fa8eedc74ccf5666793a5df41e9e8a3801993a75aa8dfc96543d88e + checksum: b82a92159d1fef53c25298cd33fa3d56874a32a9eddb1c55348dadce1303137a30c341e4ff6b48273c7d0619714588a935bf03ede25a9d95bc2fd759e40a1377 languageName: node linkType: hard @@ -28452,7 +28452,7 @@ __metadata: npm-packlist: 7.0.4 nx: 16.2.1 nx-cloud: 16.0.5 - octokit: 2.0.14 + octokit: 2.0.15 ora: 5.4.1 prompts: 2.4.2 rimraf: 5.0.1 From b28669ecee7602bc3939d649d5ec33c9e35a1961 Mon Sep 17 00:00:00 2001 From: David Thyresson Date: Thu, 18 May 2023 16:41:17 -0400 Subject: [PATCH 24/32] Refactor GraphQL Server and CreateYoga to Support "api serve" with Fastify Server (#8339) * Move makeMergedSchema * refactor createGraphQLYoga * Make a Fastify plugin for graphql yoga * Set yoga options * Adds graphql fastify plugin to template * Whitespace * Adds allowGraphiQL config setting and docs * fastify gql plugin awaits * Merge in subscriptions into schema from project * Get to green on tests * Fix subscriptions module api import * Tests makeSubscriptions * Fastify graphql plugin needed graphqlserver package * remove unneeded comments * Update docs/docs/graphql.md * Adds HookHandlerDoneFunction * Update packages/cli/src/commands/experimental/templates/server.ts.template Co-authored-by: Dominic Saadi --------- Co-authored-by: Dominic Saadi --- docs/docs/graphql.md | 10 +- .../experimental/templates/server.ts.template | 41 +++- packages/fastify/build.mjs | 1 + packages/fastify/package.json | 1 + packages/fastify/src/graphql.ts | 46 ++++ packages/fastify/src/index.ts | 1 + .../graphql-server/src/__tests__/cors.test.ts | 2 +- .../src/__tests__/makeDirectives.test.ts | 2 +- .../__tests__/makeMergedSchema.test.ts | 7 +- .../src/__tests__/makeSubscriptions.test.ts | 70 ++++++ .../graphql-server/src/createGraphQLYoga.ts | 223 ++++++++++++++++++ .../functions/__tests__/authDecoders.test.ts | 2 +- .../functions/__tests__/healthCheck.test.ts | 2 +- .../__tests__/readinessCheck.test.ts | 2 +- .../graphql-server/src/functions/graphql.ts | 195 ++------------- .../graphql-server/src/functions/types.ts | 168 ------------- .../src/functions/useRequireAuth.ts | 3 +- packages/graphql-server/src/index.ts | 5 +- .../makeMergedSchema.ts | 52 +++- .../src/plugins/__tests__/useArmor.test.ts | 2 +- .../plugins/__tests__/useRedwoodError.test.ts | 2 +- .../graphql-server/src/plugins/useArmor.ts | 2 +- .../src/plugins/useRedwoodAuthContext.ts | 6 +- .../src/plugins/useRedwoodError.ts | 2 +- .../plugins/useRedwoodGlobalContextSetter.ts | 2 +- .../src/plugins/useRedwoodLogger.ts | 2 +- .../src/plugins/useRedwoodPopulateContext.ts | 5 +- .../src/subscriptions/makeSubscriptions.ts | 39 +++ packages/graphql-server/src/types.ts | 187 +++++++++++++++ .../templates/api-globImports.d.ts.template | 1 + yarn.lock | 1 + 31 files changed, 705 insertions(+), 379 deletions(-) create mode 100644 packages/fastify/src/graphql.ts rename packages/graphql-server/src/{makeMergedSchema => }/__tests__/makeMergedSchema.test.ts (99%) create mode 100644 packages/graphql-server/src/__tests__/makeSubscriptions.test.ts create mode 100644 packages/graphql-server/src/createGraphQLYoga.ts delete mode 100644 packages/graphql-server/src/functions/types.ts rename packages/graphql-server/src/{makeMergedSchema => }/makeMergedSchema.ts (87%) create mode 100644 packages/graphql-server/src/subscriptions/makeSubscriptions.ts diff --git a/docs/docs/graphql.md b/docs/docs/graphql.md index f1b83de0e34e..7d1b0629d742 100644 --- a/docs/docs/graphql.md +++ b/docs/docs/graphql.md @@ -1452,9 +1452,9 @@ The [GraphQL Playground](https://www.graphql-yoga.com/docs/features/graphiql) is > Because both introspection and the playground share possibly sensitive information about your data model, your data, your queries and mutations, best practices for deploying a GraphQL Server call to disable these in production, RedwoodJS **, by default, only enables introspection and the playground when running in development**. That is when `process.env.NODE_ENV === 'development'`. -However, there may be cases where you want to enable introspection. You can enable introspection by setting the `allowIntrospection` option to `true`. +However, there may be cases where you want to enable introspection as well as the GraphQL PLaygrouns. You can enable introspection by setting the `allowIntrospection` option to `true` and enable GraphiQL by setting `allowGraphiQL` to `true`. -Here is an example of `createGraphQLHandler` function with the `allowIntrospection` option set to `true`: +Here is an example of `createGraphQLHandler` function with the `allowIntrospection` and `allowGraphiQL` options set to `true`: ```ts {8} export const handler = createGraphQLHandler({ authDecoder, @@ -1464,6 +1464,7 @@ export const handler = createGraphQLHandler({ sdls, services, allowIntrospection: true, // 👈 enable introspection in all environments + allowGraphiQL: true, // 👈 enable GraphiQL Playground in all environments onException: () => { // Disconnect from your database with an unhandled exception. db.$disconnect() @@ -1475,8 +1476,13 @@ export const handler = createGraphQLHandler({ Enabling introspection in production may pose a security risk, as it allows users to access information about your schema, queries, and mutations. Use this option with caution and make sure to secure your GraphQL API properly. +The may be cases where one wants to allow introspection, but not GraphiQL. + +Or, you may want to enable GraphiQL, but not allow introspection; for example, to try out known queries, but not to share the entire set of possible operations and types. + ::: + ### GraphQL Armor Configuration [GraphQL Armor](https://escape.tech/graphql-armor/) is a middleware that adds a security layer the RedwoodJS GraphQL endpoint configured with sensible defaults. diff --git a/packages/cli/src/commands/experimental/templates/server.ts.template b/packages/cli/src/commands/experimental/templates/server.ts.template index 4a9680a49c98..f359867cc49b 100644 --- a/packages/cli/src/commands/experimental/templates/server.ts.template +++ b/packages/cli/src/commands/experimental/templates/server.ts.template @@ -1,20 +1,35 @@ import path from 'path' +// import { useLiveQuery } from '@envelop/live-query' import chalk from 'chalk' import { config } from 'dotenv-defaults' import Fastify from 'fastify' +import { OperationTypeNode } from 'graphql' import { coerceRootPath, redwoodFastifyWeb, redwoodFastifyAPI, + redwoodFastifyGraphQLServer, DEFAULT_REDWOOD_FASTIFY_CONFIG, } from '@redwoodjs/fastify' import { getPaths, getConfig } from '@redwoodjs/project-config' +import directives from 'src/directives/**/*.{js,ts}' +import sdls from 'src/graphql/**/*.sdl.{js,ts}' +import services from 'src/services/**/*.{js,ts}' + +import { logger } from './lib/logger' + async function serve() { // Load .env files const redwoodProjectPaths = getPaths() + const redwoodConfig = getConfig() + + const apiRootPath = coerceRootPath(redwoodConfig.web.apiUrl) + const port = redwoodConfig.web.port + + const tsServer = Date.now() config({ path: path.join(redwoodProjectPaths.base, '.env'), @@ -22,7 +37,6 @@ async function serve() { multiline: true, }) - const tsServer = Date.now() console.log(chalk.italic.dim('Starting API and Web Servers...')) // Configure Fastify @@ -30,11 +44,6 @@ async function serve() { ...DEFAULT_REDWOOD_FASTIFY_CONFIG, }) - const redwoodConfig = getConfig() - - const apiRootPath = coerceRootPath(redwoodConfig.web.apiUrl) - const port = redwoodConfig.web.port - await fastify.register(redwoodFastifyWeb) await fastify.register(redwoodFastifyAPI, { @@ -43,6 +52,24 @@ async function serve() { }, }) + await fastify.register(redwoodFastifyGraphQLServer, { + loggerConfig: { + logger: logger, + options: { query: true, data: true, level: 'trace' }, + }, + graphiQLEndpoint: '/yoga', + sdls, + services, + directives, + allowIntrospection: true, + allowGraphiQL: true, + allowedOperations: [ + OperationTypeNode.SUBSCRIPTION, + OperationTypeNode.QUERY, + OperationTypeNode.MUTATION, + ], + }) + // Start fastify.listen({ port }) @@ -55,7 +82,7 @@ async function serve() { console.log(`API serving from ${apiServer}`) console.log(`API listening on ${on}`) const graphqlEnd = chalk.magenta(`${apiRootPath}graphql`) - console.log(`GraphQL endpoint at ${graphqlEnd}`) + console.log(`GraphQL function endpoint at ${graphqlEnd}`) }) process.on('exit', () => { diff --git a/packages/fastify/build.mjs b/packages/fastify/build.mjs index 4d3bfd40de1a..bc79ea07c2f9 100644 --- a/packages/fastify/build.mjs +++ b/packages/fastify/build.mjs @@ -4,6 +4,7 @@ await esbuild.build({ entryPoints: [ 'src/api.ts', 'src/config.ts', + 'src/graphql.ts', 'src/index.ts', 'src/types.ts', 'src/web.ts', diff --git a/packages/fastify/package.json b/packages/fastify/package.json index 9c18879e8f72..68cbf7c83720 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -21,6 +21,7 @@ "@fastify/http-proxy": "9.1.0", "@fastify/static": "6.10.1", "@fastify/url-data": "5.3.1", + "@redwoodjs/graphql-server": "5.0.0", "@redwoodjs/project-config": "5.0.0", "ansi-colors": "4.1.3", "fast-glob": "3.2.12", diff --git a/packages/fastify/src/graphql.ts b/packages/fastify/src/graphql.ts new file mode 100644 index 000000000000..86e9ce8a6488 --- /dev/null +++ b/packages/fastify/src/graphql.ts @@ -0,0 +1,46 @@ +import type { FastifyInstance, HookHandlerDoneFunction } from 'fastify' + +import type { GraphQLYogaOptions } from '@redwoodjs/graphql-server' +import { createGraphQLYoga } from '@redwoodjs/graphql-server' +/** + * Encapsulates the routes + * @param {FastifyInstance} fastify Encapsulated Fastify Instance + * @param {Object} options plugin options, refer to https://www.fastify.io/docs/latest/Reference/Plugins/#plugin-options + */ +export async function redwoodFastifyGraphQLServer( + fastify: FastifyInstance, + options: GraphQLYogaOptions, + done: HookHandlerDoneFunction +) { + try { + const { yoga } = createGraphQLYoga(options) + + fastify.route({ + url: yoga.graphqlEndpoint, + method: ['GET', 'POST', 'OPTIONS'], + handler: async (req, reply) => { + const response = await yoga.handleNodeRequest(req, { + req, + reply, + }) + + for (const [name, value] of response.headers) { + reply.header(name, value) + } + + reply.status(response.status) + reply.send(response.body) + + return reply + }, + }) + + fastify.ready(() => { + console.log(`GraphQL Yoga Server endpoint at ${yoga.graphqlEndpoint}`) + }) + + done() + } catch (e) { + console.log(e) + } +} diff --git a/packages/fastify/src/index.ts b/packages/fastify/src/index.ts index 5a7b7350ed94..fe92be932b3e 100644 --- a/packages/fastify/src/index.ts +++ b/packages/fastify/src/index.ts @@ -10,6 +10,7 @@ export function createFastifyInstance(options?: FastifyServerOptions) { export { redwoodFastifyAPI } from './api.js' export { redwoodFastifyWeb } from './web.js' +export { redwoodFastifyGraphQLServer } from './graphql.js' export type * from './types.js' diff --git a/packages/graphql-server/src/__tests__/cors.test.ts b/packages/graphql-server/src/__tests__/cors.test.ts index 1426f68fdc6f..407698b172fa 100644 --- a/packages/graphql-server/src/__tests__/cors.test.ts +++ b/packages/graphql-server/src/__tests__/cors.test.ts @@ -4,7 +4,7 @@ import { createLogger } from '@redwoodjs/api/logger' import { createGraphQLHandler } from '../functions/graphql' -jest.mock('../makeMergedSchema/makeMergedSchema', () => { +jest.mock('../makeMergedSchema', () => { const { makeExecutableSchema } = require('@graphql-tools/schema') // Return executable schema return { diff --git a/packages/graphql-server/src/__tests__/makeDirectives.test.ts b/packages/graphql-server/src/__tests__/makeDirectives.test.ts index 36ed7c0f5035..e4a0af0a14eb 100644 --- a/packages/graphql-server/src/__tests__/makeDirectives.test.ts +++ b/packages/graphql-server/src/__tests__/makeDirectives.test.ts @@ -18,7 +18,7 @@ const bazingaSchema = gql` const barSchema = gql` directive @bar on FIELD_DEFINITION ` -test('Should map globs to defined structure correctly', async () => { +test('Should map directives globs to defined structure correctly', async () => { // Mocking what our import-dir plugin would do const directiveFiles = { foo_directive: { diff --git a/packages/graphql-server/src/makeMergedSchema/__tests__/makeMergedSchema.test.ts b/packages/graphql-server/src/__tests__/makeMergedSchema.test.ts similarity index 99% rename from packages/graphql-server/src/makeMergedSchema/__tests__/makeMergedSchema.test.ts rename to packages/graphql-server/src/__tests__/makeMergedSchema.test.ts index 2cedb697830c..0e0be5f9b3de 100644 --- a/packages/graphql-server/src/makeMergedSchema/__tests__/makeMergedSchema.test.ts +++ b/packages/graphql-server/src/__tests__/makeMergedSchema.test.ts @@ -5,13 +5,13 @@ import { makeDirectivesForPlugin, createTransformerDirective, createValidatorDirective, -} from '../../directives/makeDirectives' +} from '../directives/makeDirectives' +import { makeMergedSchema } from '../makeMergedSchema' import { GraphQLTypeWithFields, ServicesGlobImports, SdlGlobImports, -} from '../../types' -import { makeMergedSchema } from '../makeMergedSchema' +} from '../types' jest.mock('@redwoodjs/project-config', () => { return { @@ -138,6 +138,7 @@ describe('makeMergedSchema', () => { const schema = makeMergedSchema({ sdls, services, + subscriptions: [], directives: makeDirectivesForPlugin(directiveFiles), }) diff --git a/packages/graphql-server/src/__tests__/makeSubscriptions.test.ts b/packages/graphql-server/src/__tests__/makeSubscriptions.test.ts new file mode 100644 index 000000000000..d7ea6825de2c --- /dev/null +++ b/packages/graphql-server/src/__tests__/makeSubscriptions.test.ts @@ -0,0 +1,70 @@ +import gql from 'graphql-tag' + +import { makeSubscriptions } from '../subscriptions/makeSubscriptions' +const countdownSchema = gql` + type Subscription { + countdown(from: Int!, interval: Int!): Int! + } +` + +const newMessageSchema = gql` + type Message { + from: String + body: String + } + + type Subscription { + newMessage(roomId: ID!): Message! + } +` +describe('Should map subscription globs to defined structure correctly', () => { + it('Should map a subscribe correctly', async () => { + // Mocking what our import-dir plugin would do + const subscriptionFiles = { + countdown_subscription: { + schema: countdownSchema, + countdown: { + async *subscribe(_, { from, interval }) { + for (let i = from; i >= 0; i--) { + await new Promise((resolve) => + setTimeout(resolve, interval ?? 1000) + ) + yield { countdown: i } + } + }, + }, + }, + } + + const [countdownSubscription] = makeSubscriptions(subscriptionFiles) + + expect(countdownSubscription.schema.kind).toBe('Document') + expect(countdownSubscription.name).toBe('countdown') + expect(countdownSubscription.resolvers.subscribe).toBeDefined() + expect(countdownSubscription.resolvers.resolve).not.toBeDefined() + }) + + it('Should map a subscribe and resolve correctly', async () => { + // Mocking what our import-dir plugin would do + const subscriptionFiles = { + newMessage_subscription: { + schema: newMessageSchema, + newMessage: { + subscribe: (_, { roomId }) => { + return roomId + }, + resolve: (payload) => { + return payload + }, + }, + }, + } + + const [newMessageSubscription] = makeSubscriptions(subscriptionFiles) + + expect(newMessageSubscription.schema.kind).toBe('Document') + expect(newMessageSubscription.name).toBe('newMessage') + expect(newMessageSubscription.resolvers.subscribe).toBeDefined() + expect(newMessageSubscription.resolvers.resolve).toBeDefined() + }) +}) diff --git a/packages/graphql-server/src/createGraphQLYoga.ts b/packages/graphql-server/src/createGraphQLYoga.ts new file mode 100644 index 000000000000..a81847666905 --- /dev/null +++ b/packages/graphql-server/src/createGraphQLYoga.ts @@ -0,0 +1,223 @@ +/* eslint-disable react-hooks/rules-of-hooks */ +import { useDisableIntrospection } from '@envelop/disable-introspection' +import { useFilterAllowedOperations } from '@envelop/filter-operation-type' +import { GraphQLSchema, OperationTypeNode } from 'graphql' +import { Plugin, useReadinessCheck, createYoga } from 'graphql-yoga' + +import { mapRwCorsOptionsToYoga } from './cors' +import { makeDirectivesForPlugin } from './directives/makeDirectives' +import { makeMergedSchema } from './makeMergedSchema' +import { + useArmor, + useRedwoodAuthContext, + useRedwoodDirective, + useRedwoodError, + useRedwoodGlobalContextSetter, + useRedwoodOpenTelemetry, + useRedwoodLogger, + useRedwoodPopulateContext, +} from './plugins' +import type { + useRedwoodDirectiveReturn, + DirectivePluginOptions, +} from './plugins/useRedwoodDirective' +import { makeSubscriptions } from './subscriptions/makeSubscriptions' +import type { GraphQLYogaOptions } from './types' + +export const createGraphQLYoga = ({ + healthCheckId, + loggerConfig, + context, + getCurrentUser, + onException, + generateGraphiQLHeader, + extraPlugins, + authDecoder, + cors, + services, + sdls, + directives = [], + subscriptions = [], + armorConfig, + allowedOperations, + allowIntrospection, + allowGraphiQL, + defaultError = 'Something went wrong.', + graphiQLEndpoint = '/graphql', + schemaOptions, +}: GraphQLYogaOptions) => { + let schema: GraphQLSchema + let redwoodDirectivePlugins = [] as Plugin[] + const logger = loggerConfig.logger + + try { + // @NOTE: Directives are optional + const projectDirectives = makeDirectivesForPlugin(directives) + + if (projectDirectives.length > 0) { + ;(redwoodDirectivePlugins as useRedwoodDirectiveReturn[]) = + projectDirectives.map((directive) => + useRedwoodDirective(directive as DirectivePluginOptions) + ) + } + + // @NOTE: Subscriptions are optional and only work in the context of a server + const projectSubscriptions = makeSubscriptions(subscriptions) + + schema = makeMergedSchema({ + sdls, + services, + directives: projectDirectives, + subscriptions: projectSubscriptions, + schemaOptions, + }) + } catch (e) { + logger.fatal(e as Error, '\n ⚠️ GraphQL server crashed \n') + + onException && onException() + + // Forcefully crash the graphql server + // so users know that a misconfiguration has happened + process.exit(1) + } + + try { + // Important: Plugins are executed in order of their usage, and inject functionality serially, + // so the order here matters + const plugins: Array> = [] + + const isDevEnv = process.env.NODE_ENV === 'development' + const disableIntrospection = + (allowIntrospection === null && !isDevEnv) || allowIntrospection === false + const disableGraphQL = + (allowGraphiQL === null && !isDevEnv) || allowGraphiQL === false + + const defaultQuery = `query Redwood { + redwood { + version + } + }` + + // TODO: Once Studio is not experimental, can remove these generateGraphiQLHeaders + const authHeader = `{"x-auth-comment": "See documentation: https://redwoodjs.com/docs/cli-commands#setup-graphiQL-headers on how to auto generate auth headers"}` + + const graphiql = !disableGraphQL + ? { + title: 'Redwood GraphQL Playground', + headers: generateGraphiQLHeader + ? generateGraphiQLHeader() + : authHeader, + defaultQuery, + headerEditorEnabled: true, + } + : false + + logger.debug( + { + healthCheckId, + allowedOperations, + allowIntrospection, + defaultError, + disableIntrospection, + disableGraphQL, + allowGraphiQL, + graphiql, + graphiQLEndpoint, + }, + 'GraphiQL and Introspection Config' + ) + + if (disableIntrospection) { + plugins.push(useDisableIntrospection()) + } + + // Custom Redwood plugins + plugins.push(useRedwoodAuthContext(getCurrentUser, authDecoder)) + plugins.push(useRedwoodGlobalContextSetter()) + + if (context) { + plugins.push(useRedwoodPopulateContext(context)) + } + + // Custom Redwood plugins + plugins.push(...redwoodDirectivePlugins) + + // Custom Redwood OpenTelemetry plugin + plugins.push(useRedwoodOpenTelemetry()) + + // Secure the GraphQL server + plugins.push(useArmor(logger, armorConfig)) + + // Only allow execution of specific operation types + plugins.push( + useFilterAllowedOperations( + allowedOperations || [ + OperationTypeNode.QUERY, + OperationTypeNode.MUTATION, + ] + ) + ) + + // App-defined plugins + if (extraPlugins && extraPlugins.length > 0) { + plugins.push(...extraPlugins) + } + + plugins.push(useRedwoodError(logger)) + + plugins.push( + useReadinessCheck({ + endpoint: graphiQLEndpoint + '/readiness', + check: async ({ request }) => { + try { + // if we can reach the health check endpoint ... + const response = await yoga.fetch( + new URL(graphiQLEndpoint + '/health', request.url) + ) + + const expectedHealthCheckId = healthCheckId || 'yoga' + + // ... and the health check id's match the request and response's + const status = + response.headers.get('x-yoga-id') === expectedHealthCheckId && + request.headers.get('x-yoga-id') === expectedHealthCheckId + + // then we're good to go (or not) + return status + } catch (err) { + logger.error(err) + return false + } + }, + }) + ) + + // Must be "last" in plugin chain, but before error masking + // so can process any data added to results and extensions + plugins.push(useRedwoodLogger(loggerConfig)) + + const yoga = createYoga({ + id: healthCheckId, + landingPage: isDevEnv, + schema, + plugins, + maskedErrors: { + errorMessage: defaultError, + isDev: isDevEnv, + }, + logging: logger, + healthCheckEndpoint: graphiQLEndpoint + '/health', + graphqlEndpoint: graphiQLEndpoint, + graphiql, + cors: (request: Request) => { + const requestOrigin = request.headers.get('origin') + return mapRwCorsOptionsToYoga(cors, requestOrigin) + }, + }) + + return { yoga, logger } + } catch (e) { + onException && onException() + throw e + } +} diff --git a/packages/graphql-server/src/functions/__tests__/authDecoders.test.ts b/packages/graphql-server/src/functions/__tests__/authDecoders.test.ts index 5823f1faa67e..8fc19030fbf8 100644 --- a/packages/graphql-server/src/functions/__tests__/authDecoders.test.ts +++ b/packages/graphql-server/src/functions/__tests__/authDecoders.test.ts @@ -4,7 +4,7 @@ import { createLogger } from '@redwoodjs/api/logger' import { createGraphQLHandler } from '../../functions/graphql' -jest.mock('../../makeMergedSchema/makeMergedSchema', () => { +jest.mock('../../makeMergedSchema', () => { const { makeExecutableSchema } = require('@graphql-tools/schema') // Return executable schema diff --git a/packages/graphql-server/src/functions/__tests__/healthCheck.test.ts b/packages/graphql-server/src/functions/__tests__/healthCheck.test.ts index 7cc73ca2f5b3..6e252baacc0a 100644 --- a/packages/graphql-server/src/functions/__tests__/healthCheck.test.ts +++ b/packages/graphql-server/src/functions/__tests__/healthCheck.test.ts @@ -4,7 +4,7 @@ import { createLogger } from '@redwoodjs/api/logger' import { createGraphQLHandler } from '../../functions/graphql' -jest.mock('../../makeMergedSchema/makeMergedSchema', () => { +jest.mock('../../makeMergedSchema', () => { const { makeExecutableSchema } = require('@graphql-tools/schema') // Return executable schema diff --git a/packages/graphql-server/src/functions/__tests__/readinessCheck.test.ts b/packages/graphql-server/src/functions/__tests__/readinessCheck.test.ts index 8fad81e76845..df1916a692f0 100644 --- a/packages/graphql-server/src/functions/__tests__/readinessCheck.test.ts +++ b/packages/graphql-server/src/functions/__tests__/readinessCheck.test.ts @@ -4,7 +4,7 @@ import { createLogger } from '@redwoodjs/api/logger' import { createGraphQLHandler } from '../../functions/graphql' -jest.mock('../../makeMergedSchema/makeMergedSchema', () => { +jest.mock('../../makeMergedSchema', () => { const { makeExecutableSchema } = require('@graphql-tools/schema') // Return executable schema diff --git a/packages/graphql-server/src/functions/graphql.ts b/packages/graphql-server/src/functions/graphql.ts index 4d76ad2188ff..54e60fe1a781 100644 --- a/packages/graphql-server/src/functions/graphql.ts +++ b/packages/graphql-server/src/functions/graphql.ts @@ -1,36 +1,13 @@ -/* eslint-disable react-hooks/rules-of-hooks */ -import { useDisableIntrospection } from '@envelop/disable-introspection' -import { useFilterAllowedOperations } from '@envelop/filter-operation-type' import type { APIGatewayProxyEvent, APIGatewayProxyResult, Context as LambdaContext, } from 'aws-lambda' -import { GraphQLSchema, OperationTypeNode } from 'graphql' -import { Plugin, useReadinessCheck, createYoga } from 'graphql-yoga' -import { getConfig } from '@redwoodjs/project-config' - -import { mapRwCorsOptionsToYoga } from '../cors' -import { makeDirectivesForPlugin } from '../directives/makeDirectives' +import { createGraphQLYoga } from '../createGraphQLYoga' import { getAsyncStoreInstance } from '../globalContext' -import { makeMergedSchema } from '../makeMergedSchema/makeMergedSchema' -import { - useArmor, - useRedwoodAuthContext, - useRedwoodDirective, - useRedwoodError, - useRedwoodGlobalContextSetter, - useRedwoodOpenTelemetry, - useRedwoodLogger, - useRedwoodPopulateContext, -} from '../plugins' -import type { - useRedwoodDirectiveReturn, - DirectivePluginOptions, -} from '../plugins/useRedwoodDirective' +import type { GraphQLHandlerOptions } from '../types' -import type { GraphQLHandlerOptions } from './types' /** * Creates an Enveloped GraphQL Server, configured with default Redwood plugins * @@ -58,155 +35,11 @@ export const createGraphQLHandler = ({ armorConfig, allowedOperations, allowIntrospection, + allowGraphiQL, defaultError = 'Something went wrong.', graphiQLEndpoint = '/graphql', schemaOptions, }: GraphQLHandlerOptions) => { - let schema: GraphQLSchema - let redwoodDirectivePlugins = [] as Plugin[] - const logger = loggerConfig.logger - - try { - // @NOTE: Directives are optional - const projectDirectives = makeDirectivesForPlugin(directives) - - if (projectDirectives.length > 0) { - ;(redwoodDirectivePlugins as useRedwoodDirectiveReturn[]) = - projectDirectives.map((directive) => - useRedwoodDirective(directive as DirectivePluginOptions) - ) - } - - schema = makeMergedSchema({ - sdls, - services, - directives: projectDirectives, - schemaOptions, - }) - } catch (e) { - logger.fatal(e as Error, '\n ⚠️ GraphQL server crashed \n') - - // Forcefully crash the graphql server - // so users know that a misconfiguration has happened - process.exit(1) - } - - // Important: Plugins are executed in order of their usage, and inject functionality serially, - // so the order here matters - const isDevEnv = process.env.NODE_ENV === 'development' - - const plugins: Array> = [] - - if ( - (allowIntrospection == null && !isDevEnv) || - allowIntrospection === false - ) { - plugins.push(useDisableIntrospection()) - } - - // Custom Redwood plugins - plugins.push(useRedwoodAuthContext(getCurrentUser, authDecoder)) - plugins.push(useRedwoodGlobalContextSetter()) - - if (context) { - plugins.push(useRedwoodPopulateContext(context)) - } - - // Custom Redwood plugins - plugins.push(...redwoodDirectivePlugins) - - // Custom Redwood OpenTelemetry plugin - let openTelemetryPluginEnabled = false - try { - openTelemetryPluginEnabled = getConfig().experimental.opentelemetry.enabled - } catch (_error) { - // Swallow this error for the time being as we don't always have access to the - // config toml depending on the deploy environment - } - if (openTelemetryPluginEnabled) { - plugins.push(useRedwoodOpenTelemetry()) - } - - // Secure the GraphQL server - plugins.push(useArmor(logger, armorConfig)) - - // Only allow execution of specific operation types - plugins.push( - useFilterAllowedOperations( - allowedOperations || [OperationTypeNode.QUERY, OperationTypeNode.MUTATION] - ) - ) - - // App-defined plugins - if (extraPlugins && extraPlugins.length > 0) { - plugins.push(...extraPlugins) - } - - plugins.push(useRedwoodError(logger)) - - plugins.push( - useReadinessCheck({ - endpoint: graphiQLEndpoint + '/readiness', - check: async ({ request }) => { - try { - // if we can reach the health check endpoint ... - const response = await yoga.fetch( - new URL(graphiQLEndpoint + '/health', request.url) - ) - - const expectedHealthCheckId = healthCheckId || 'yoga' - - // ... and the health check id's match the request and response's - const status = - response.headers.get('x-yoga-id') === expectedHealthCheckId && - request.headers.get('x-yoga-id') === expectedHealthCheckId - - // then we're good to go (or not) - return status - } catch (err) { - logger.error(err) - return false - } - }, - }) - ) - - // Must be "last" in plugin chain, but before error masking - // so can process any data added to results and extensions - plugins.push(useRedwoodLogger(loggerConfig)) - - const yoga = createYoga({ - id: healthCheckId, - landingPage: isDevEnv, - schema, - plugins, - maskedErrors: { - errorMessage: defaultError, - isDev: isDevEnv, - }, - logging: logger, - healthCheckEndpoint: graphiQLEndpoint + '/health', - graphqlEndpoint: graphiQLEndpoint, - graphiql: isDevEnv - ? { - title: 'Redwood GraphQL Playground', - headers: generateGraphiQLHeader - ? generateGraphiQLHeader() - : `{"x-auth-comment": "See documentation: https://redwoodjs.com/docs/cli-commands#setup-graphiQL-headers on how to auto generate auth headers"}`, - defaultQuery: `query Redwood { - redwood { - version - } -}`, - headerEditorEnabled: true, - } - : false, - cors: (request: Request) => { - const requestOrigin = request.headers.get('origin') - return mapRwCorsOptionsToYoga(cors, requestOrigin) - }, - }) - const handlerFn = async ( event: APIGatewayProxyEvent, requestContext: LambdaContext @@ -216,6 +49,28 @@ export const createGraphQLHandler = ({ let lambdaResponse: APIGatewayProxyResult + const { yoga, logger } = createGraphQLYoga({ + healthCheckId, + loggerConfig, + context, + getCurrentUser, + onException, + generateGraphiQLHeader, + extraPlugins, + authDecoder, + cors, + services, + sdls, + directives, + armorConfig, + allowedOperations, + allowIntrospection, + allowGraphiQL, + defaultError, + graphiQLEndpoint, + schemaOptions, + }) + try { // url needs to be normalized const [, rest = ''] = event.path.split(graphiQLEndpoint) diff --git a/packages/graphql-server/src/functions/types.ts b/packages/graphql-server/src/functions/types.ts deleted file mode 100644 index 083af724c976..000000000000 --- a/packages/graphql-server/src/functions/types.ts +++ /dev/null @@ -1,168 +0,0 @@ -import type { AllowedOperations } from '@envelop/filter-operation-type' -import type { GraphQLArmorConfig } from '@escape.tech/graphql-armor-types' -import { IExecutableSchemaDefinition } from '@graphql-tools/schema' -import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda' -import type { Plugin } from 'graphql-yoga' - -import type { AuthContextPayload, Decoder } from '@redwoodjs/api' -import { CorsConfig } from '@redwoodjs/api' - -import { DirectiveGlobImports } from 'src/directives/makeDirectives' - -import { LoggerConfig } from '../plugins/useRedwoodLogger' -import { SdlGlobImports, ServicesGlobImports } from '../types' - -type ThenArg = T extends PromiseLike ? U : T - -export type GetCurrentUser = ( - decoded: AuthContextPayload[0], - raw: AuthContextPayload[1], - req?: AuthContextPayload[2] -) => Promise | string> - -export type GenerateGraphiQLHeader = () => string - -export type Context = Record -export type ContextFunction = (...args: any[]) => Context | Promise - -export type ArmorConfig = { - logContext?: boolean - logErrors?: boolean -} & GraphQLArmorConfig - -/** This is an interface so you can extend it inside your application when needed */ -export interface RedwoodGraphQLContext { - event: APIGatewayProxyEvent - requestContext: LambdaContext - currentUser?: ThenArg> | AuthContextPayload | null - - [index: string]: unknown -} - -/** - * GraphQLHandlerOptions - */ -export interface GraphQLHandlerOptions { - /** - * @description The identifier used in the GraphQL health check response. - * It verifies readiness when sent as a header in the readiness check request. - * - * By default, the identifier is `yoga` as seen in the HTTP response header `x-yoga-id: yoga` - */ - healthCheckId?: string - - /** - * @description Customize GraphQL Logger - * - * Collect resolver timings, and exposes trace data for - * an individual request under extensions as part of the GraphQL response. - */ - loggerConfig: LoggerConfig - - /** - * @description Modify the resolver and global context. - */ - context?: Context | ContextFunction - - /** - * @description An async function that maps the auth token retrieved from the - * request headers to an object. - * Is it executed when the `auth-provider` contains one of the supported - * providers. - */ - getCurrentUser?: GetCurrentUser - - /** - * @description A callback when an unhandled exception occurs. Use this to disconnect your prisma instance. - */ - onException?: () => void - - /** - * @description Services passed from the glob import: - * import services from 'src/services\/**\/*.{js,ts}' - */ - services: ServicesGlobImports - - /** - * @description SDLs (schema definitions) passed from the glob import: - * import sdls from 'src/graphql\/**\/*.{js,ts}' - */ - sdls: SdlGlobImports - - /** - * @description Directives passed from the glob import: - * import directives from 'src/directives/**\/*.{js,ts}' - */ - directives?: DirectiveGlobImports - - /** - * @description A list of options passed to [makeExecutableSchema] - * (https://www.graphql-tools.com/docs/generate-schema/#makeexecutableschemaoptions). - */ - schemaOptions?: Partial - - /** - * @description CORS configuration - */ - cors?: CorsConfig - - /** - * @description Customize GraphQL Armor plugin configuration - * - * @see https://escape-technologies.github.io/graphql-armor/docs/configuration/examples - */ - armorConfig?: ArmorConfig - - /** - * @description Customize the default error message used to mask errors. - * - * By default, the masked error message is "Something went wrong" - * - * @see https://github.com/dotansimha/envelop/blob/main/packages/core/docs/use-masked-errors.md - */ - defaultError?: string - - /** - * @description Only allows the specified operation types (e.g. subscription, query or mutation). - * - * By default, only allow query and mutation (ie, do not allow subscriptions). - * - * An array of GraphQL's OperationTypeNode enums: - * - OperationTypeNode.SUBSCRIPTION - * - OperationTypeNode.QUERY - * - OperationTypeNode.MUTATION - * - * @see https://github.com/dotansimha/envelop/tree/main/packages/plugins/filter-operation-type - */ - allowedOperations?: AllowedOperations - - /** - * @description Custom Envelop plugins - */ - extraPlugins?: Plugin[] - - /** - * @description Auth-provider specific token decoder - */ - authDecoder?: Decoder | Decoder[] - - /** - * @description Customize the GraphiQL Endpoint that appears in the location bar of the GraphQL Playground - * - * Defaults to '/graphql' as this value must match the name of the `graphql` function on the api-side. - */ - graphiQLEndpoint?: string - - /** - * @description Allow schema introspection. - * By default, schema introspection is disabled in production. Explicitly set this to true or false to override in all environments. - */ - allowIntrospection?: boolean - - /** - * @description Function that returns custom headers (as string) for GraphiQL. - * - * Headers must set auth-provider, Authorization and (if using dbAuth) the encrypted cookie. - */ - generateGraphiQLHeader?: GenerateGraphiQLHeader -} diff --git a/packages/graphql-server/src/functions/useRequireAuth.ts b/packages/graphql-server/src/functions/useRequireAuth.ts index fa6ff8bd7636..0a44d627013a 100644 --- a/packages/graphql-server/src/functions/useRequireAuth.ts +++ b/packages/graphql-server/src/functions/useRequireAuth.ts @@ -6,8 +6,7 @@ import { getAsyncStoreInstance, context as globalContext, } from '../globalContext' - -import type { GetCurrentUser } from './types' +import type { GetCurrentUser } from '../types' interface Args { authDecoder?: Decoder | Decoder[] diff --git a/packages/graphql-server/src/index.ts b/packages/graphql-server/src/index.ts index af8475503b87..d4de56574803 100644 --- a/packages/graphql-server/src/index.ts +++ b/packages/graphql-server/src/index.ts @@ -6,13 +6,15 @@ export * from './globalContext' export * from './errors' export * from './functions/graphql' export * from './functions/useRequireAuth' -export * from './makeMergedSchema/makeMergedSchema' +export * from './makeMergedSchema' +export * from './createGraphQLYoga' export * from './types' export { createValidatorDirective, createTransformerDirective, getDirectiveName, + makeDirectivesForPlugin, } from './directives/makeDirectives' export { @@ -26,6 +28,7 @@ export { TransformerDirectiveFunc, ValidateArgs, TransformArgs, + useRedwoodDirective, } from './plugins/useRedwoodDirective' export * as rootSchema from './rootSchema' diff --git a/packages/graphql-server/src/makeMergedSchema/makeMergedSchema.ts b/packages/graphql-server/src/makeMergedSchema.ts similarity index 87% rename from packages/graphql-server/src/makeMergedSchema/makeMergedSchema.ts rename to packages/graphql-server/src/makeMergedSchema.ts index b4909740d344..5779e680d934 100644 --- a/packages/graphql-server/src/makeMergedSchema/makeMergedSchema.ts +++ b/packages/graphql-server/src/makeMergedSchema.ts @@ -4,7 +4,7 @@ import { makeExecutableSchema, IExecutableSchemaDefinition, } from '@graphql-tools/schema' -import { IResolvers } from '@graphql-tools/utils' +import { IResolvers, IResolverValidationOptions } from '@graphql-tools/utils' import * as opentelemetry from '@opentelemetry/api' import type { GraphQLSchema, @@ -18,14 +18,15 @@ import omitBy from 'lodash.omitby' import { getConfig } from '@redwoodjs/project-config' -import type { RedwoodDirective } from '../plugins/useRedwoodDirective' -import * as rootGqlSchema from '../rootSchema' +import type { RedwoodDirective } from './plugins/useRedwoodDirective' +import * as rootGqlSchema from './rootSchema' +import type { RedwoodSubscription } from './subscriptions/makeSubscriptions' import { Services, ServicesGlobImports, GraphQLTypeWithFields, SdlGlobImports, -} from '../types' +} from './types' const wrapWithOpenTelemetry = async ( func: any, @@ -239,7 +240,7 @@ const mergeResolversWithServices = ({ // after the type. // Example: export const MyType = { field: () => {} } let servicesForType = mergedServices - if (!['Query', 'Mutation'].includes(type.name)) { + if (!['Query', 'Mutation', 'Subscription'].includes(type.name)) { servicesForType = mergedServices?.[type.name] } @@ -330,15 +331,48 @@ const mergeTypes = ( }) } +const mergeResolversWithSubscriptions = ({ + schema, + subscriptions, + resolverValidationOptions, + inheritResolversFromInterfaces, +}: { + schema: GraphQLSchema + subscriptions: RedwoodSubscription[] + resolverValidationOptions?: IResolverValidationOptions | undefined + inheritResolversFromInterfaces?: boolean | undefined +}) => { + if (subscriptions && subscriptions.length > 0) { + const subscriptionResolvers = { Subscription: {} } as IResolvers + + subscriptions?.forEach((subscription) => { + subscriptionResolvers['Subscription'] = { + ...subscriptionResolvers['Subscription'], + ...subscription.resolvers, + } + }) + + return addResolversToSchema({ + schema, + resolvers: subscriptionResolvers, + resolverValidationOptions, + inheritResolversFromInterfaces, + }) + } + return schema +} + export const makeMergedSchema = ({ sdls, services, schemaOptions = {}, directives, + subscriptions = [], }: { sdls: SdlGlobImports services: ServicesGlobImports directives: RedwoodDirective[] + subscriptions: RedwoodSubscription[] /** * A list of options passed to [makeExecutableSchema](https://www.graphql-tools.com/docs/generate-schema/#makeexecutableschemaoptions). @@ -351,6 +385,7 @@ export const makeMergedSchema = ({ [ rootGqlSchema.schema, ...directives.map((directive) => directive.schema), // pick out schemas from directives + ...subscriptions.map((subscription) => subscription.schema), // pick out schemas from subscriptions ...sdlSchemas, // pick out the schemas from sdls ], { all: true } @@ -369,11 +404,16 @@ export const makeMergedSchema = ({ services, }) + const schemaWithSubscriptions = mergeResolversWithSubscriptions({ + schema, + subscriptions, + }) + const { resolverValidationOptions, inheritResolversFromInterfaces } = schemaOptions || {} return addResolversToSchema({ - schema, + schema: schemaWithSubscriptions, resolvers, resolverValidationOptions, inheritResolversFromInterfaces, diff --git a/packages/graphql-server/src/plugins/__tests__/useArmor.test.ts b/packages/graphql-server/src/plugins/__tests__/useArmor.test.ts index e8d7e9916d5a..2436892fc519 100644 --- a/packages/graphql-server/src/plugins/__tests__/useArmor.test.ts +++ b/packages/graphql-server/src/plugins/__tests__/useArmor.test.ts @@ -4,7 +4,7 @@ import { createLogger } from '@redwoodjs/api/logger' import { createGraphQLHandler } from '../../functions/graphql' -jest.mock('../../makeMergedSchema/makeMergedSchema', () => { +jest.mock('../../makeMergedSchema', () => { const { makeExecutableSchema } = require('@graphql-tools/schema') // Return executable schema diff --git a/packages/graphql-server/src/plugins/__tests__/useRedwoodError.test.ts b/packages/graphql-server/src/plugins/__tests__/useRedwoodError.test.ts index 191e8fa003fc..a841db63c41a 100644 --- a/packages/graphql-server/src/plugins/__tests__/useRedwoodError.test.ts +++ b/packages/graphql-server/src/plugins/__tests__/useRedwoodError.test.ts @@ -5,7 +5,7 @@ import { createLogger } from '@redwoodjs/api/logger' import { createGraphQLHandler } from '../../functions/graphql' -jest.mock('../../makeMergedSchema/makeMergedSchema', () => { +jest.mock('../../makeMergedSchema', () => { const { makeExecutableSchema } = require('@graphql-tools/schema') const { ForbiddenError } = require('@redwoodjs/graphql-server/dist/errors') const { EmailValidationError, RedwoodError } = require('@redwoodjs/api') diff --git a/packages/graphql-server/src/plugins/useArmor.ts b/packages/graphql-server/src/plugins/useArmor.ts index 7b80e1f8e54e..8ae799c97c48 100644 --- a/packages/graphql-server/src/plugins/useArmor.ts +++ b/packages/graphql-server/src/plugins/useArmor.ts @@ -3,7 +3,7 @@ import type { GraphQLError, ValidationContext } from 'graphql' import type { Logger } from '@redwoodjs/api/logger' -import { ArmorConfig } from '../functions/types' +import { ArmorConfig } from '../types' const armorConfigDefaultOptions: ArmorConfig = { logContext: false, diff --git a/packages/graphql-server/src/plugins/useRedwoodAuthContext.ts b/packages/graphql-server/src/plugins/useRedwoodAuthContext.ts index 531d55e1669a..c957eb8f5885 100644 --- a/packages/graphql-server/src/plugins/useRedwoodAuthContext.ts +++ b/packages/graphql-server/src/plugins/useRedwoodAuthContext.ts @@ -6,11 +6,7 @@ import { Decoder, } from '@redwoodjs/api' -// import { AuthenticationError } from '../errors' -import { - RedwoodGraphQLContext, - GraphQLHandlerOptions, -} from '../functions/types' +import { RedwoodGraphQLContext, GraphQLHandlerOptions } from '../types' /** * Envelop plugin for injecting the current user into the GraphQL Context, diff --git a/packages/graphql-server/src/plugins/useRedwoodError.ts b/packages/graphql-server/src/plugins/useRedwoodError.ts index 630a001f7acf..797293f4c52c 100644 --- a/packages/graphql-server/src/plugins/useRedwoodError.ts +++ b/packages/graphql-server/src/plugins/useRedwoodError.ts @@ -7,7 +7,7 @@ import { import { RedwoodError } from '@redwoodjs/api' import type { Logger } from '@redwoodjs/api/logger' -import { RedwoodGraphQLContext } from '../functions/types' +import { RedwoodGraphQLContext } from '../types' /** * Converts RedwoodErrors to GraphQLErrors diff --git a/packages/graphql-server/src/plugins/useRedwoodGlobalContextSetter.ts b/packages/graphql-server/src/plugins/useRedwoodGlobalContextSetter.ts index 50c2c5c09315..432a45423206 100644 --- a/packages/graphql-server/src/plugins/useRedwoodGlobalContextSetter.ts +++ b/packages/graphql-server/src/plugins/useRedwoodGlobalContextSetter.ts @@ -1,7 +1,7 @@ import { Plugin } from 'graphql-yoga' -import { RedwoodGraphQLContext } from '../functions/types' import { setContext } from '../index' +import { RedwoodGraphQLContext } from '../types' /** * This Envelop plugin waits until the GraphQL context is done building and sets the diff --git a/packages/graphql-server/src/plugins/useRedwoodLogger.ts b/packages/graphql-server/src/plugins/useRedwoodLogger.ts index 75a1bf59bc89..73e6f7887ce4 100644 --- a/packages/graphql-server/src/plugins/useRedwoodLogger.ts +++ b/packages/graphql-server/src/plugins/useRedwoodLogger.ts @@ -10,7 +10,7 @@ import { v4 as uuidv4 } from 'uuid' import type { Logger, LevelWithSilent } from '@redwoodjs/api/logger' import { AuthenticationError, ForbiddenError } from '../errors' -import { RedwoodGraphQLContext } from '../functions/types' +import { RedwoodGraphQLContext } from '../types' /** * Options for request and response information to include in the log statements diff --git a/packages/graphql-server/src/plugins/useRedwoodPopulateContext.ts b/packages/graphql-server/src/plugins/useRedwoodPopulateContext.ts index 1e0b10d91b3e..7625252fe1ce 100644 --- a/packages/graphql-server/src/plugins/useRedwoodPopulateContext.ts +++ b/packages/graphql-server/src/plugins/useRedwoodPopulateContext.ts @@ -1,9 +1,6 @@ import { Plugin } from 'graphql-yoga' -import { - RedwoodGraphQLContext, - GraphQLHandlerOptions, -} from '../functions/types' +import { RedwoodGraphQLContext, GraphQLHandlerOptions } from '../types' /** * This Envelop plugin enriches the context on a per-request basis diff --git a/packages/graphql-server/src/subscriptions/makeSubscriptions.ts b/packages/graphql-server/src/subscriptions/makeSubscriptions.ts new file mode 100644 index 000000000000..69f831ea8576 --- /dev/null +++ b/packages/graphql-server/src/subscriptions/makeSubscriptions.ts @@ -0,0 +1,39 @@ +import { DocumentNode } from 'graphql' +/* +We want SubscriptionsGlobs type to be an object with this shape: +But not fully supported in TS +{ + schema: DocumentNode // <-- required + [string]: RedwoodSubscription +} +*/ +export type SubscriptionGlobImports = Record + +export type RedwoodSubscription = { + schema: DocumentNode + resolvers: any + name: string +} + +export const makeSubscriptions = ( + SubscriptionGlobs: SubscriptionGlobImports +): RedwoodSubscription[] => { + return Object.entries(SubscriptionGlobs).flatMap( + ([importedGlobName, exports]) => { + // In case the Subscriptions get nested, their name comes as nested_directory_filename_Subscription + + // SubscriptionName is the filename without the Subscription extension + // slice gives us ['fileName', 'Subscription'], so we take the first one + const [SubscriptionNameFromFile] = importedGlobName.split('_').slice(-2) + + // We support exporting both Subscription name and default + const subscription = { + schema: exports.schema, + resolvers: exports[SubscriptionNameFromFile] || exports.default, + name: SubscriptionNameFromFile, + } as RedwoodSubscription + + return [subscription] + } + ) +} diff --git a/packages/graphql-server/src/types.ts b/packages/graphql-server/src/types.ts index c410d78091c0..4629f97094d0 100644 --- a/packages/graphql-server/src/types.ts +++ b/packages/graphql-server/src/types.ts @@ -1,4 +1,21 @@ +import type { AllowedOperations } from '@envelop/filter-operation-type' +import type { GraphQLArmorConfig } from '@escape.tech/graphql-armor-types' +import { IExecutableSchemaDefinition } from '@graphql-tools/schema' +import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda' import { GraphQLObjectType, GraphQLInterfaceType, DocumentNode } from 'graphql' +import type { Plugin } from 'graphql-yoga' + +import type { AuthContextPayload, Decoder } from '@redwoodjs/api' +import { CorsConfig } from '@redwoodjs/api' + +import { DirectiveGlobImports } from 'src/directives/makeDirectives' +import type { SubscriptionGlobImports } from 'src/subscriptions/makeSubscriptions' + +import type { + useRedwoodDirectiveReturn, + DirectivePluginOptions, +} from './plugins/useRedwoodDirective' +import { LoggerConfig } from './plugins/useRedwoodLogger' export type Resolver = (...args: unknown[]) => unknown export type Services = { @@ -6,6 +23,7 @@ export type Services = { } type ThenArg = T extends PromiseLike ? U : T + export type ResolverArgs = { root: ThenArg } export type SdlGlobImports = { @@ -29,3 +47,172 @@ export interface MakeServicesInterface { export type MakeServices = (args: MakeServicesInterface) => ServicesGlobImports export type GraphQLTypeWithFields = GraphQLObjectType | GraphQLInterfaceType + +export type { useRedwoodDirectiveReturn, DirectivePluginOptions } + +export type GetCurrentUser = ( + decoded: AuthContextPayload[0], + raw: AuthContextPayload[1], + req?: AuthContextPayload[2] +) => Promise | string> + +export type GenerateGraphiQLHeader = () => string + +export type Context = Record +export type ContextFunction = (...args: any[]) => Context | Promise + +export type ArmorConfig = { + logContext?: boolean + logErrors?: boolean +} & GraphQLArmorConfig + +/** This is an interface so you can extend it inside your application when needed */ +export interface RedwoodGraphQLContext { + event: APIGatewayProxyEvent + requestContext: LambdaContext + currentUser?: ThenArg> | AuthContextPayload | null + + [index: string]: unknown +} + +/** + * GraphQLYogaOptions + */ +export interface GraphQLYogaOptions { + /** + * @description The identifier used in the GraphQL health check response. + * It verifies readiness when sent as a header in the readiness check request. + * + * By default, the identifier is `yoga` as seen in the HTTP response header `x-yoga-id: yoga` + */ + healthCheckId?: string + + /** + * @description Customize GraphQL Logger + * + * Collect resolver timings, and exposes trace data for + * an individual request under extensions as part of the GraphQL response. + */ + loggerConfig: LoggerConfig + + /** + * @description Modify the resolver and global context. + */ + context?: Context | ContextFunction + + /** + * @description An async function that maps the auth token retrieved from the + * request headers to an object. + * Is it executed when the `auth-provider` contains one of the supported + * providers. + */ + getCurrentUser?: GetCurrentUser + + /** + * @description A callback when an unhandled exception occurs. Use this to disconnect your prisma instance. + */ + onException?: () => void + + /** + * @description Services passed from the glob import: + * import services from 'src/services\/**\/*.{js,ts}' + */ + services: ServicesGlobImports + + /** + * @description SDLs (schema definitions) passed from the glob import: + * import sdls from 'src/graphql\/**\/*.{js,ts}' + */ + sdls: SdlGlobImports + + /** + * @description Directives passed from the glob import: + * import directives from 'src/directives/**\/*.{js,ts}' + */ + directives?: DirectiveGlobImports + + /** + * @description Subscriptions passed from the glob import: + * import subscriptions from 'src/subscriptions/**\/*.{js,ts}' + */ + subscriptions?: SubscriptionGlobImports + + /** + * @description A list of options passed to [makeExecutableSchema] + * (https://www.graphql-tools.com/docs/generate-schema/#makeexecutableschemaoptions). + */ + schemaOptions?: Partial + + /** + * @description CORS configuration + */ + cors?: CorsConfig + + /** + * @description Customize GraphQL Armor plugin configuration + * + * @see https://escape-technologies.github.io/graphql-armor/docs/configuration/examples + */ + armorConfig?: ArmorConfig + + /** + * @description Customize the default error message used to mask errors. + * + * By default, the masked error message is "Something went wrong" + * + * @see https://github.com/dotansimha/envelop/blob/main/packages/core/docs/use-masked-errors.md + */ + defaultError?: string + + /** + * @description Only allows the specified operation types (e.g. subscription, query or mutation). + * + * By default, only allow query and mutation (ie, do not allow subscriptions). + * + * An array of GraphQL's OperationTypeNode enums: + * - OperationTypeNode.SUBSCRIPTION + * - OperationTypeNode.QUERY + * - OperationTypeNode.MUTATION + * + * @see https://github.com/dotansimha/envelop/tree/main/packages/plugins/filter-operation-type + */ + allowedOperations?: AllowedOperations + + /** + * @description Custom Envelop plugins + */ + extraPlugins?: Plugin[] + + /** + * @description Auth-provider specific token decoder + */ + authDecoder?: Decoder | Decoder[] + + /** + * @description Customize the GraphiQL Endpoint that appears in the location bar of the GraphQL Playground + * + * Defaults to '/graphql' as this value must match the name of the `graphql` function on the api-side. + */ + graphiQLEndpoint?: string + + /** + * @description Allow GraphiQL playground. + * By default, GraphiQL playground is disabled in production. Explicitly set this to true or false to override in all environments. + */ + allowGraphiQL?: boolean + + /** + * @description Allow schema introspection. + * By default, schema introspection is disabled in production. Explicitly set this to true or false to override in all environments. + */ + allowIntrospection?: boolean + + /** + * @description Function that returns custom headers (as string) for GraphiQL. + * + * Headers must set auth-provider, Authorization and (if using dbAuth) the encrypted cookie. + */ + generateGraphiQLHeader?: GenerateGraphiQLHeader +} + +export interface GraphQLHandlerOptions extends GraphQLYogaOptions {} diff --git a/packages/internal/src/generate/templates/api-globImports.d.ts.template b/packages/internal/src/generate/templates/api-globImports.d.ts.template index d7ecec563318..51e248fd5f82 100644 --- a/packages/internal/src/generate/templates/api-globImports.d.ts.template +++ b/packages/internal/src/generate/templates/api-globImports.d.ts.template @@ -1,3 +1,4 @@ declare module 'src/services/**/*.{js,ts}' declare module 'src/directives/**/*.{js,ts}' declare module 'src/graphql/**/*.sdl.{js,ts}' +declare module 'src/subscriptions/**/*.{js,ts}' diff --git a/yarn.lock b/yarn.lock index 57568ecc49de..b4495033ada8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7160,6 +7160,7 @@ __metadata: "@fastify/http-proxy": 9.1.0 "@fastify/static": 6.10.1 "@fastify/url-data": 5.3.1 + "@redwoodjs/graphql-server": 5.0.0 "@redwoodjs/project-config": 5.0.0 "@types/aws-lambda": 8.10.115 "@types/lodash.escape": 4.0.7 From 93838d3e3742499c01e33530ab01f1730fa6c6d3 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Thu, 18 May 2023 16:37:21 -0700 Subject: [PATCH 25/32] chore(package size): implement `findup-sync` in `@redwoodjs/project-config` (#8315) * chore: swap out findup-sync for lighter alt * cli * rest * update readme * update dep graphs * fix lint * swap external package for our own * follow-up fixes * fix eslint fn * update dep cruiser to 13 * lint fix --- .eslintrc.js | 6 +- packages/cli/package.json | 1 - packages/cli/src/index.js | 5 +- packages/cli/src/lib/index.js | 3 + packages/codemods/package.json | 3 +- .../v0.37.x/addDirectives/addDirectives.ts | 4 +- .../updateApiImports.yargs.ts | 5 +- .../v0.37.x/updateForms/updateForms.yargs.ts | 5 +- .../updateScenarios/updateScenarios.yargs.ts | 5 +- .../renameApiProxyPath/renameApiProxyPath.ts | 4 +- .../updateScaffoldStyles.ts | 4 +- .../updateSeedScript/updateSeedScript.ts | 5 +- .../updateBabelConfig/updateBabelConfig.ts | 9 +- .../updateCellMocks/updateCellMocks.yargs.ts | 5 +- .../updateRouterParamTypes.yargs.ts | 5 +- .../updateJestConfig/updateJestConfig.ts | 5 +- .../renameVerifierTimestamp.yargs.ts | 5 +- .../v0.48.x/upgradeYarn/upgradeYarn.ts | 4 +- .../updateDevFatalErrorPage.ts | 4 +- .../tsconfigForRouteHooks.ts | 5 +- .../configureFastify.yargs.ts | 7 +- .../updateResolverTypes.yargs.ts | 5 +- .../updateClerkGetCurrentUser.yargs.ts | 5 +- .../v4.x.x/useArmor/useArmor.yargs.ts | 10 +- .../renameValidateWith.yargs.ts | 5 +- .../updateAuth0ToV2/updateAuth0ToV2.yargs.ts | 7 +- .../updateNodeEngineTo18.ts | 4 +- .../upgradeToReact18/upgradeToReact18.ts | 8 +- packages/codemods/src/lib/cells.ts | 8 +- packages/codemods/src/lib/getRWPaths.ts | 286 ------------- .../codemods/src/lib/getRootPackageJSON.ts | 4 +- packages/codemods/src/lib/isTSProject.ts | 4 +- packages/codemods/src/lib/prettify.ts | 4 +- packages/codemods/src/lib/runTransform.ts | 2 - packages/codemods/src/lib/ts2js.ts | 5 +- .../src/testUtils/matchFolderTransform.ts | 2 +- .../templates/code/codemod.yargs.ts.template | 4 +- .../templates/structure/codemod.ts.template | 4 +- packages/internal/package.json | 2 - ...ncy-cruiser.js => .dependency-cruiser.mjs} | 2 +- packages/project-config/README.md | 12 +- .../project-config/dependency-graph-dist.svg | 391 +++++++----------- .../project-config/dependency-graph-src.svg | 224 +++++----- packages/project-config/package.json | 8 +- packages/project-config/src/configPath.ts | 4 +- packages/project-config/src/findUp.ts | 25 ++ packages/project-config/src/index.ts | 1 + packages/structure/package.json | 1 - yarn.lock | 99 +---- 49 files changed, 396 insertions(+), 839 deletions(-) delete mode 100644 packages/codemods/src/lib/getRWPaths.ts rename packages/project-config/{.dependency-cruiser.js => .dependency-cruiser.mjs} (99%) create mode 100644 packages/project-config/src/findUp.ts diff --git a/.eslintrc.js b/.eslintrc.js index 5f5970715501..9463f78e7f98 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,11 +1,11 @@ const path = require('path') -const findUp = require('findup-sync') +const { findUp } = require('@redwoodjs/project-config') // Framework Babel config is monorepo root ./babel.config.js -// `yarn lint` runs for each workspace, which needs findup for path to root +// `yarn lint` runs for each workspace, which needs findUp for path to root const findBabelConfig = (cwd = process.cwd()) => { - const configPath = findUp('babel.config.js', { cwd }) + const configPath = findUp('babel.config.js', cwd) if (!configPath) { throw new Error(`Eslint-parser could not find a "babel.config.js" file`) } diff --git a/packages/cli/package.json b/packages/cli/package.json index e549f9626774..6a5c27952d80 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -54,7 +54,6 @@ "envinfo": "7.8.1", "execa": "5.1.1", "fast-glob": "3.2.12", - "findup-sync": "5.0.0", "fs-extra": "11.1.1", "humanize-string": "2.1.0", "latest-version": "5.1.0", diff --git a/packages/cli/src/index.js b/packages/cli/src/index.js index 0c73c3e23543..1b8961a6b2b4 100644 --- a/packages/cli/src/index.js +++ b/packages/cli/src/index.js @@ -4,7 +4,6 @@ import fs from 'fs' import path from 'path' import { config } from 'dotenv-defaults' -import findup from 'findup-sync' import { hideBin, Parser } from 'yargs/helpers' import yargs from 'yargs/yargs' @@ -32,7 +31,7 @@ import * as testCommand from './commands/test' import * as tstojsCommand from './commands/ts-to-js' import * as typeCheckCommand from './commands/type-check' import * as upgradeCommand from './commands/upgrade' -import { getPaths } from './lib' +import { getPaths, findUp } from './lib' import * as updateCheck from './lib/updateCheck' // # Setting the CWD @@ -71,7 +70,7 @@ try { // `cwd` wasn't set. Odds are they're in a Redwood project, // but they could be in ./api or ./web, so we have to find up to be sure. - const redwoodTOMLPath = findup('redwood.toml', { cwd: process.cwd() }) + const redwoodTOMLPath = findUp('redwood.toml') if (!redwoodTOMLPath) { throw new Error( diff --git a/packages/cli/src/lib/index.js b/packages/cli/src/lib/index.js index 2095ccc5180e..b35236b86a1c 100644 --- a/packages/cli/src/lib/index.js +++ b/packages/cli/src/lib/index.js @@ -18,12 +18,15 @@ import { getConfig as getRedwoodConfig, getPaths as getRedwoodPaths, resolveFile as internalResolveFile, + findUp, } from '@redwoodjs/project-config' import c from './colors' import { addFileToRollback } from './rollback' import { pluralize, singularize } from './rwPluralize' +export { findUp } + export const asyncForEach = async (array, callback) => { for (let index = 0; index < array.length; index++) { await callback(array[index], index, array) diff --git a/packages/codemods/package.json b/packages/codemods/package.json index a029890f9193..90a47bda0fcc 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -29,6 +29,7 @@ "@babel/runtime-corejs3": "7.21.5", "@babel/traverse": "7.21.5", "@iarna/toml": "2.2.5", + "@redwoodjs/project-config": "5.0.0", "@vscode/ripgrep": "1.15.3", "@whatwg-node/fetch": "0.9.0", "cheerio": "1.0.0-rc.12", @@ -36,7 +37,6 @@ "deepmerge": "4.3.1", "execa": "5.1.1", "fast-glob": "3.2.12", - "findup-sync": "5.0.0", "graphql": "16.6.0", "jest": "29.5.0", "jscodeshift": "0.15.0", @@ -47,7 +47,6 @@ }, "devDependencies": { "@types/babel__core": "7.20.0", - "@types/findup-sync": "4.0.2", "@types/fs-extra": "11.0.1", "@types/jest": "29.5.1", "@types/jscodeshift": "0.11.6", diff --git a/packages/codemods/src/codemods/v0.37.x/addDirectives/addDirectives.ts b/packages/codemods/src/codemods/v0.37.x/addDirectives/addDirectives.ts index 07e5e89f200b..11554ac0d715 100644 --- a/packages/codemods/src/codemods/v0.37.x/addDirectives/addDirectives.ts +++ b/packages/codemods/src/codemods/v0.37.x/addDirectives/addDirectives.ts @@ -4,10 +4,10 @@ import path from 'path' import { fetch } from '@whatwg-node/fetch' import fg from 'fast-glob' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' export const addDirectives = async () => { - const rwPaths = getRWPaths() + const rwPaths = getPaths() /** * An object where the keys are resolved filenames and the values are (for the most part) URLs to fetch. diff --git a/packages/codemods/src/codemods/v0.37.x/updateApiImports/updateApiImports.yargs.ts b/packages/codemods/src/codemods/v0.37.x/updateApiImports/updateApiImports.yargs.ts index c006a7dfb462..d3851816e321 100644 --- a/packages/codemods/src/codemods/v0.37.x/updateApiImports/updateApiImports.yargs.ts +++ b/packages/codemods/src/codemods/v0.37.x/updateApiImports/updateApiImports.yargs.ts @@ -2,8 +2,9 @@ import path from 'path' import task from 'tasuku' +import { getPaths } from '@redwoodjs/project-config' + import getFilesWithPattern from '../../../lib/getFilesWithPattern' -import getRWPaths from '../../../lib/getRWPaths' import runTransform from '../../../lib/runTransform' export const command = 'update-api-imports' @@ -14,7 +15,7 @@ export const handler = () => { task( 'Updating @redwoodjs/api imports', async ({ setWarning }: { setWarning: any }) => { - const rwPaths = getRWPaths() + const rwPaths = getPaths() const files = getFilesWithPattern({ pattern: `from '@redwoodjs/api'`, diff --git a/packages/codemods/src/codemods/v0.37.x/updateForms/updateForms.yargs.ts b/packages/codemods/src/codemods/v0.37.x/updateForms/updateForms.yargs.ts index 61a0e69dd045..3d5095f8bd49 100644 --- a/packages/codemods/src/codemods/v0.37.x/updateForms/updateForms.yargs.ts +++ b/packages/codemods/src/codemods/v0.37.x/updateForms/updateForms.yargs.ts @@ -2,8 +2,9 @@ import path from 'path' import task from 'tasuku' +import { getPaths } from '@redwoodjs/project-config' + import getFilesWithPattern from '../../../lib/getFilesWithPattern' -import getRWPaths from '../../../lib/getRWPaths' import runTransform from '../../../lib/runTransform' export const command = 'update-forms' @@ -11,7 +12,7 @@ export const description = '(v0.36->v0.37) Updates @redwoodjs/forms props' export const handler = () => { task('Updating forms', async ({ setWarning }: { setWarning: any }) => { - const rwPaths = getRWPaths() + const rwPaths = getPaths() const files = getFilesWithPattern({ pattern: 'Form', diff --git a/packages/codemods/src/codemods/v0.37.x/updateScenarios/updateScenarios.yargs.ts b/packages/codemods/src/codemods/v0.37.x/updateScenarios/updateScenarios.yargs.ts index e9e26f2b767d..09e316487e7a 100644 --- a/packages/codemods/src/codemods/v0.37.x/updateScenarios/updateScenarios.yargs.ts +++ b/packages/codemods/src/codemods/v0.37.x/updateScenarios/updateScenarios.yargs.ts @@ -3,7 +3,8 @@ import path from 'path' import fg from 'fast-glob' import task from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import runTransform from '../../../lib/runTransform' export const command = 'update-scenarios' @@ -28,7 +29,7 @@ export const handler = () => { await runTransform({ transformPath: path.join(__dirname, 'updateScenarios.js'), targetPaths: fg.sync('api/src/services/**/*.scenarios.{js,ts}', { - cwd: getRWPaths().base, + cwd: getPaths().base, absolute: true, }), }) diff --git a/packages/codemods/src/codemods/v0.38.x/renameApiProxyPath/renameApiProxyPath.ts b/packages/codemods/src/codemods/v0.38.x/renameApiProxyPath/renameApiProxyPath.ts index 6fd3c6067a97..027b75926de3 100644 --- a/packages/codemods/src/codemods/v0.38.x/renameApiProxyPath/renameApiProxyPath.ts +++ b/packages/codemods/src/codemods/v0.38.x/renameApiProxyPath/renameApiProxyPath.ts @@ -1,10 +1,10 @@ import fs from 'fs' import path from 'path' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' export const renameApiProxyPath = () => { - const redwoodTOMLPath = path.join(getRWPaths().base, 'redwood.toml') + const redwoodTOMLPath = path.join(getPaths().base, 'redwood.toml') let redwoodTOML = fs.readFileSync(redwoodTOMLPath, 'utf8') redwoodTOML = redwoodTOML.replace('apiProxyPath', 'apiUrl') diff --git a/packages/codemods/src/codemods/v0.38.x/updateScaffoldStyles/updateScaffoldStyles.ts b/packages/codemods/src/codemods/v0.38.x/updateScaffoldStyles/updateScaffoldStyles.ts index a804f14d221e..6d0ee7c7b4d8 100644 --- a/packages/codemods/src/codemods/v0.38.x/updateScaffoldStyles/updateScaffoldStyles.ts +++ b/packages/codemods/src/codemods/v0.38.x/updateScaffoldStyles/updateScaffoldStyles.ts @@ -1,10 +1,10 @@ import fs from 'fs' import path from 'path' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' export const updateScaffoldStyles = () => { - const scaffoldCSSPath = path.join(getRWPaths().web.src, 'scaffold.css') + const scaffoldCSSPath = path.join(getPaths().web.src, 'scaffold.css') if (fs.existsSync(scaffoldCSSPath)) { let scaffoldCSS = fs.readFileSync(scaffoldCSSPath, 'utf8') diff --git a/packages/codemods/src/codemods/v0.38.x/updateSeedScript/updateSeedScript.ts b/packages/codemods/src/codemods/v0.38.x/updateSeedScript/updateSeedScript.ts index cb900b5075d1..261c91335718 100644 --- a/packages/codemods/src/codemods/v0.38.x/updateSeedScript/updateSeedScript.ts +++ b/packages/codemods/src/codemods/v0.38.x/updateSeedScript/updateSeedScript.ts @@ -3,8 +3,9 @@ import path from 'path' import { fetch } from '@whatwg-node/fetch' +import { getPaths } from '@redwoodjs/project-config' + import getRootPackageJson from '../../../lib/getRootPackageJSON' -import getRWPaths from '../../../lib/getRWPaths' import isTSProject from '../../../lib/isTSProject' import ts2js from '../../../lib/ts2js' @@ -32,7 +33,7 @@ export const updateSeedScript = async () => { /** * Add `scripts/seed.{js,ts}` template. */ - const rwPaths = getRWPaths() + const rwPaths = getPaths() const hasScripts = fs.existsSync(rwPaths.scripts) diff --git a/packages/codemods/src/codemods/v0.39.x/updateBabelConfig/updateBabelConfig.ts b/packages/codemods/src/codemods/v0.39.x/updateBabelConfig/updateBabelConfig.ts index 1beb1948c7f7..863bfb8aad61 100644 --- a/packages/codemods/src/codemods/v0.39.x/updateBabelConfig/updateBabelConfig.ts +++ b/packages/codemods/src/codemods/v0.39.x/updateBabelConfig/updateBabelConfig.ts @@ -1,14 +1,15 @@ import fs from 'fs' import path from 'path' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import prettify from '../../../lib/prettify' export const removeBabelConfig = async () => { - const rootBabelConfigPath = path.join(getRWPaths().base, 'babel.config.js') - const webBabelRcPath = path.join(getRWPaths().web.base, '.babelrc.js') + const rootBabelConfigPath = path.join(getPaths().base, 'babel.config.js') + const webBabelRcPath = path.join(getPaths().web.base, '.babelrc.js') - const webBabelConfigPath = path.join(getRWPaths().web.base, 'babel.config.js') + const webBabelConfigPath = path.join(getPaths().web.base, 'babel.config.js') // Remove root babel config if (fs.existsSync(rootBabelConfigPath)) { diff --git a/packages/codemods/src/codemods/v0.39.x/updateCellMocks/updateCellMocks.yargs.ts b/packages/codemods/src/codemods/v0.39.x/updateCellMocks/updateCellMocks.yargs.ts index 77b347a27576..ffb50251d116 100644 --- a/packages/codemods/src/codemods/v0.39.x/updateCellMocks/updateCellMocks.yargs.ts +++ b/packages/codemods/src/codemods/v0.39.x/updateCellMocks/updateCellMocks.yargs.ts @@ -4,7 +4,8 @@ import fg from 'fast-glob' import task from 'tasuku' import type { TaskInnerAPI } from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import runTransform from '../../../lib/runTransform' export const command = 'update-cell-mocks' @@ -12,7 +13,7 @@ export const description = '(v0.38->v0.39) Updates standard cell mocks to export functions, instead of objects' export const handler = () => { - const rwPaths = getRWPaths() + const rwPaths = getPaths() const cellMocks = fg.sync('**/*.mock.{js,ts}', { cwd: rwPaths.web.src, diff --git a/packages/codemods/src/codemods/v0.39.x/updateRouterParamTypes/updateRouterParamTypes.yargs.ts b/packages/codemods/src/codemods/v0.39.x/updateRouterParamTypes/updateRouterParamTypes.yargs.ts index ce78117b44b3..4b7cdce0602c 100644 --- a/packages/codemods/src/codemods/v0.39.x/updateRouterParamTypes/updateRouterParamTypes.yargs.ts +++ b/packages/codemods/src/codemods/v0.39.x/updateRouterParamTypes/updateRouterParamTypes.yargs.ts @@ -3,7 +3,8 @@ import path from 'path' import task from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import isTSProject from '../../../lib/isTSProject' import runTransform from '../../../lib/runTransform' @@ -14,7 +15,7 @@ export const handler = () => { task( 'Updating Routes.{tsx|js}', async ({ setWarning }: { setWarning: any }) => { - const rwPaths = getRWPaths() + const rwPaths = getPaths() const extns = isTSProject ? 'tsx' : 'js' const routesFilePath = path.join(rwPaths.web.src, `Routes.${extns}`) diff --git a/packages/codemods/src/codemods/v0.44.x/updateJestConfig/updateJestConfig.ts b/packages/codemods/src/codemods/v0.44.x/updateJestConfig/updateJestConfig.ts index 9c38cad3e349..420f07369e19 100644 --- a/packages/codemods/src/codemods/v0.44.x/updateJestConfig/updateJestConfig.ts +++ b/packages/codemods/src/codemods/v0.44.x/updateJestConfig/updateJestConfig.ts @@ -4,12 +4,13 @@ import fs from 'fs' import path from 'path' +import { getPaths } from '@redwoodjs/project-config' + import fetchFileFromTemplate from '../../../lib/fetchFileFromTemplate' -import getRWPaths from '../../../lib/getRWPaths' import runTransform from '../../../lib/runTransform' export default async function updateJestConfig() { - const rwPaths = getRWPaths() + const rwPaths = getPaths() /** * @type JestConfigPaths diff --git a/packages/codemods/src/codemods/v0.48.x/renameVerifierTimestamp/renameVerifierTimestamp.yargs.ts b/packages/codemods/src/codemods/v0.48.x/renameVerifierTimestamp/renameVerifierTimestamp.yargs.ts index 84ffa8f95de8..823850f62853 100644 --- a/packages/codemods/src/codemods/v0.48.x/renameVerifierTimestamp/renameVerifierTimestamp.yargs.ts +++ b/packages/codemods/src/codemods/v0.48.x/renameVerifierTimestamp/renameVerifierTimestamp.yargs.ts @@ -4,7 +4,8 @@ import fg from 'fast-glob' import task from 'tasuku' import { TaskInnerAPI } from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import runTransform from '../../../lib/runTransform' export const command = 'rename-verifier-timestamp' @@ -37,7 +38,7 @@ export const handler = () => { await runTransform({ transformPath: path.join(__dirname, 'renameVerifierTimestamp.js'), targetPaths: fg.sync('/**/*.{js,ts}', { - cwd: getRWPaths().api.functions, + cwd: getPaths().api.functions, absolute: true, }), }) diff --git a/packages/codemods/src/codemods/v0.48.x/upgradeYarn/upgradeYarn.ts b/packages/codemods/src/codemods/v0.48.x/upgradeYarn/upgradeYarn.ts index 314461db8b16..8c1dac199ccc 100644 --- a/packages/codemods/src/codemods/v0.48.x/upgradeYarn/upgradeYarn.ts +++ b/packages/codemods/src/codemods/v0.48.x/upgradeYarn/upgradeYarn.ts @@ -2,10 +2,10 @@ import { spawnSync } from 'child_process' import fs from 'fs' import path from 'path' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' async function upgradeYarn() { - const rwPaths = getRWPaths() + const rwPaths = getPaths() console.log('Preparing and enabling corepack...') diff --git a/packages/codemods/src/codemods/v0.50.x/updateDevFatalErrorPage/updateDevFatalErrorPage.ts b/packages/codemods/src/codemods/v0.50.x/updateDevFatalErrorPage/updateDevFatalErrorPage.ts index 77efedcddda9..18e47c89794d 100644 --- a/packages/codemods/src/codemods/v0.50.x/updateDevFatalErrorPage/updateDevFatalErrorPage.ts +++ b/packages/codemods/src/codemods/v0.50.x/updateDevFatalErrorPage/updateDevFatalErrorPage.ts @@ -3,10 +3,10 @@ import path from 'path' import { fetch } from '@whatwg-node/fetch' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' export const updateDevFatalErrorPage = async () => { - const rwPaths = getRWPaths() + const rwPaths = getPaths() /** * An object where the keys are resolved filenames and the values are (for the most part) URLs to fetch. diff --git a/packages/codemods/src/codemods/v2.3.x/tsconfigForRouteHooks/tsconfigForRouteHooks.ts b/packages/codemods/src/codemods/v2.3.x/tsconfigForRouteHooks/tsconfigForRouteHooks.ts index 16ff8699594a..bd30a857a289 100644 --- a/packages/codemods/src/codemods/v2.3.x/tsconfigForRouteHooks/tsconfigForRouteHooks.ts +++ b/packages/codemods/src/codemods/v2.3.x/tsconfigForRouteHooks/tsconfigForRouteHooks.ts @@ -1,4 +1,5 @@ -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import prettify from '../../../lib/prettify' export default async function addApiAliasToTsConfig() { @@ -6,7 +7,7 @@ export default async function addApiAliasToTsConfig() { const ts = await import('typescript') const webConfigPath = ts.findConfigFile( - getRWPaths().web.base, + getPaths().web.base, ts.sys.fileExists ) diff --git a/packages/codemods/src/codemods/v2.x.x/configureFastify/configureFastify.yargs.ts b/packages/codemods/src/codemods/v2.x.x/configureFastify/configureFastify.yargs.ts index cb44ade29267..8180f0901c6e 100644 --- a/packages/codemods/src/codemods/v2.x.x/configureFastify/configureFastify.yargs.ts +++ b/packages/codemods/src/codemods/v2.x.x/configureFastify/configureFastify.yargs.ts @@ -5,7 +5,8 @@ import { fetch } from '@whatwg-node/fetch' import fg from 'fast-glob' import task from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import prettify from '../../../lib/prettify' import runTransform from '../../../lib/runTransform' @@ -16,7 +17,7 @@ export const description = export const handler = () => { task('Configure Fastify', async ({ setOutput }) => { const [API_SERVER_CONFIG_PATH] = fg.sync('server.config.{js,ts}', { - cwd: getRWPaths().api.base, + cwd: getPaths().api.base, absolute: true, }) @@ -46,7 +47,7 @@ export const handler = () => { const text = await res.text() const NEW_API_SERVER_CONFIG_PATH = path.join( - getRWPaths().api.base, + getPaths().api.base, 'server.config.js' ) diff --git a/packages/codemods/src/codemods/v2.x.x/updateResolverTypes/updateResolverTypes.yargs.ts b/packages/codemods/src/codemods/v2.x.x/updateResolverTypes/updateResolverTypes.yargs.ts index 00ffd3ca77c1..901f2bd1132c 100644 --- a/packages/codemods/src/codemods/v2.x.x/updateResolverTypes/updateResolverTypes.yargs.ts +++ b/packages/codemods/src/codemods/v2.x.x/updateResolverTypes/updateResolverTypes.yargs.ts @@ -3,7 +3,8 @@ import path from 'path' import fg from 'fast-glob' import task, { TaskInnerAPI } from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import runTransform from '../../../lib/runTransform' export const command = 'update-resolver-types' @@ -16,7 +17,7 @@ export const handler = () => { transformPath: path.join(__dirname, 'updateResolverTypes.js'), // Target services written in TS only targetPaths: fg.sync('**/*.ts', { - cwd: getRWPaths().api.services, + cwd: getPaths().api.services, ignore: ['**/node_modules/**', '**/*.test.ts', '**/*.scenarios.ts'], absolute: true, }), diff --git a/packages/codemods/src/codemods/v4.2.x/updateClerkGetCurrentUser/updateClerkGetCurrentUser.yargs.ts b/packages/codemods/src/codemods/v4.2.x/updateClerkGetCurrentUser/updateClerkGetCurrentUser.yargs.ts index a4ca472a298f..4643dd49c1c1 100644 --- a/packages/codemods/src/codemods/v4.2.x/updateClerkGetCurrentUser/updateClerkGetCurrentUser.yargs.ts +++ b/packages/codemods/src/codemods/v4.2.x/updateClerkGetCurrentUser/updateClerkGetCurrentUser.yargs.ts @@ -2,7 +2,8 @@ import path from 'path' import task, { TaskInnerAPI } from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import isTSProject from '../../../lib/isTSProject' import runTransform from '../../../lib/runTransform' @@ -16,7 +17,7 @@ export const handler = () => { await runTransform({ transformPath: path.join(__dirname, 'updateClerkGetCurrentUser.js'), - targetPaths: [path.join(getRWPaths().api.base, 'src', 'lib', authFile)], + targetPaths: [path.join(getPaths().api.base, 'src', 'lib', authFile)], }) setOutput('All done! Run `yarn rw lint --fix` to prettify your code') diff --git a/packages/codemods/src/codemods/v4.x.x/useArmor/useArmor.yargs.ts b/packages/codemods/src/codemods/v4.x.x/useArmor/useArmor.yargs.ts index 639a6d2be02e..68a6d6d9ae64 100644 --- a/packages/codemods/src/codemods/v4.x.x/useArmor/useArmor.yargs.ts +++ b/packages/codemods/src/codemods/v4.x.x/useArmor/useArmor.yargs.ts @@ -2,7 +2,8 @@ import path from 'path' import task from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import isTSProject from '../../../lib/isTSProject' import runTransform from '../../../lib/runTransform' @@ -16,12 +17,7 @@ export const handler = () => { await runTransform({ transformPath: path.join(__dirname, 'useArmor.js'), targetPaths: [ - path.join( - getRWPaths().api.base, - 'src', - 'functions', - graphqlHandlerFile - ), + path.join(getPaths().api.base, 'src', 'functions', graphqlHandlerFile), ], }) diff --git a/packages/codemods/src/codemods/v5.x.x/renameValidateWith/renameValidateWith.yargs.ts b/packages/codemods/src/codemods/v5.x.x/renameValidateWith/renameValidateWith.yargs.ts index 3ddb3fe90df0..b36f01ad02d7 100644 --- a/packages/codemods/src/codemods/v5.x.x/renameValidateWith/renameValidateWith.yargs.ts +++ b/packages/codemods/src/codemods/v5.x.x/renameValidateWith/renameValidateWith.yargs.ts @@ -2,8 +2,9 @@ import path from 'path' import task from 'tasuku' +import { getPaths } from '@redwoodjs/project-config' + import getFilesWithPattern from '../../../lib/getFilesWithPattern' -import getRWPaths from '../../../lib/getRWPaths' import runTransform from '../../../lib/runTransform' export const command = 'rename-validate-with' @@ -15,7 +16,7 @@ export const handler = () => { task( 'Renaming `validateWith` to `validateWithSync`', async ({ setOutput }) => { - const redwoodProjectPaths = getRWPaths() + const redwoodProjectPaths = getPaths() const files = getFilesWithPattern({ pattern: 'validateWith', diff --git a/packages/codemods/src/codemods/v5.x.x/updateAuth0ToV2/updateAuth0ToV2.yargs.ts b/packages/codemods/src/codemods/v5.x.x/updateAuth0ToV2/updateAuth0ToV2.yargs.ts index 0fc710584a65..6e0cf1a30f58 100644 --- a/packages/codemods/src/codemods/v5.x.x/updateAuth0ToV2/updateAuth0ToV2.yargs.ts +++ b/packages/codemods/src/codemods/v5.x.x/updateAuth0ToV2/updateAuth0ToV2.yargs.ts @@ -3,7 +3,8 @@ import path from 'path' import execa from 'execa' import task from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import isTSProject from '../../../lib/isTSProject' import runTransform from '../../../lib/runTransform' @@ -18,7 +19,7 @@ export const handler = () => { try { await execa.command('yarn up @auth0/auth0-spa-js@^2', { - cwd: getRWPaths().web.base, + cwd: getPaths().web.base, }) } catch { console.error( @@ -28,7 +29,7 @@ export const handler = () => { await runTransform({ transformPath: path.join(__dirname, 'updateAuth0ToV2.js'), - targetPaths: [path.join(getRWPaths().web.src, authFile)], + targetPaths: [path.join(getPaths().web.src, authFile)], }) setOutput('All done! Run `yarn rw lint --fix` to prettify your code') diff --git a/packages/codemods/src/codemods/v5.x.x/updateNodeEngineTo18/updateNodeEngineTo18.ts b/packages/codemods/src/codemods/v5.x.x/updateNodeEngineTo18/updateNodeEngineTo18.ts index 51eadc279789..b728547d449d 100644 --- a/packages/codemods/src/codemods/v5.x.x/updateNodeEngineTo18/updateNodeEngineTo18.ts +++ b/packages/codemods/src/codemods/v5.x.x/updateNodeEngineTo18/updateNodeEngineTo18.ts @@ -1,10 +1,10 @@ import fs from 'fs' import path from 'path' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' async function updateNodeEngineTo18() { - const packageJSONPath = path.join(getRWPaths().base, 'package.json') + const packageJSONPath = path.join(getPaths().base, 'package.json') const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath, 'utf-8')) packageJSON.engines.node = '=18.x' diff --git a/packages/codemods/src/codemods/v5.x.x/upgradeToReact18/upgradeToReact18.ts b/packages/codemods/src/codemods/v5.x.x/upgradeToReact18/upgradeToReact18.ts index da73c25fdf36..5fb15c617966 100644 --- a/packages/codemods/src/codemods/v5.x.x/upgradeToReact18/upgradeToReact18.ts +++ b/packages/codemods/src/codemods/v5.x.x/upgradeToReact18/upgradeToReact18.ts @@ -5,10 +5,10 @@ import { load } from 'cheerio' import execa from 'execa' import type { TaskInnerAPI } from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' function checkAndTransformReactRoot(taskContext: TaskInnerAPI) { - const indexHTMLFilepath = path.join(getRWPaths().web.src, 'index.html') + const indexHTMLFilepath = path.join(getPaths().web.src, 'index.html') const indexHTML = load(fs.readFileSync(indexHTMLFilepath, 'utf-8')) @@ -50,7 +50,7 @@ function checkAndTransformReactRoot(taskContext: TaskInnerAPI) { } async function upgradeReactDepsTo18() { - const redwoodProjectPaths = getRWPaths() + const redwoodProjectPaths = getPaths() const webPackageJSONPath = path.join( redwoodProjectPaths.web.base, @@ -82,7 +82,7 @@ async function upgradeReactDepsTo18() { async function checkAndUpdateCustomWebIndex(taskContext: TaskInnerAPI) { // First check if the custom web index exists. If it doesn't, this is a no-op. - const redwoodProjectPaths = getRWPaths() + const redwoodProjectPaths = getPaths() const bundlerToCustomWebIndex = { vite: path.join(redwoodProjectPaths.web.src, 'entry-client.jsx'), diff --git a/packages/codemods/src/lib/cells.ts b/packages/codemods/src/lib/cells.ts index a1da8652bbc7..54e69bf0357c 100644 --- a/packages/codemods/src/lib/cells.ts +++ b/packages/codemods/src/lib/cells.ts @@ -15,9 +15,9 @@ import { visit, } from 'graphql' -import getRWPaths from './getRWPaths' +import { getPaths } from '@redwoodjs/project-config' -export const findCells = (cwd: string = getRWPaths().web.src) => { +export const findCells = (cwd: string = getPaths().web.src) => { const modules = fg.sync('**/*Cell.{js,jsx,ts,tsx}', { cwd, absolute: true, @@ -30,7 +30,7 @@ export const isCellFile = (p: string) => { const { dir, name } = path.parse(p) // If the path isn't on the web side it cannot be a cell - if (!isFileInsideFolder(p, getRWPaths().web.src)) { + if (!isFileInsideFolder(p, getPaths().web.src)) { return false } @@ -139,7 +139,7 @@ export const fileToAst = (filePath: string): types.Node => { // use jsx plugin for web files, because in JS, the .jsx extension is not used const isJsxFile = path.extname(filePath).match(/[jt]sx$/) || - isFileInsideFolder(filePath, getRWPaths().web.base) + isFileInsideFolder(filePath, getPaths().web.base) const plugins = [ 'typescript', diff --git a/packages/codemods/src/lib/getRWPaths.ts b/packages/codemods/src/lib/getRWPaths.ts deleted file mode 100644 index 595acfee2da1..000000000000 --- a/packages/codemods/src/lib/getRWPaths.ts +++ /dev/null @@ -1,286 +0,0 @@ -import fs from 'fs' -import path from 'path' - -import toml from '@iarna/toml' -import merge from 'deepmerge' -import findUp from 'findup-sync' - -enum TargetEnum { - NODE = 'node', - BROWSER = 'browser', - REACT_NATIVE = 'react-native', - ELECTRON = 'electron', -} - -interface NodeTargetConfig { - title: string - name?: string - host: string - port: number - path: string - target: TargetEnum.NODE - schemaPath: string -} - -interface BrowserTargetConfig { - title: string - name?: string - host: string - port: number - path: string - target: TargetEnum.BROWSER - // TODO: apiProxyHost: string - apiProxyPort: number - apiProxyPath: string - fastRefresh: boolean - a11y: boolean -} - -interface Config { - web: BrowserTargetConfig - api: NodeTargetConfig - browser: { - open: boolean | string - } - generate: { - tests: boolean - stories: boolean - nestScaffoldByModel: boolean - } -} - -// Note that web's includeEnvironmentVariables is handled in `webpack.common.js` -// https://github.com/redwoodjs/redwood/blob/d51ade08118c17459cebcdb496197ea52485364a/packages/core/config/webpack.common.js#L19 -const DEFAULT_CONFIG: Config = { - web: { - title: 'Redwood App', - host: 'localhost', - port: 8910, - path: './web', - target: TargetEnum.BROWSER, - apiProxyPath: '/.netlify/functions', - apiProxyPort: 8911, - fastRefresh: true, - a11y: true, - }, - api: { - title: 'Redwood App', - host: 'localhost', - port: 8911, - path: './api', - target: TargetEnum.NODE, - schemaPath: './api/db/schema.prisma', - }, - browser: { - open: false, - }, - generate: { - tests: true, - stories: true, - nestScaffoldByModel: true, - }, -} - -/** - * These configuration options are modified by the user via the Redwood - * config file. - */ -const getConfig = (configPath = getConfigPath()): Config => { - try { - const rawConfig = fs.readFileSync(configPath, 'utf8') - return merge(DEFAULT_CONFIG, toml.parse(rawConfig)) - } catch (e) { - throw new Error(`Could not parse "${configPath}": ${e}`) - } -} - -interface NodeTargetPaths { - base: string - dataMigrations: string - directives: string - db: string - dbSchema: string - src: string - functions: string - graphql: string - lib: string - generators: string - services: string - config: string - dist: string - types: string -} - -interface BrowserTargetPaths { - base: string - src: string - app: string - generators: string - index: string | null - routes: string - pages: string - components: string - layouts: string - config: string - webpack: string - postcss: string - storybookConfig: string - storybookPreviewConfig: string - dist: string - types: string -} - -interface Paths { - base: string - generated: { - base: string - schema: string - types: { - includes: string - mirror: string - } - prebuild: string - } - web: BrowserTargetPaths - api: NodeTargetPaths - scripts: string -} - -const CONFIG_FILE_NAME = 'redwood.toml' - -// TODO: Remove these. -const PATH_API_DIR_FUNCTIONS = 'api/src/functions' -const PATH_RW_SCRIPTS = 'scripts' -const PATH_API_DIR_GRAPHQL = 'api/src/graphql' -const PATH_API_DIR_CONFIG = 'api/src/config' -const PATH_API_DIR_LIB = 'api/src/lib' -const PATH_API_DIR_GENERATORS = 'api/generators' -const PATH_API_DIR_SERVICES = 'api/src/services' -const PATH_API_DIR_DIRECTIVES = 'api/src/directives' -const PATH_API_DIR_SRC = 'api/src' -const PATH_WEB_ROUTES = 'web/src/Routes' // .js|.tsx -const PATH_WEB_DIR_LAYOUTS = 'web/src/layouts/' -const PATH_WEB_DIR_PAGES = 'web/src/pages/' -const PATH_WEB_DIR_COMPONENTS = 'web/src/components' -const PATH_WEB_DIR_SRC = 'web/src' -const PATH_WEB_DIR_SRC_APP = 'web/src/App' -const PATH_WEB_DIR_SRC_INDEX = 'web/src/index' // .js|.tsx -const PATH_WEB_DIR_GENERATORS = 'web/generators' -const PATH_WEB_DIR_CONFIG = 'web/config' -const PATH_WEB_DIR_CONFIG_WEBPACK = 'web/config/webpack.config.js' -const PATH_WEB_DIR_CONFIG_POSTCSS = 'web/config/postcss.config.js' -const PATH_WEB_DIR_CONFIG_STORYBOOK_CONFIG = 'web/config/storybook.config.js' -const PATH_WEB_DIR_CONFIG_STORYBOOK_PREVIEW = 'web/config/storybook.preview.js' - -const PATH_WEB_DIR_DIST = 'web/dist' - -/** - * Search the parent directories for the Redwood configuration file. - */ -const getConfigPath = ( - cwd: string = process.env.RWJS_CWD ?? process.cwd() -): string => { - const configPath = findUp(CONFIG_FILE_NAME, { cwd }) - if (!configPath) { - throw new Error( - `Could not find a "${CONFIG_FILE_NAME}" file, are you sure you're in a Redwood project?` - ) - } - return configPath -} - -/** - * The Redwood config file is used as an anchor for the base directory of a project. - */ -const getBaseDir = (configPath: string = getConfigPath()): string => { - return path.dirname(configPath) -} - -/** - * Use this to resolve files when the path to the file is known, - * but the extension is not. - */ -const resolveFile = ( - filePath: string, - extensions: string[] = ['.js', '.tsx', '.ts', '.jsx'] -): string | null => { - for (const extension of extensions) { - const p = `${filePath}${extension}` - if (fs.existsSync(p)) { - return p - } - } - return null -} - -/** - * Path constants that are relevant to a Redwood project. - */ -// TODO: Make this a proxy and make it lazy. -const getRWPaths = (BASE_DIR: string = getBaseDir()): Paths => { - const routes = resolveFile(path.join(BASE_DIR, PATH_WEB_ROUTES)) as string - const { schemaPath } = getConfig(getConfigPath(BASE_DIR)).api - const schemaDir = path.dirname(schemaPath) - - const paths = { - base: BASE_DIR, - - generated: { - base: path.join(BASE_DIR, '.redwood'), - schema: path.join(BASE_DIR, '.redwood/schema.graphql'), - types: { - includes: path.join(BASE_DIR, '.redwood/types/includes'), - mirror: path.join(BASE_DIR, '.redwood/types/mirror'), - }, - prebuild: path.join(BASE_DIR, '.redwood/prebuild'), - }, - - scripts: path.join(BASE_DIR, PATH_RW_SCRIPTS), - - api: { - base: path.join(BASE_DIR, 'api'), - dataMigrations: path.join(BASE_DIR, schemaDir, 'dataMigrations'), - db: path.join(BASE_DIR, schemaDir), - dbSchema: path.join(BASE_DIR, schemaPath), - functions: path.join(BASE_DIR, PATH_API_DIR_FUNCTIONS), - graphql: path.join(BASE_DIR, PATH_API_DIR_GRAPHQL), - lib: path.join(BASE_DIR, PATH_API_DIR_LIB), - generators: path.join(BASE_DIR, PATH_API_DIR_GENERATORS), - config: path.join(BASE_DIR, PATH_API_DIR_CONFIG), - services: path.join(BASE_DIR, PATH_API_DIR_SERVICES), - directives: path.join(BASE_DIR, PATH_API_DIR_DIRECTIVES), - src: path.join(BASE_DIR, PATH_API_DIR_SRC), - dist: path.join(BASE_DIR, 'api/dist'), - types: path.join(BASE_DIR, 'api/types'), - }, - - web: { - routes, - base: path.join(BASE_DIR, 'web'), - pages: path.join(BASE_DIR, PATH_WEB_DIR_PAGES), - components: path.join(BASE_DIR, PATH_WEB_DIR_COMPONENTS), - layouts: path.join(BASE_DIR, PATH_WEB_DIR_LAYOUTS), - src: path.join(BASE_DIR, PATH_WEB_DIR_SRC), - generators: path.join(BASE_DIR, PATH_WEB_DIR_GENERATORS), - app: resolveFile(path.join(BASE_DIR, PATH_WEB_DIR_SRC_APP)) as string, - index: resolveFile(path.join(BASE_DIR, PATH_WEB_DIR_SRC_INDEX)), - config: path.join(BASE_DIR, PATH_WEB_DIR_CONFIG), - webpack: path.join(BASE_DIR, PATH_WEB_DIR_CONFIG_WEBPACK), - postcss: path.join(BASE_DIR, PATH_WEB_DIR_CONFIG_POSTCSS), - storybookConfig: path.join( - BASE_DIR, - PATH_WEB_DIR_CONFIG_STORYBOOK_CONFIG - ), - storybookPreviewConfig: path.join( - BASE_DIR, - PATH_WEB_DIR_CONFIG_STORYBOOK_PREVIEW - ), - dist: path.join(BASE_DIR, PATH_WEB_DIR_DIST), - types: path.join(BASE_DIR, 'web/types'), - }, - } - - return paths -} - -export default getRWPaths diff --git a/packages/codemods/src/lib/getRootPackageJSON.ts b/packages/codemods/src/lib/getRootPackageJSON.ts index ddaea760bfd4..f68c3a52a605 100644 --- a/packages/codemods/src/lib/getRootPackageJSON.ts +++ b/packages/codemods/src/lib/getRootPackageJSON.ts @@ -1,10 +1,10 @@ import fs from 'fs' import path from 'path' -import getRWPaths from './getRWPaths' +import { getPaths } from '@redwoodjs/project-config' const getRootPackageJSON = () => { - const rootPackageJSONPath = path.join(getRWPaths().base, 'package.json') + const rootPackageJSONPath = path.join(getPaths().base, 'package.json') const rootPackageJSON = JSON.parse( fs.readFileSync(rootPackageJSONPath, 'utf8') diff --git a/packages/codemods/src/lib/isTSProject.ts b/packages/codemods/src/lib/isTSProject.ts index 8c41913386fc..51fb3a1fa5a6 100644 --- a/packages/codemods/src/lib/isTSProject.ts +++ b/packages/codemods/src/lib/isTSProject.ts @@ -1,9 +1,9 @@ import fg from 'fast-glob' -import getRWPaths from './getRWPaths' +import { getPaths } from '@redwoodjs/project-config' const isTSProject = - fg.sync(`${getRWPaths().base}/**/tsconfig.json`, { + fg.sync(`${getPaths().base}/**/tsconfig.json`, { ignore: ['**/node_modules/**'], }).length > 0 diff --git a/packages/codemods/src/lib/prettify.ts b/packages/codemods/src/lib/prettify.ts index 6468bb6a6fed..7a2927f24e85 100644 --- a/packages/codemods/src/lib/prettify.ts +++ b/packages/codemods/src/lib/prettify.ts @@ -2,11 +2,11 @@ import path from 'path' import { format } from 'prettier' -import getRWPaths from './getRWPaths' +import { getPaths } from '@redwoodjs/project-config' const getPrettierConfig = () => { try { - return require(path.join(getRWPaths().base, 'prettier.config.js')) + return require(path.join(getPaths().base, 'prettier.config.js')) } catch (e) { return undefined } diff --git a/packages/codemods/src/lib/runTransform.ts b/packages/codemods/src/lib/runTransform.ts index 84aff65f8a41..ce4c069d5a11 100644 --- a/packages/codemods/src/lib/runTransform.ts +++ b/packages/codemods/src/lib/runTransform.ts @@ -5,8 +5,6 @@ * @see prisma/codemods {@link https://github.com/prisma/codemods/blob/main/utils/runner.ts} * @see react-codemod {@link https://github.com/reactjs/react-codemod/blob/master/bin/cli.js} */ - -// @ts-expect-error We don't have this in types but need for workaround https://github.com/facebook/jscodeshift/issues/398 import * as jscodeshift from 'jscodeshift/src/Runner' const defaultJscodeshiftOpts = { diff --git a/packages/codemods/src/lib/ts2js.ts b/packages/codemods/src/lib/ts2js.ts index a5c63c0e973e..926f47fd1b19 100644 --- a/packages/codemods/src/lib/ts2js.ts +++ b/packages/codemods/src/lib/ts2js.ts @@ -1,11 +1,12 @@ import { transform } from '@babel/core' -import getRWPaths from './getRWPaths' +import { getPaths } from '@redwoodjs/project-config' + import prettify from './prettify' const ts2js = (file: string) => { const result = transform(file, { - cwd: getRWPaths().base, + cwd: getPaths().base, configFile: false, plugins: [ [ diff --git a/packages/codemods/src/testUtils/matchFolderTransform.ts b/packages/codemods/src/testUtils/matchFolderTransform.ts index c4ccf71330aa..ba0bdeca2d2d 100644 --- a/packages/codemods/src/testUtils/matchFolderTransform.ts +++ b/packages/codemods/src/testUtils/matchFolderTransform.ts @@ -42,7 +42,7 @@ export const matchFolderTransform = async ( const GLOB_CONFIG = { absolute: false, dot: true, - ignore: ['redwood.toml', '**/*.DS_Store'], // ignore the fake redwood.toml added for getRWPaths + ignore: ['redwood.toml', '**/*.DS_Store'], // ignore the fake redwood.toml added for getPaths } const transformedPaths = fg.sync('**/*', { ...GLOB_CONFIG, cwd: tempDir }) diff --git a/packages/codemods/tasks/generateCodemod/templates/code/codemod.yargs.ts.template b/packages/codemods/tasks/generateCodemod/templates/code/codemod.yargs.ts.template index 2b5f2e06d7ff..3a21464546f7 100644 --- a/packages/codemods/tasks/generateCodemod/templates/code/codemod.yargs.ts.template +++ b/packages/codemods/tasks/generateCodemod/templates/code/codemod.yargs.ts.template @@ -2,7 +2,7 @@ import path from 'path' import task, { TaskInnerAPI } from 'tasuku' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' import runTransform from '../../../lib/runTransform' export const command = '${kebabName}' @@ -17,7 +17,7 @@ export const handler = () => { // Here we know exactly which file we need to transform, but often times you won't. // If you need to transform files based on their name, location, etc, use `fast-glob`. // If you need to transform files based on their contents, use `getFilesWithPattern`. - targetPaths: [path.join(getRWPaths().base, 'redwood.toml')], + targetPaths: [path.join(getPaths().base, 'redwood.toml')], }) setOutput('All done! Run `yarn rw lint --fix` to prettify your code') diff --git a/packages/codemods/tasks/generateCodemod/templates/structure/codemod.ts.template b/packages/codemods/tasks/generateCodemod/templates/structure/codemod.ts.template index bc3b0af26d51..f1985f27bbb3 100644 --- a/packages/codemods/tasks/generateCodemod/templates/structure/codemod.ts.template +++ b/packages/codemods/tasks/generateCodemod/templates/structure/codemod.ts.template @@ -1,11 +1,11 @@ import fs from 'fs' import path from 'path' -import getRWPaths from '../../../lib/getRWPaths' +import { getPaths } from '@redwoodjs/project-config' async function ${name}() { const fileThatShouldntBeThereAnymore = path.join( - getRWPaths().base, + getPaths().base, 'babel.config.js' ) fs.rmSync(fileThatShouldntBeThereAnymore) diff --git a/packages/internal/package.json b/packages/internal/package.json index 235eb33b84ee..91bb5c268be1 100644 --- a/packages/internal/package.json +++ b/packages/internal/package.json @@ -50,7 +50,6 @@ "deepmerge": "4.3.1", "esbuild": "0.17.19", "fast-glob": "3.2.12", - "findup-sync": "5.0.0", "fs-extra": "11.1.1", "graphql": "16.6.0", "kill-port": "1.6.1", @@ -67,7 +66,6 @@ "@babel/core": "7.21.8", "@types/babel-plugin-tester": "9.0.5", "@types/babel__core": "7.20.0", - "@types/findup-sync": "4.0.2", "@types/fs-extra": "11.0.1", "babel-plugin-tester": "11.0.4", "graphql-tag": "2.12.6", diff --git a/packages/project-config/.dependency-cruiser.js b/packages/project-config/.dependency-cruiser.mjs similarity index 99% rename from packages/project-config/.dependency-cruiser.js rename to packages/project-config/.dependency-cruiser.mjs index 54f2573d7670..f96801d037f4 100644 --- a/packages/project-config/.dependency-cruiser.js +++ b/packages/project-config/.dependency-cruiser.mjs @@ -1,5 +1,5 @@ /** @type {import('dependency-cruiser').IConfiguration} */ -module.exports = { +export default { forbidden: [ /* rules from the 'recommended' preset: */ { diff --git a/packages/project-config/README.md b/packages/project-config/README.md index 4b962ccce8c4..90d24f87c1a0 100644 --- a/packages/project-config/README.md +++ b/packages/project-config/README.md @@ -5,15 +5,13 @@ > This is a new internal package. There are still changes we want to make, so we're marking it as experimental for now. > **Don't depend on this directly in a Redwood project**. -This offers functionality to parse the Redwood configurations and a way to get a project's paths. +This package offers functionality to parse Redwood's configuration file, redwood.toml, and a convenient way of getting a Redwood project's paths. -## The base directory +## Package size -Redwood is anchored to a single `redwood.toml` file. We use this to determine the base directory of a project. - -## Sides - -Redwood separates your project into sides, by default we have a "web side" and an "api side." Each side has a target ("browser" for "web" and "node" for "api"). We use the concept of sides and targets to determine how to build, test, lint and manage your project. +| Version | Publish | Install | +| :--------------------------------------------------------------------------------- | :------ | :------ | +| [v5.2.1](https://packagephobia.com/result?p=%40redwoodjs%2Fproject-config%405.2.1) | 96.6 kB | 809 kB | ## Dependency graphs diff --git a/packages/project-config/dependency-graph-dist.svg b/packages/project-config/dependency-graph-dist.svg index dda994eb756c..b1f6080238d3 100644 --- a/packages/project-config/dependency-graph-dist.svg +++ b/packages/project-config/dependency-graph-dist.svg @@ -4,326 +4,217 @@ - - + + dependency-cruiser output - + cluster_dist - -dist + +dist cluster_node_modules - -node_modules + +node_modules -cluster_node_modules/@babel - -@babel - - cluster_node_modules/@iarna - -@iarna + +@iarna dist/config.d.ts - -config.d.ts -0% + +config.d.ts +50% - + -dist/config.js - - -config.js -70% +node_modules/@iarna/toml + + + + + +toml - + + +dist/config.d.ts->node_modules/@iarna/toml + + + + -dist/configPath.js - - -configPath.js -43% +dist/configPath.d.ts + + +configPath.d.ts +0% - - -dist/config.js->dist/configPath.js - - - - + -node_modules/@babel/runtime-corejs3 - - - - - -runtime-corejs3 +dist/findUp.d.ts + + +findUp.d.ts +0% - - -dist/config.js->node_modules/@babel/runtime-corejs3 - - - - + -node_modules/@iarna/toml - - - - - -toml +dist/index.d.ts + + +index.d.ts +100% - + + +dist/index.d.ts->dist/config.d.ts + + + + -dist/config.js->node_modules/@iarna/toml - - +dist/index.d.ts->dist/configPath.d.ts + + - + + +dist/index.d.ts->dist/findUp.d.ts + + + + -node_modules/deepmerge - - - - - -deepmerge +dist/paths.d.ts + + +paths.d.ts +0% - - -dist/config.js->node_modules/deepmerge - - + + +dist/index.d.ts->dist/paths.d.ts + + - + -fs - - -fs +dist/index.js + + +index.js +100% - - -dist/config.js->fs - - + + +dist/index.js->node_modules/@iarna/toml + + - + -node_modules/string-env-interpolation - - - - - -string-env-interpolation +node_modules/deepmerge + + + + + +deepmerge - - -dist/config.js->node_modules/string-env-interpolation - - - - + -dist/configPath.js->node_modules/@babel/runtime-corejs3 - - +dist/index.js->node_modules/deepmerge + + - - -node_modules/findup-sync - - - - - -findup-sync + + +node_modules/fast-glob + + + + + +fast-glob - + -dist/configPath.js->node_modules/findup-sync - - +dist/index.js->node_modules/fast-glob + + - - -dist/configPath.d.ts - - -configPath.d.ts -0% - - - - - -dist/index.d.ts - - -index.d.ts -100% + + +fs + + +fs - + -dist/index.d.ts->dist/config.js - - - - - -dist/index.d.ts->dist/configPath.js - - - - - -dist/paths.js - - -paths.js -83% - - - - - -dist/index.d.ts->dist/paths.js - - - - - -dist/paths.js->dist/config.js - - - - - -dist/paths.js->dist/configPath.js - - - - - -dist/paths.js->node_modules/@babel/runtime-corejs3 - - - - - -dist/paths.js->fs - - - - - -node_modules/fast-glob - - - - - -fast-glob - - - - - -dist/paths.js->node_modules/fast-glob - - +dist/index.js->fs + + - + path - - -path + + +path - - -dist/paths.js->path - - + + +dist/index.js->path + + - - -dist/index.js - - -index.js -100% + + +node_modules/string-env-interpolation + + + + + +string-env-interpolation - - -dist/index.js->dist/config.js - - - - - -dist/index.js->dist/configPath.js - - - - - -dist/index.js->node_modules/@babel/runtime-corejs3 - - - - - -dist/index.js->dist/paths.js - - - - - -dist/paths.d.ts - - -paths.d.ts -0% - - + + +dist/index.js->node_modules/string-env-interpolation + + diff --git a/packages/project-config/dependency-graph-src.svg b/packages/project-config/dependency-graph-src.svg index acbedc501f55..15ed4378425d 100644 --- a/packages/project-config/dependency-graph-src.svg +++ b/packages/project-config/dependency-graph-src.svg @@ -4,32 +4,32 @@ - - + + dependency-cruiser output - + cluster_node_modules - -node_modules + +node_modules cluster_node_modules/@iarna - -@iarna + +@iarna cluster_src - -src + +src fs - -fs + +fs @@ -37,11 +37,11 @@ node_modules/@iarna/toml - - - - -toml + + + + +toml @@ -49,11 +49,11 @@ node_modules/deepmerge - - - - -deepmerge + + + + +deepmerge @@ -61,170 +61,186 @@ node_modules/fast-glob - - - - -fast-glob - - - - - -node_modules/findup-sync - - - - - -findup-sync + + + + +fast-glob - + node_modules/string-env-interpolation - - - - - -string-env-interpolation + + + + + +string-env-interpolation - + path - - -path + + +path - + src/config.ts - - -config.ts -71% + + +config.ts +71% src/config.ts->fs - - + + src/config.ts->node_modules/@iarna/toml - - + + src/config.ts->node_modules/deepmerge - - + + src/config.ts->node_modules/string-env-interpolation - - + + - + src/configPath.ts - - -configPath.ts -25% + + +configPath.ts +25% src/config.ts->src/configPath.ts - - + + - + + +src/findUp.ts + + +findUp.ts +50% + + + + -src/configPath.ts->node_modules/findup-sync - - +src/configPath.ts->src/findUp.ts + + + + + +src/findUp.ts->fs + + + + + +src/findUp.ts->path + + src/index.ts - -index.ts -100% + +index.ts +100% - + src/index.ts->src/config.ts - - + + - + src/index.ts->src/configPath.ts - - + + + + + +src/index.ts->src/findUp.ts + + src/paths.ts - -paths.ts -83% + +paths.ts +83% - + src/index.ts->src/paths.ts - - + + - + src/paths.ts->fs - - + + - + src/paths.ts->node_modules/fast-glob - - + + - + src/paths.ts->path - - + + - + src/paths.ts->src/config.ts - - + + - + src/paths.ts->src/configPath.ts - - + + diff --git a/packages/project-config/package.json b/packages/project-config/package.json index 44abb60833cc..8c9bf917af90 100644 --- a/packages/project-config/package.json +++ b/packages/project-config/package.json @@ -16,11 +16,10 @@ ], "scripts": { "build": "yarn node ./build.mjs && run build:types", - "build:clean-dist": "rimraf 'dist/**/__tests__' --glob", "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,ts,tsx\" --ignore dist --exec \"yarn build\"", - "deps:dist": "depcruise dist --config --output-type dot | dot -T svg > dependency-graph-dist.svg", - "deps:src": "depcruise src --config --exclude \"^src/__tests__\" --output-type dot | dot -T svg > dependency-graph-src.svg", + "deps:dist": "depcruise dist --output-type dot | dot -T svg > dependency-graph-dist.svg", + "deps:src": "depcruise src --exclude \"^src/__tests__\" --output-type dot | dot -T svg > dependency-graph-src.svg", "prepublishOnly": "NODE_ENV=production yarn build", "test": "jest src", "test:watch": "run test --watch" @@ -29,12 +28,11 @@ "@iarna/toml": "2.2.5", "deepmerge": "4.3.1", "fast-glob": "3.2.12", - "findup-sync": "5.0.0", "string-env-interpolation": "1.0.1" }, "devDependencies": { - "@types/findup-sync": "4.0.2", "dependency-cruiser": "13.0.1", + "esbuild": "0.17.19", "jest": "29.5.0", "rimraf": "5.0.1", "typescript": "5.0.4" diff --git a/packages/project-config/src/configPath.ts b/packages/project-config/src/configPath.ts index 293abb08ab2d..521167d2b2e3 100644 --- a/packages/project-config/src/configPath.ts +++ b/packages/project-config/src/configPath.ts @@ -1,4 +1,4 @@ -import findUp from 'findup-sync' +import { findUp } from './findUp' const CONFIG_FILE_NAME = 'redwood.toml' @@ -8,7 +8,7 @@ const CONFIG_FILE_NAME = 'redwood.toml' export const getConfigPath = ( cwd: string = process.env.RWJS_CWD ?? process.cwd() ): string => { - const configPath = findUp(CONFIG_FILE_NAME, { cwd }) + const configPath = findUp(CONFIG_FILE_NAME, cwd) if (!configPath) { throw new Error( `Could not find a "${CONFIG_FILE_NAME}" file, are you sure you're in a Redwood project?` diff --git a/packages/project-config/src/findUp.ts b/packages/project-config/src/findUp.ts new file mode 100644 index 000000000000..606a7ff62876 --- /dev/null +++ b/packages/project-config/src/findUp.ts @@ -0,0 +1,25 @@ +import fs from 'fs' +import path from 'path' + +/** + * Find a file by walking up parent directories. + */ +export function findUp( + file: string, + startingDirectory: string = process.cwd() +): string | null { + const possibleFilepath = path.join(startingDirectory, file) + + if (fs.existsSync(possibleFilepath)) { + return possibleFilepath + } + + const parentDirectory = path.dirname(startingDirectory) + + // If we've reached the root directory, there's no file to be found. + if (parentDirectory === startingDirectory) { + return null + } + + return findUp(file, parentDirectory) +} diff --git a/packages/project-config/src/index.ts b/packages/project-config/src/index.ts index 179c04ecaa93..ae6da932ae6e 100644 --- a/packages/project-config/src/index.ts +++ b/packages/project-config/src/index.ts @@ -1,3 +1,4 @@ export * from './config' export * from './configPath' export * from './paths' +export * from './findUp' diff --git a/packages/structure/package.json b/packages/structure/package.json index c5aec8fa82ca..87187e120846 100644 --- a/packages/structure/package.json +++ b/packages/structure/package.json @@ -41,7 +41,6 @@ "dotenv-defaults": "5.0.2", "enquirer": "2.3.6", "fast-glob": "3.2.12", - "findup-sync": "5.0.0", "graphql": "16.6.0", "lazy-get-decorator": "2.2.1", "line-column": "1.0.2", diff --git a/yarn.lock b/yarn.lock index b4495033ada8..559b395eb151 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6982,7 +6982,6 @@ __metadata: envinfo: 7.8.1 execa: 5.1.1 fast-glob: 3.2.12 - findup-sync: 5.0.0 fs-extra: 11.1.1 humanize-string: 2.1.0 jest: 29.5.0 @@ -7023,8 +7022,8 @@ __metadata: "@babel/runtime-corejs3": 7.21.5 "@babel/traverse": 7.21.5 "@iarna/toml": 2.2.5 + "@redwoodjs/project-config": 5.0.0 "@types/babel__core": 7.20.0 - "@types/findup-sync": 4.0.2 "@types/fs-extra": 11.0.1 "@types/jest": 29.5.1 "@types/jscodeshift": 0.11.6 @@ -7037,7 +7036,6 @@ __metadata: deepmerge: 4.3.1 execa: 5.1.1 fast-glob: 3.2.12 - findup-sync: 5.0.0 fs-extra: 11.1.1 graphql: 16.6.0 jest: 29.5.0 @@ -7270,7 +7268,6 @@ __metadata: "@redwoodjs/project-config": 5.0.0 "@types/babel-plugin-tester": 9.0.5 "@types/babel__core": 7.20.0 - "@types/findup-sync": 4.0.2 "@types/fs-extra": 11.0.1 babel-plugin-graphql-tag: 3.3.0 babel-plugin-polyfill-corejs3: 0.8.1 @@ -7280,7 +7277,6 @@ __metadata: deepmerge: 4.3.1 esbuild: 0.17.19 fast-glob: 3.2.12 - findup-sync: 5.0.0 fs-extra: 11.1.1 graphql: 16.6.0 graphql-tag: 2.12.6 @@ -7334,11 +7330,10 @@ __metadata: resolution: "@redwoodjs/project-config@workspace:packages/project-config" dependencies: "@iarna/toml": 2.2.5 - "@types/findup-sync": 4.0.2 deepmerge: 4.3.1 dependency-cruiser: 13.0.1 + esbuild: 0.17.19 fast-glob: 3.2.12 - findup-sync: 5.0.0 jest: 29.5.0 rimraf: 5.0.1 string-env-interpolation: 1.0.1 @@ -7406,7 +7401,6 @@ __metadata: dotenv-defaults: 5.0.2 enquirer: 2.3.6 fast-glob: 3.2.12 - findup-sync: 5.0.0 graphql: 16.6.0 jest: 29.5.0 lazy-get-decorator: 2.2.1 @@ -9370,13 +9364,6 @@ __metadata: languageName: node linkType: hard -"@types/braces@npm:*": - version: 3.0.1 - resolution: "@types/braces@npm:3.0.1" - checksum: 2052cf78c7378ceb692b823f743ac3a838b05f4c27f6eba3e5b6e298fd11d64322b1c7be1fa0eb53d99d9c6049202bf16a88ec1f40ebfd09e086b54eb69ff767 - languageName: node - linkType: hard - "@types/btoa-lite@npm:^1.0.0": version: 1.0.0 resolution: "@types/btoa-lite@npm:1.0.0" @@ -9523,15 +9510,6 @@ __metadata: languageName: node linkType: hard -"@types/findup-sync@npm:4.0.2": - version: 4.0.2 - resolution: "@types/findup-sync@npm:4.0.2" - dependencies: - "@types/micromatch": "*" - checksum: f7c169a5fa48aa0f5e4aba25cdff412aa1817f7b60c62a9c915325b852177431f1ecffcb29537799c438ecc192e87748aabf67b478d677cc2811a6732fbd7849 - languageName: node - linkType: hard - "@types/fs-extra@npm:11.0.1, @types/fs-extra@npm:^11.0.1": version: 11.0.1 resolution: "@types/fs-extra@npm:11.0.1" @@ -9842,15 +9820,6 @@ __metadata: languageName: node linkType: hard -"@types/micromatch@npm:*": - version: 4.0.2 - resolution: "@types/micromatch@npm:4.0.2" - dependencies: - "@types/braces": "*" - checksum: e557324460e658283778c77d0f8995ee95e371c4fd54474b3186e947486427cc4af66b841393304b65c09a7bb36710158260db7a7cf761384e1a9a728e82e6f4 - languageName: node - linkType: hard - "@types/mime-types@npm:2.1.1": version: 2.1.1 resolution: "@types/mime-types@npm:2.1.1" @@ -15667,13 +15636,6 @@ __metadata: languageName: node linkType: hard -"detect-file@npm:^1.0.0": - version: 1.0.0 - resolution: "detect-file@npm:1.0.0" - checksum: c782a5f992047944c39d337c82f5d1d21d65d1378986d46c354df9d9ec6d5f356bca0182969c11b08b9b8a7af8727b3c2d5a9fad0b022be4a3bf4c216f63ed07 - languageName: node - linkType: hard - "detect-indent@npm:^5.0.0": version: 5.0.0 resolution: "detect-indent@npm:5.0.0" @@ -17141,15 +17103,6 @@ __metadata: languageName: node linkType: hard -"expand-tilde@npm:^2.0.0, expand-tilde@npm:^2.0.2": - version: 2.0.2 - resolution: "expand-tilde@npm:2.0.2" - dependencies: - homedir-polyfill: ^1.0.1 - checksum: 205a60497422746d1c3acbc1d65bd609b945066f239a2b785e69a7a651ac4cbeb4e08555b1ea0023abbe855e6fcb5bbf27d0b371367fdccd303d4fb2b4d66845 - languageName: node - linkType: hard - "expect@npm:^29.0.0, expect@npm:^29.5.0": version: 29.5.0 resolution: "expect@npm:29.5.0" @@ -17809,18 +17762,6 @@ __metadata: languageName: node linkType: hard -"findup-sync@npm:5.0.0": - version: 5.0.0 - resolution: "findup-sync@npm:5.0.0" - dependencies: - detect-file: ^1.0.0 - is-glob: ^4.0.3 - micromatch: ^4.0.4 - resolve-dir: ^1.0.1 - checksum: bbdb8af8c86a0bde4445e2f738003b92e4cd2a4539a5b45199d0252f2f504aeaf19aeca1fac776c3632c60657b2659151e72c8ead29a79617459a57419a0920b - languageName: node - linkType: hard - "firebase-admin@npm:10.3.0": version: 10.3.0 resolution: "firebase-admin@npm:10.3.0" @@ -18746,30 +18687,6 @@ __metadata: languageName: node linkType: hard -"global-modules@npm:^1.0.0": - version: 1.0.0 - resolution: "global-modules@npm:1.0.0" - dependencies: - global-prefix: ^1.0.1 - is-windows: ^1.0.1 - resolve-dir: ^1.0.0 - checksum: 7d91ecf78d4fcbc966b2d89c1400df273afea795bc8cadf39857ee1684e442065621fd79413ff5fcd9e90c6f1b2dc0123e644fa0b7811f987fd54c6b9afad858 - languageName: node - linkType: hard - -"global-prefix@npm:^1.0.1": - version: 1.0.2 - resolution: "global-prefix@npm:1.0.2" - dependencies: - expand-tilde: ^2.0.2 - homedir-polyfill: ^1.0.1 - ini: ^1.3.4 - is-windows: ^1.0.1 - which: ^1.2.14 - checksum: d8037e300f1dc04d5d410d16afa662e71bfad22dcceba6c9727bb55cc273b8988ca940b3402f62e5392fd261dd9924a9a73a865ef2000219461f31f3fc86be06 - languageName: node - linkType: hard - "global@npm:^4.4.0": version: 4.4.0 resolution: "global@npm:4.4.0" @@ -28136,16 +28053,6 @@ __metadata: languageName: node linkType: hard -"resolve-dir@npm:^1.0.0, resolve-dir@npm:^1.0.1": - version: 1.0.1 - resolution: "resolve-dir@npm:1.0.1" - dependencies: - expand-tilde: ^2.0.0 - global-modules: ^1.0.0 - checksum: 8197ed13e4a51d9cd786ef6a09fc83450db016abe7ef3311ca39389b3e508d77c26fe0cf0483a9b407b8caa2764bb5ccc52cf6a017ded91492a416475a56066f - languageName: node - linkType: hard - "resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" @@ -32718,7 +32625,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^1.2.14, which@npm:^1.2.9": +"which@npm:^1.2.9": version: 1.3.1 resolution: "which@npm:1.3.1" dependencies: From ad4bf6dd55b85906820f6eec298753ed395c2913 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 02:13:55 +0000 Subject: [PATCH 26/32] chore(deps): update dependency @clerk/clerk-react to v4.16.2 (#8362) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../auth-providers/clerk/web/package.json | 4 +-- yarn.lock | 35 ++++++++++++------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/packages/auth-providers/clerk/web/package.json b/packages/auth-providers/clerk/web/package.json index da5bbd37fe7b..4e8081d0937e 100644 --- a/packages/auth-providers/clerk/web/package.json +++ b/packages/auth-providers/clerk/web/package.json @@ -29,7 +29,7 @@ "devDependencies": { "@babel/cli": "7.21.5", "@babel/core": "7.21.8", - "@clerk/clerk-react": "4.16.1", + "@clerk/clerk-react": "4.16.2", "@clerk/types": "3.38.0", "@types/react": "18.2.6", "jest": "29.5.0", @@ -37,7 +37,7 @@ "typescript": "5.0.4" }, "peerDependencies": { - "@clerk/clerk-react": "4.16.1" + "@clerk/clerk-react": "4.16.2" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/yarn.lock b/yarn.lock index 559b395eb151..1a6b48871218 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2122,17 +2122,17 @@ __metadata: languageName: node linkType: hard -"@clerk/clerk-react@npm:4.16.1": - version: 4.16.1 - resolution: "@clerk/clerk-react@npm:4.16.1" +"@clerk/clerk-react@npm:4.16.2": + version: 4.16.2 + resolution: "@clerk/clerk-react@npm:4.16.2" dependencies: - "@clerk/shared": ^0.16.1 - "@clerk/types": ^3.37.1 + "@clerk/shared": ^0.16.2 + "@clerk/types": ^3.38.1 swr: 1.3.0 tslib: 2.4.1 peerDependencies: react: ">=16" - checksum: 1288c8fe4aa70af6685b61770e6d443affbe16084cbe13598c45e009f8481181e12e8bb1df858cc445b30c0c34e91195e5bbd6db7678e040353fbd468617e744 + checksum: 460c53afa6774763f877240ccaf5c8d524f76e9c36fdbd19c0e60c1ce8420aeeebafa049b8446f4205f15a361a5aa5bf9be3ed2a3f663ff702915f491abf8256 languageName: node linkType: hard @@ -2153,18 +2153,18 @@ __metadata: languageName: node linkType: hard -"@clerk/shared@npm:^0.16.1": - version: 0.16.1 - resolution: "@clerk/shared@npm:0.16.1" +"@clerk/shared@npm:^0.16.2": + version: 0.16.2 + resolution: "@clerk/shared@npm:0.16.2" dependencies: glob-to-regexp: 0.4.1 peerDependencies: react: ">=16" - checksum: 5818970f52ec99cea3ca15379a2a103ebd64a67d29add79adbcc76a091c2b97608f5ad2352721d65b2f67519d44ffa52b13a1e12d7a5254a4f6daa7b455de213 + checksum: 88f684b0e81b2e016afa8a5917fbc8adb7c4623d6fc4c71316d674869d852b24d4c02fdebdf54e14915b2182cbf0cdb52e8fc7dfbcaefc1142604862668a0582 languageName: node linkType: hard -"@clerk/types@npm:3.38.0, @clerk/types@npm:^3.37.1": +"@clerk/types@npm:3.38.0": version: 3.38.0 resolution: "@clerk/types@npm:3.38.0" dependencies: @@ -2173,6 +2173,15 @@ __metadata: languageName: node linkType: hard +"@clerk/types@npm:^3.37.1, @clerk/types@npm:^3.38.1": + version: 3.38.1 + resolution: "@clerk/types@npm:3.38.1" + dependencies: + csstype: 3.1.1 + checksum: 608806b5438d0b316b109a9adf514a7c337c50023fccd7882440847bd0619efb9de40c05e91fead8fc23318a60c22607d9d5c10031b84db611f2309d02dc6e3b + languageName: node + linkType: hard + "@cnakazawa/watch@npm:^1.0.3": version: 1.0.4 resolution: "@cnakazawa/watch@npm:1.0.4" @@ -6613,7 +6622,7 @@ __metadata: "@babel/cli": 7.21.5 "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 - "@clerk/clerk-react": 4.16.1 + "@clerk/clerk-react": 4.16.2 "@clerk/types": 3.38.0 "@redwoodjs/auth": 5.0.0 "@types/react": 18.2.6 @@ -6622,7 +6631,7 @@ __metadata: react: 18.2.0 typescript: 5.0.4 peerDependencies: - "@clerk/clerk-react": 4.16.1 + "@clerk/clerk-react": 4.16.2 languageName: unknown linkType: soft From 06bf5581b0392bcfc96589142e1f57e3b84696c1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 07:13:16 +0000 Subject: [PATCH 27/32] chore(deps): update dependency @clerk/types to v3.38.1 (#8363) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/auth-providers/clerk/web/package.json | 2 +- yarn.lock | 13 ++----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/packages/auth-providers/clerk/web/package.json b/packages/auth-providers/clerk/web/package.json index 4e8081d0937e..1acbec4e0167 100644 --- a/packages/auth-providers/clerk/web/package.json +++ b/packages/auth-providers/clerk/web/package.json @@ -30,7 +30,7 @@ "@babel/cli": "7.21.5", "@babel/core": "7.21.8", "@clerk/clerk-react": "4.16.2", - "@clerk/types": "3.38.0", + "@clerk/types": "3.38.1", "@types/react": "18.2.6", "jest": "29.5.0", "react": "18.2.0", diff --git a/yarn.lock b/yarn.lock index 1a6b48871218..92b71e55a6af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2164,16 +2164,7 @@ __metadata: languageName: node linkType: hard -"@clerk/types@npm:3.38.0": - version: 3.38.0 - resolution: "@clerk/types@npm:3.38.0" - dependencies: - csstype: 3.1.1 - checksum: 7611703cd9dbfe2bc03fbc97ca1470c807d4cd8fff4ed3bc7af8cb9ff3f6b83ea578b24ba94fff16107c9e250399cceec5370e6969c2d19489a7b7549675bc7a - languageName: node - linkType: hard - -"@clerk/types@npm:^3.37.1, @clerk/types@npm:^3.38.1": +"@clerk/types@npm:3.38.1, @clerk/types@npm:^3.37.1, @clerk/types@npm:^3.38.1": version: 3.38.1 resolution: "@clerk/types@npm:3.38.1" dependencies: @@ -6623,7 +6614,7 @@ __metadata: "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 "@clerk/clerk-react": 4.16.2 - "@clerk/types": 3.38.0 + "@clerk/types": 3.38.1 "@redwoodjs/auth": 5.0.0 "@types/react": 18.2.6 core-js: 3.30.2 From 27e24cbce9668e8c3d59b25ec373ce4d8be1bf6c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 10:15:18 +0000 Subject: [PATCH 28/32] chore(deps): update dependency vite to v4.3.8 (#8355) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/studio/frontend/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/studio/frontend/yarn.lock b/packages/studio/frontend/yarn.lock index 18f512686092..9d9512cff2ed 100644 --- a/packages/studio/frontend/yarn.lock +++ b/packages/studio/frontend/yarn.lock @@ -4368,8 +4368,8 @@ __metadata: linkType: hard "vite@npm:^4.1.0": - version: 4.3.7 - resolution: "vite@npm:4.3.7" + version: 4.3.8 + resolution: "vite@npm:4.3.8" dependencies: esbuild: ^0.17.5 fsevents: ~2.3.2 @@ -4400,7 +4400,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 7d148052419840dfc2b650309924f841d333dfcf5da10d839c9af715da45b1313a771dbb0356145db4aa827e86eb9f7673daffeca9a90d24eade2d4f70d5dad6 + checksum: 7eb7e28b8485ee30ceb2a758ad816d741d21a0e377ca7cc98d1db0a8686076e6bf3e620767afe4d9c497fc4d5fa1fe5f95a422c24c61fd92ac5368a78af43b31 languageName: node linkType: hard From 81874812cb52322e0defbd5fa6183e833c19baf2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 14:39:26 +0000 Subject: [PATCH 29/32] chore(deps): update dependency octokit to v2.0.16 (#8370) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 104 +++++++++++++++++++++++++-------------------------- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/package.json b/package.json index e7b293834cda..a6d6d3f72ddc 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "npm-packlist": "7.0.4", "nx": "16.2.1", "nx-cloud": "16.0.5", - "octokit": "2.0.15", + "octokit": "2.0.16", "ora": "5.4.1", "prompts": "2.4.2", "rimraf": "5.0.1", diff --git a/yarn.lock b/yarn.lock index 92b71e55a6af..933c35153044 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5343,9 +5343,9 @@ __metadata: languageName: node linkType: hard -"@octokit/app@npm:^13.1.1": - version: 13.1.2 - resolution: "@octokit/app@npm:13.1.2" +"@octokit/app@npm:^13.1.3": + version: 13.1.4 + resolution: "@octokit/app@npm:13.1.4" dependencies: "@octokit/auth-app": ^4.0.8 "@octokit/auth-unauthenticated": ^3.0.0 @@ -5354,7 +5354,7 @@ __metadata: "@octokit/plugin-paginate-rest": ^6.0.0 "@octokit/types": ^9.0.0 "@octokit/webhooks": ^10.0.0 - checksum: 3127e8c95a8bf9ba50e5635dadfc7ae0fb9f0910bf411d2436fff95ffa239dab46331431f32b5a68c023c5c9e3e97738b5abaefc1e3f1f927e7be55f37e7b40c + checksum: c8e5b3d120c4e50b6c3009d1bb3024b48504a7515e0e6b8ca843e92b82de161df9784ee2955f79b6da756a68b130cb31d3b0d1a87c20af768c2a7dceb7a61956 languageName: node linkType: hard @@ -5436,9 +5436,9 @@ __metadata: languageName: node linkType: hard -"@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.0.4": - version: 4.2.0 - resolution: "@octokit/core@npm:4.2.0" +"@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.2.1": + version: 4.2.1 + resolution: "@octokit/core@npm:4.2.1" dependencies: "@octokit/auth-token": ^3.0.0 "@octokit/graphql": ^5.0.0 @@ -5447,7 +5447,7 @@ __metadata: "@octokit/types": ^9.0.0 before-after-hook: ^2.2.0 universal-user-agent: ^6.0.0 - checksum: 574abe80eb02dd0ff8253aba6f7b7b8cc1ac9c240d6e761ab4375579fdd36099acd515a7108853b0e0b9480691202035f308a8154d29d18a336a0847e95b273b + checksum: b21f60d1ceb8a1aa8cc1573718de2941aad1d2ca5c46ed4b6a2feec4830463efd32434e9452655455f6e6ea0a9fe030d4a09c1b7e0be7cd194afb51dade405e9 languageName: node linkType: hard @@ -5473,9 +5473,9 @@ __metadata: languageName: node linkType: hard -"@octokit/oauth-app@npm:^4.0.6, @octokit/oauth-app@npm:^4.0.7": - version: 4.2.0 - resolution: "@octokit/oauth-app@npm:4.2.0" +"@octokit/oauth-app@npm:^4.0.7, @octokit/oauth-app@npm:^4.2.1": + version: 4.2.2 + resolution: "@octokit/oauth-app@npm:4.2.2" dependencies: "@octokit/auth-oauth-app": ^5.0.0 "@octokit/auth-oauth-user": ^2.0.0 @@ -5486,7 +5486,7 @@ __metadata: "@types/aws-lambda": ^8.10.83 fromentries: ^1.3.1 universal-user-agent: ^6.0.0 - checksum: f26677d616e842413fde5a025f7c91bcdfa7c1918f1f496ee82623de8d2381261eefec7c510c1a63eef8e7d21972041a4aa1868d6a8b80e3970820cd54d54803 + checksum: d6caa25fc3188afdcf06aa883df88d89d9668ba3a4525162486113b7c98ab5a46e2640d05b4cefd929db7c4d62e967f737d287bb97be4f12632c152da68f9085 languageName: node linkType: hard @@ -5524,10 +5524,10 @@ __metadata: languageName: node linkType: hard -"@octokit/openapi-types@npm:^16.0.0": - version: 16.0.0 - resolution: "@octokit/openapi-types@npm:16.0.0" - checksum: 8d45fc0249e8ba0c0c1ef4de5ac2dddbb8f8b42b66383d58ab026b59282f908466d344a98ef0ff198b1d42ef1fae7e6f8b69ab88c11c955d3ac54426bf6c17d2 +"@octokit/openapi-types@npm:^17.1.2": + version: 17.2.0 + resolution: "@octokit/openapi-types@npm:17.2.0" + checksum: baec94b9c300171245d8b0592867ef96d3aa9cbb3261e961c5138e91894e165fffc421288d98f51031af12ab4149efb7ba597d79dee2e5b5a38962348528b1e5 languageName: node linkType: hard @@ -5549,14 +5549,14 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-paginate-rest@npm:^6.0.0": - version: 6.0.0 - resolution: "@octokit/plugin-paginate-rest@npm:6.0.0" +"@octokit/plugin-paginate-rest@npm:^6.0.0, @octokit/plugin-paginate-rest@npm:^6.1.0": + version: 6.1.0 + resolution: "@octokit/plugin-paginate-rest@npm:6.1.0" dependencies: - "@octokit/types": ^9.0.0 + "@octokit/types": ^9.2.2 peerDependencies: "@octokit/core": ">=4" - checksum: 5dbde9bc44d5b70f977d343af7eb65b1a3c6d7178dc52440e5dc565ba2bb772d84a43a235161ae022b59b6a48b089fab0d3aa58157e0636a12fbcead0dc19d84 + checksum: 32f2bf9b3fdd1e51718a7d92ca7d6eda06561d203a96dc12d5a36cd55368448bcd434423ce02340f4407a34102cb7ebb151cb4a9814ee9c511e8697a6e657604 languageName: node linkType: hard @@ -5581,39 +5581,39 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-rest-endpoint-methods@npm:^7.0.0": - version: 7.0.1 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.0.1" +"@octokit/plugin-rest-endpoint-methods@npm:^7.1.1": + version: 7.1.1 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.1.1" dependencies: - "@octokit/types": ^9.0.0 + "@octokit/types": ^9.2.2 deprecation: ^2.3.1 peerDependencies: "@octokit/core": ">=3" - checksum: 4cca2bcae506a8e7d3a9465dbfcac2546e6456a2389951c49617714f0c1152a315e3ad507ba82b6c096814e0bcf694bb17ee3e243926d7a00e6e3912071dd530 + checksum: 91358ef1827da81eb8688bde3a250babaa3e77585e26ccf8f46a99d93d12498652709856f4872c9d88abb5f19946c39b2ed65ac20dcf87ab97dcd5d7ea410261 languageName: node linkType: hard -"@octokit/plugin-retry@npm:^4.0.3": - version: 4.1.2 - resolution: "@octokit/plugin-retry@npm:4.1.2" +"@octokit/plugin-retry@npm:^4.1.3": + version: 4.1.3 + resolution: "@octokit/plugin-retry@npm:4.1.3" dependencies: "@octokit/types": ^9.0.0 bottleneck: ^2.15.3 peerDependencies: "@octokit/core": ">=3" - checksum: c06b1eb07f0573de14faa0f276b0585eab44da0215b0887310274d06f5e1bbd70cbd00aa09ee98468bc27a7e728b62f8ea0e470a9791707a85e3df21175406f6 + checksum: 375a31c5e52effb1cabdfb47bcf83b418d3555344eda682e9ccca619d8a0d741bf530845fe433405d852bbc9574e4e763d1161b1fa3d3af1e63a18ba77ec4c64 languageName: node linkType: hard -"@octokit/plugin-throttling@npm:^5.0.0": - version: 5.0.1 - resolution: "@octokit/plugin-throttling@npm:5.0.1" +"@octokit/plugin-throttling@npm:^5.2.2": + version: 5.2.2 + resolution: "@octokit/plugin-throttling@npm:5.2.2" dependencies: "@octokit/types": ^9.0.0 bottleneck: ^2.15.3 peerDependencies: "@octokit/core": ^4.0.0 - checksum: 7b0e68a822b46a1a8ca568998678697a51b9b03bc02d0bbfe28bb93f76ceca42e61bb31e058d30dc6ef643e4242039e499bb3fa0110c8de56e8bb1751ed0b1fd + checksum: 1e477539d5d50a00bc43b1ff6ab311604dfdd50bb8f3593c963bb99f0babee8760682c35cbc880ca6de441614a833ed9838befaa64c32765f8fbb6d14d25fd0a languageName: node linkType: hard @@ -5672,12 +5672,12 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^9.0.0": - version: 9.0.0 - resolution: "@octokit/types@npm:9.0.0" +"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.2": + version: 9.2.2 + resolution: "@octokit/types@npm:9.2.2" dependencies: - "@octokit/openapi-types": ^16.0.0 - checksum: 33e165e9ddaf7f1e8e94e3e48e2bb73f6193b1405887c382b5079450bebf67fe844784e3bb91c90acdb5718c3551936202de3ee98aaf7f7ec428a064032e158a + "@octokit/openapi-types": ^17.1.2 + checksum: c89f63946dd5d64dc2de2336cd984b0dd8ffbcc9938e0627efda37c3c50a87e034ad7c048867553b204fcc912ac52184bf64e78a99e3db5493247021cfd2d0b3 languageName: node linkType: hard @@ -25047,19 +25047,19 @@ __metadata: languageName: node linkType: hard -"octokit@npm:2.0.15": - version: 2.0.15 - resolution: "octokit@npm:2.0.15" +"octokit@npm:2.0.16": + version: 2.0.16 + resolution: "octokit@npm:2.0.16" dependencies: - "@octokit/app": ^13.1.1 - "@octokit/core": ^4.0.4 - "@octokit/oauth-app": ^4.0.6 - "@octokit/plugin-paginate-rest": ^6.0.0 - "@octokit/plugin-rest-endpoint-methods": ^7.0.0 - "@octokit/plugin-retry": ^4.0.3 - "@octokit/plugin-throttling": ^5.0.0 - "@octokit/types": ^9.0.0 - checksum: b82a92159d1fef53c25298cd33fa3d56874a32a9eddb1c55348dadce1303137a30c341e4ff6b48273c7d0619714588a935bf03ede25a9d95bc2fd759e40a1377 + "@octokit/app": ^13.1.3 + "@octokit/core": ^4.2.1 + "@octokit/oauth-app": ^4.2.1 + "@octokit/plugin-paginate-rest": ^6.1.0 + "@octokit/plugin-rest-endpoint-methods": ^7.1.1 + "@octokit/plugin-retry": ^4.1.3 + "@octokit/plugin-throttling": ^5.2.2 + "@octokit/types": ^9.2.2 + checksum: 7e87ead10b655f70d400984539a1952da9ab892d0ce4b13425131a1c3306d0ec572492f70c10ecd108399edeedba75a74e764f2ad567336036fed6fb813d76cc languageName: node linkType: hard @@ -28360,7 +28360,7 @@ __metadata: npm-packlist: 7.0.4 nx: 16.2.1 nx-cloud: 16.0.5 - octokit: 2.0.15 + octokit: 2.0.16 ora: 5.4.1 prompts: 2.4.2 rimraf: 5.0.1 From 553a06fa6da40211f7d4b095b85c014ae08859ab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 17:47:51 +0000 Subject: [PATCH 30/32] fix(deps): update dependency @clerk/clerk-sdk-node to v4.9.2 (#8364) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../auth-providers/clerk/api/package.json | 2 +- yarn.lock | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/auth-providers/clerk/api/package.json b/packages/auth-providers/clerk/api/package.json index 9747327811bf..3920b686f5b9 100644 --- a/packages/auth-providers/clerk/api/package.json +++ b/packages/auth-providers/clerk/api/package.json @@ -23,7 +23,7 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.21.5", - "@clerk/clerk-sdk-node": "4.9.1", + "@clerk/clerk-sdk-node": "4.9.2", "core-js": "3.30.2" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 933c35153044..1741b78e5060 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2107,18 +2107,18 @@ __metadata: languageName: node linkType: hard -"@clerk/backend@npm:^0.19.1": - version: 0.19.1 - resolution: "@clerk/backend@npm:0.19.1" +"@clerk/backend@npm:^0.19.2": + version: 0.19.2 + resolution: "@clerk/backend@npm:0.19.2" dependencies: - "@clerk/types": ^3.37.1 + "@clerk/types": ^3.38.1 "@peculiar/webcrypto": 1.4.1 "@types/node": 16.18.6 deepmerge: 4.2.2 node-fetch-native: 1.0.1 snakecase-keys: 5.4.4 tslib: 2.4.1 - checksum: 945dd6435117c3b5a9c891954f995de9fe2f4702b4cf291a7d61f4e4480b8f570a118467d33c21d75336dacaaeacf8fd40115c7e27e99b3c9ca292577b3fc222 + checksum: 0b91f8c0e1483915e952861855b061615f414d648ec02fe4bb5c3c8264d4c561d15fe244b44d958e760dcd208e793f8224d8a21b595f3e42deca3c09a761f481 languageName: node linkType: hard @@ -2136,12 +2136,12 @@ __metadata: languageName: node linkType: hard -"@clerk/clerk-sdk-node@npm:4.9.1": - version: 4.9.1 - resolution: "@clerk/clerk-sdk-node@npm:4.9.1" +"@clerk/clerk-sdk-node@npm:4.9.2": + version: 4.9.2 + resolution: "@clerk/clerk-sdk-node@npm:4.9.2" dependencies: - "@clerk/backend": ^0.19.1 - "@clerk/types": ^3.37.1 + "@clerk/backend": ^0.19.2 + "@clerk/types": ^3.38.1 "@types/cookies": 0.7.7 "@types/express": 4.17.14 "@types/node-fetch": 2.6.2 @@ -2149,7 +2149,7 @@ __metadata: cookie: 0.5.0 snakecase-keys: 3.2.1 tslib: 2.4.1 - checksum: 4ea96b2ee8360669ab4fbed41e8a296d6beea904c3368ea7ff4ab0ede3d557b3561e9c580b69eec431863a5ffc713f287b7fa64f2d9454bf6ef388de7e5d4ab5 + checksum: fc9bffb4e75b9f733bfe386c0fe7624bee5103da2173154f0a280f7be2532ccf870a1315a69985a08ab4b07ab1d38d126b1ff0ad808752123c453a1d094da136 languageName: node linkType: hard @@ -2164,7 +2164,7 @@ __metadata: languageName: node linkType: hard -"@clerk/types@npm:3.38.1, @clerk/types@npm:^3.37.1, @clerk/types@npm:^3.38.1": +"@clerk/types@npm:3.38.1, @clerk/types@npm:^3.38.1": version: 3.38.1 resolution: "@clerk/types@npm:3.38.1" dependencies: @@ -6582,7 +6582,7 @@ __metadata: "@babel/cli": 7.21.5 "@babel/core": 7.21.8 "@babel/runtime-corejs3": 7.21.5 - "@clerk/clerk-sdk-node": 4.9.1 + "@clerk/clerk-sdk-node": 4.9.2 "@redwoodjs/api": 5.0.0 "@types/aws-lambda": 8.10.115 core-js: 3.30.2 From 9e444433e5c49dde7fb19c0b412493e50f921227 Mon Sep 17 00:00:00 2001 From: Josh GM Walker <56300765+Josh-Walker-GM@users.noreply.github.com> Date: Fri, 19 May 2023 19:30:27 +0100 Subject: [PATCH 31/32] feat(cli): Experimental support for plugins (#8316) * Initial plugin loader * Update project-config test snapshot * Refactor to attempt to improve readability. Made CLI TOML options nested under experimental. Log errors for cache IO related tasks. Add checks to ensure package and version are listed in the toml objects. Print a warning if we did't load any plugins when running a command. * Another refactor and a slight update to the logic. We should only load the one plugin that is known to match the command via the cache. Load all plugins if we need yargs to show the help. * chore: correct spelling --------- Co-authored-by: Dominic Saadi --- packages/cli/src/index.js | 106 +++--- packages/cli/src/lib/packages.js | 23 ++ packages/cli/src/plugin.js | 302 ++++++++++++++++++ .../src/__tests__/config.test.ts | 4 + packages/project-config/src/config.ts | 14 + 5 files changed, 400 insertions(+), 49 deletions(-) create mode 100644 packages/cli/src/plugin.js diff --git a/packages/cli/src/index.js b/packages/cli/src/index.js index 1b8961a6b2b4..95c773fdc8ad 100644 --- a/packages/cli/src/index.js +++ b/packages/cli/src/index.js @@ -33,6 +33,7 @@ import * as typeCheckCommand from './commands/type-check' import * as upgradeCommand from './commands/upgrade' import { getPaths, findUp } from './lib' import * as updateCheck from './lib/updateCheck' +import { loadPlugins } from './plugin' // # Setting the CWD // @@ -97,54 +98,61 @@ config({ multiline: true, }) -// # Build the CLI and run it -yargs(hideBin(process.argv)) - // Config - .scriptName('rw') - .middleware( - [ - // We've already handled `cwd` above, but it may still be in `argv`. - // We don't need it anymore so let's get rid of it. - (argv) => { - delete argv.cwd - }, - telemetryMiddleware, - updateCheck.isEnabled() && updateCheck.updateCheckMiddleware, - ].filter(Boolean) - ) - .option('cwd', { - describe: 'Working directory to use (where `redwood.toml` is located)', - }) - .example( - 'yarn rw g page home /', - "\"Create a page component named 'Home' at path '/'\"" - ) - .demandCommand() - .strict() - - // Commands - .command(buildCommand) - .command(checkCommand) - .command(consoleCommand) - .command(dataMigrateCommand) - .command(deployCommand) - .command(destroyCommand) - .command(devCommand) - .command(execCommand) - .command(experimentalCommand) - .command(generateCommand) - .command(infoCommand) - .command(lintCommand) - .command(prerenderCommand) - .command(prismaCommand) - .command(recordCommand) - .command(serveCommand) - .command(setupCommand) - .command(storybookCommand) - .command(testCommand) - .command(tstojsCommand) - .command(typeCheckCommand) - .command(upgradeCommand) +async function runYargs() { + // # Build the CLI yargs instance + const yarg = yargs(hideBin(process.argv)) + // Config + .scriptName('rw') + .middleware( + [ + // We've already handled `cwd` above, but it may still be in `argv`. + // We don't need it anymore so let's get rid of it. + (argv) => { + delete argv.cwd + }, + telemetryMiddleware, + updateCheck.isEnabled() && updateCheck.updateCheckMiddleware, + ].filter(Boolean) + ) + .option('cwd', { + describe: 'Working directory to use (where `redwood.toml` is located)', + }) + .example( + 'yarn rw g page home /', + "\"Create a page component named 'Home' at path '/'\"" + ) + .demandCommand() + .strict() + + // Commands (Built in or pre-plugin support) + .command(buildCommand) + .command(checkCommand) + .command(consoleCommand) + .command(dataMigrateCommand) + .command(deployCommand) + .command(destroyCommand) + .command(devCommand) + .command(execCommand) + .command(experimentalCommand) + .command(generateCommand) + .command(infoCommand) + .command(lintCommand) + .command(prerenderCommand) + .command(prismaCommand) + .command(recordCommand) + .command(serveCommand) + .command(setupCommand) + .command(storybookCommand) + .command(testCommand) + .command(tstojsCommand) + .command(typeCheckCommand) + .command(upgradeCommand) + + // Load any CLI plugins + await loadPlugins(yarg) // Run - .parse() + yarg.parse() +} + +runYargs() diff --git a/packages/cli/src/lib/packages.js b/packages/cli/src/lib/packages.js index dff643d0ea23..0eb00c303984 100644 --- a/packages/cli/src/lib/packages.js +++ b/packages/cli/src/lib/packages.js @@ -5,6 +5,29 @@ import fs from 'fs-extra' import { getPaths } from './index' +/** + * Installs a module into a user's project. If the module is already installed, + * this function does nothing. + * + * @param {string} name The name of the module to install + * @param {string} version The version of the module to install + * @param {boolean} isDevDependency Whether to install as a devDependency or not + * @returns Whether the module was installed or not + */ +export async function installModule(name, version, isDevDependency = true) { + if (isModuleInstalled(name)) { + return false + } + await execa.command( + `yarn add ${isDevDependency ? '-D' : ''} ${name}@${version}`, + { + stdio: 'inherit', + cwd: getPaths().base, + } + ) + return true +} + /** * Installs a Redwood module into a user's project keeping the version consistent with that of \@redwoodjs/cli. * If the module is already installed, this function does nothing. diff --git a/packages/cli/src/plugin.js b/packages/cli/src/plugin.js new file mode 100644 index 000000000000..cedbba2bc839 --- /dev/null +++ b/packages/cli/src/plugin.js @@ -0,0 +1,302 @@ +import fs from 'fs' +import path from 'path' + +import chalk from 'chalk' + +import { getConfig, getPaths } from './lib' +import { installModule } from './lib/packages' + +/** + * The file inside .redwood which will contain cached plugin command mappings + */ +const PLUGIN_CACHE_FILENAME = 'command-cache.json' + +/** + * Attempts to load all CLI plugins as defined in the redwood.toml file + * + * @param {*} yargs A yargs instance + * @returns The yargs instance with plugins loaded + */ +export async function loadPlugins(yargs) { + const { plugins, autoInstall } = getConfig().experimental.cli + + const enabledPlugins = plugins.filter((p) => p.enabled ?? true) + + // Print warnings about invalid plugins + checkPluginListAndWarn(enabledPlugins) + + const redwoodPackages = new Set() + const thirdPartyPackages = new Set() + for (const plugin of enabledPlugins) { + // Skip invalid plugins + if (!plugin.package || !plugin.version) { + continue + } + // Skip non-scoped packages + if (!plugin.package.startsWith('@')) { + continue + } + if (plugin.package.startsWith('@redwoodjs/')) { + redwoodPackages.add(plugin.package) + } else { + thirdPartyPackages.add(plugin.package) + } + } + + // Order alphabetically but with @redwoodjs namespace first + const namespaces = Array.from( + thirdPartyPackages.map((p) => p.split('/')[0]) + ).sort() + if (redwoodPackages.size > 0) { + namespaces.unshift('@redwoodjs') + } + + // If the user is running a help command or no command was given + // we want to load all plugins for observability in the help output + const processArgv = process.argv.slice(2).join(' ') + const showRootHelp = + processArgv === '--help' || processArgv === '-h' || processArgv === '' + + // Filter the namespaces based on the command line args to + // reduce the number of plugins we need to load + const namespacesInUse = namespaces.filter( + (ns) => showRootHelp || processArgv.includes(ns) + ) + if (namespacesInUse.length === 0) { + // If no namespace is in use we're using the default @redwoodjs namespace which + // is just an empty string '' + namespacesInUse.push('@redwoodjs') + } + + // TODO: We should have some mechanism to fetch the cache from an online or precomputed + // source this will allow us to have a cache hit on the first run of a command + let pluginCommandCache = {} + try { + pluginCommandCache = JSON.parse( + fs.readFileSync( + path.join(getPaths().generated.base, PLUGIN_CACHE_FILENAME) + ) + ) + } catch (error) { + // If the cache file doesn't exist we can just ignore it and continue + if (error.code !== 'ENOENT') { + console.error(error) + } + } + + // We filter plugins based on the first word which depends on if a namespace is in use + const firstWord = process.argv[2]?.includes('@') + ? process.argv[3] + : process.argv[2] + const showNamespaceHelp = + firstWord === '--help' || firstWord === '-h' || firstWord === undefined + + for (const namespace of namespacesInUse) { + // Get all the plugins for this namespace + const namespacePlugins = new Set( + enabledPlugins.filter((p) => p.package.startsWith(namespace)) + ) + // Do nothing if there are no enabled plugins for this namespace + if (namespacePlugins.size === 0) { + continue + } + + // For help output we only show the root level commands which for third + // party plugins is just the namespace. No need to load the plugin for this. + if (showRootHelp && namespace !== '@redwoodjs') { + yargs.command({ + command: `${namespace} `, + describe: `${namespace} plugin commands`, + builder: () => {}, + handler: () => {}, + }) + continue + } + + const namespacePluginsToLoad = [] + if (showNamespaceHelp) { + // If we're showing the namespace help we want to load all plugins for observability + namespacePluginsToLoad.push(...namespacePlugins) + } else { + // Attempt to find a plugin that matches the first word + for (const namespacePlugin of namespacePlugins) { + const cacheEntry = pluginCommandCache[namespacePlugin.package] + if (cacheEntry !== undefined && cacheEntry.includes(firstWord)) { + namespacePluginsToLoad.push(namespacePlugin) + // Only one plugin can match the first word so we break here + break + } + } + } + + // If we didn't find any plugins to satisfy the first word we load all plugins so yargs can give + // an appropriate help message + if (namespacePluginsToLoad.length === 0) { + namespacePluginsToLoad.push(...namespacePlugins) + } + + // Load plugins for this namespace + const namespaceCommands = [] + for (const namespacePlugin of namespacePluginsToLoad) { + // Attempt to load the plugin + const plugin = await loadPluginPackage( + namespacePlugin.package, + namespacePlugin.version, + autoInstall + ) + + // Show an error if the plugin failed to load + if (!plugin) { + console.error( + chalk.red(`❌ Plugin "${namespacePlugin.package}" failed to load.`) + ) + continue + } + + // Add the plugin to the cache entry + pluginCommandCache[namespacePlugin.package] = [] + for (const command of plugin.commands) { + // Add the first word of the command to the cache entry + pluginCommandCache[namespacePlugin.package].push( + command.command.split(' ')[0] + ) + // Add any aliases of the command to the cache entry + pluginCommandCache[namespacePlugin.package].push( + ...(command.aliases || []) + ) + } + + // Add these commands to the namespace list + namespaceCommands.push(...plugin.commands) + } + + // Register all commands we loaded for this namespace + // If the namespace is @redwoodjs, we don't need to nest the commands under a namespace + if (namespace === '@redwoodjs') { + yargs.command(namespaceCommands).demandCommand() + } else { + yargs.command({ + command: `${namespace} `, + describe: `${namespace} plugin commands`, + builder: (yargs) => { + yargs.command(namespaceCommands).demandCommand() + }, + handler: () => {}, + }) + } + } + + // Cache the plugin-command mapping to optimise loading on the next invocation + try { + fs.writeFileSync( + path.join(getPaths().generated.base, PLUGIN_CACHE_FILENAME), + JSON.stringify(pluginCommandCache) + ) + } catch (error) { + console.error(error) + } + + return yargs +} + +/** + * Logs warnings for any plugins that have invalid definitions in the redwood.toml file + * + * @param {any[]} plugins An array of plugin objects read from the redwood.toml file + */ +function checkPluginListAndWarn(plugins) { + // Plugins must define a package and version + for (const plugin of plugins) { + if (!plugin.package) { + console.warn( + chalk.yellow(`⚠️ A plugin is missing a package, it cannot be loaded.`) + ) + } + if (!plugin.version) { + console.warn( + chalk.yellow( + `⚠️ Plugin "${plugin.package}" is missing a version, it cannot be loaded.` + ) + ) + } + } + + // Plugins should only occur once in the list + const pluginPackages = plugins + .map((p) => p.package) + .filter((p) => p !== undefined) + if (pluginPackages.length !== new Set(pluginPackages).size) { + console.warn( + chalk.yellow( + '⚠️ Duplicate plugin packages found in redwood.toml, duplicates will be ignored.' + ) + ) + } + + // Plugins should be published to npm under a scope which is used as the namespace + const namespaces = plugins.map((p) => p.package?.split('/')[0]) + namespaces.forEach((ns) => { + if (ns !== undefined && !ns.startsWith('@')) { + console.warn( + chalk.yellow( + `⚠️ Plugin "${ns}" is missing a scope/namespace, it will not be loaded.` + ) + ) + } + }) +} + +/** + * Attempts to load a plugin package and return it. Returns null if the plugin failed to load. + * + * @param {string} packageName The npm package name of the plugin + * @param {string} packageVersion The npm package version of the plugin + * @param {boolean} autoInstall Whether to automatically install the plugin package if it is not installed already + * @returns The plugin package or null if it failed to load + */ +async function loadPluginPackage(packageName, packageVersion, autoInstall) { + try { + return await import(packageName) + } catch (error) { + // TODO: Batch all missing plugins and install them in one go + if (error.code === 'MODULE_NOT_FOUND') { + if (!autoInstall) { + console.warn( + chalk.yellow( + `⚠️ Plugin "${packageName}" cannot be loaded because it is not installed and "autoInstall" is disabled.` + ) + ) + } else { + // Install the plugin + console.log(chalk.green(`Installing plugin "${packageName}"...`)) + const installed = await installPluginPackage( + packageName, + packageVersion + ) + if (installed) { + return await import(packageName) + } + } + } else { + console.error(error) + } + } + return null +} + +/** + * Attempts to install a plugin package. Installs the package as a dev dependency. + * + * @param {string} packageName The npm package name of the plugin + * @param {string} packageVersion The npm package version of the plugin + * @returns True if the plugin was installed successfully, false otherwise + */ +async function installPluginPackage(packageName, packageVersion) { + try { + await installModule(packageName, packageVersion, true) + return true + } catch (error) { + console.error(error) + return false + } +} diff --git a/packages/project-config/src/__tests__/config.test.ts b/packages/project-config/src/__tests__/config.test.ts index eb404bad4b00..89423d76debf 100644 --- a/packages/project-config/src/__tests__/config.test.ts +++ b/packages/project-config/src/__tests__/config.test.ts @@ -43,6 +43,10 @@ describe('getConfig', () => { "open": false, }, "experimental": { + "cli": { + "autoInstall": false, + "plugins": [], + }, "opentelemetry": { "apiSdk": undefined, "enabled": false, diff --git a/packages/project-config/src/config.ts b/packages/project-config/src/config.ts index baa7cdfed186..dcf775fcfc32 100644 --- a/packages/project-config/src/config.ts +++ b/packages/project-config/src/config.ts @@ -99,9 +99,19 @@ export interface Config { apiSdk?: string } studio: StudioConfig + cli: { + autoInstall: boolean + plugins: CLIPlugin[] + } } } +export interface CLIPlugin { + package: string + version: string + enabled?: boolean +} + // Note that web's includeEnvironmentVariables is handled in `webpack.common.js` // https://github.com/redwoodjs/redwood/blob/d51ade08118c17459cebcdb496197ea52485364a/packages/core/config/webpack.common.js#L19 const DEFAULT_CONFIG: Config = { @@ -157,6 +167,10 @@ const DEFAULT_CONFIG: Config = { }, }, }, + cli: { + autoInstall: false, + plugins: [], + }, }, } From 8c71f3f10f15c921dbf3b5198c997355acdcff3d Mon Sep 17 00:00:00 2001 From: Gilliard Macedo Date: Fri, 19 May 2023 19:50:02 -0300 Subject: [PATCH 32/32] Fallback to auth-provider header case (#8368) * Fallback to auth-provider header case * fix method casing * prefer ?? to || for undefined conditional * lint fix --------- Co-authored-by: Dominic Saadi --- packages/api/src/auth/index.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/api/src/auth/index.ts b/packages/api/src/auth/index.ts index 328817547eb5..94b704916fdd 100644 --- a/packages/api/src/auth/index.ts +++ b/packages/api/src/auth/index.ts @@ -6,10 +6,13 @@ import type { Decoded } from './parseJWT' export type { Decoded } // This is shared by `@redwoodjs/web` -const AUTH_PROVIDER_HEADER = 'auth-provider' +const AUTH_PROVIDER_HEADER = 'Auth-Provider' export const getAuthProviderHeader = (event: APIGatewayProxyEvent) => { - return event?.headers[AUTH_PROVIDER_HEADER] + return ( + event?.headers[AUTH_PROVIDER_HEADER] ?? + event?.headers[AUTH_PROVIDER_HEADER.toLowerCase()] + ) } export interface AuthorizationHeader {