From 18909a4368a6b77593146a0cfb40285776074d87 Mon Sep 17 00:00:00 2001 From: Zack DeRose Date: Fri, 21 Oct 2022 11:23:13 -0700 Subject: [PATCH 1/5] feat(nxdev): redirects to send legacy tutorial links to new locations --- nx-dev/nx-dev/next.config.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/nx-dev/nx-dev/next.config.js b/nx-dev/nx-dev/next.config.js index 30d32d62b884f..e68538e656478 100644 --- a/nx-dev/nx-dev/next.config.js +++ b/nx-dev/nx-dev/next.config.js @@ -45,7 +45,17 @@ module.exports = withNx({ // Tutorials rules.push({ source: '/(l|latest)/(r|react)/tutorial/01-create-application', - destination: '/react-tutorial/01-create-application', + destination: '/react-tutorial/1-code-generation', + permanent: true, + }); + rules.push({ + source: '/react-tutorial/:slug(0.*)', // 0.* is regex for "anything starting with 0" + destination: '/react-tutorial/1-code-generation', + permanent: true, + }); + rules.push({ + source: '/react-tutorial/:slug(1[0|1|2]-.*)', // 1[0|1|2]-.* is regex for "anything starting with '10-', '11-', or '12-'" + destination: '/react-tutorial/1-code-generation', permanent: true, }); rules.push({ @@ -58,6 +68,16 @@ module.exports = withNx({ destination: '/node-tutorial/1-code-generation', permanent: true, }); + rules.push({ + source: '/node-tutorial/:slug(0.*)', // 0.* is regex for "anything starting with 0" + destination: '/node-tutorial/1-code-generation', // 1[0|1|2]-.* is regex for "anything starting with '10-', '11-', or '12-'" + permanent: true, + }); + rules.push({ + source: '/node-tutorial/:slug(1[0|1|2]-.*)', // 1[0|1|2].* is regex for " + destination: '/node-tutorial/1-code-generation', // 1[0|1|2]-.* is regex for "anything starting with '10-', '11-', or '12-'" + permanent: true, + }); // Storybook rules.push({ From 9b15048cb96a6068d7ce917bca66b3a095a82970 Mon Sep 17 00:00:00 2001 From: Zack DeRose Date: Fri, 21 Oct 2022 17:34:34 -0700 Subject: [PATCH 2/5] feat(nxdev): adding tutorial redirects to the redirect-rules.config.json file --- nx-dev/nx-dev/next.config.js | 29 ++++++----------- nx-dev/nx-dev/redirect-rules.config.js | 43 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/nx-dev/nx-dev/next.config.js b/nx-dev/nx-dev/next.config.js index e68538e656478..9e423e75677ec 100644 --- a/nx-dev/nx-dev/next.config.js +++ b/nx-dev/nx-dev/next.config.js @@ -48,16 +48,6 @@ module.exports = withNx({ destination: '/react-tutorial/1-code-generation', permanent: true, }); - rules.push({ - source: '/react-tutorial/:slug(0.*)', // 0.* is regex for "anything starting with 0" - destination: '/react-tutorial/1-code-generation', - permanent: true, - }); - rules.push({ - source: '/react-tutorial/:slug(1[0|1|2]-.*)', // 1[0|1|2]-.* is regex for "anything starting with '10-', '11-', or '12-'" - destination: '/react-tutorial/1-code-generation', - permanent: true, - }); rules.push({ source: '/(l|latest)/(a|angular)/tutorial/01-create-application', destination: '/angular-tutorial/01-create-application', @@ -68,16 +58,15 @@ module.exports = withNx({ destination: '/node-tutorial/1-code-generation', permanent: true, }); - rules.push({ - source: '/node-tutorial/:slug(0.*)', // 0.* is regex for "anything starting with 0" - destination: '/node-tutorial/1-code-generation', // 1[0|1|2]-.* is regex for "anything starting with '10-', '11-', or '12-'" - permanent: true, - }); - rules.push({ - source: '/node-tutorial/:slug(1[0|1|2]-.*)', // 1[0|1|2].* is regex for " - destination: '/node-tutorial/1-code-generation', // 1[0|1|2]-.* is regex for "anything starting with '10-', '11-', or '12-'" - permanent: true, - }); + for (const [source, destination] of Object.entries( + redirectRules.tutorialRedirects + )) { + rules.push({ + source, + destination, + permanent: true, + }); + } // Storybook rules.push({ diff --git a/nx-dev/nx-dev/redirect-rules.config.js b/nx-dev/nx-dev/redirect-rules.config.js index c7f857edbeb97..302b7c4fde6c8 100644 --- a/nx-dev/nx-dev/redirect-rules.config.js +++ b/nx-dev/nx-dev/redirect-rules.config.js @@ -321,6 +321,48 @@ const recipesUrls = { '/recipe/adding-to-monorepo': '/recipes/adopting-nx/adding-to-monorepo', }; +/** + * Tutorial Updates + */ +const oldReactTutorialPaths = [ + '/react-tutori23al/01-create-application', + '/react-tutorial/02-add-e2e-test', + '/react-tutorial/03-display-todos', + '/react-tutorial/04-connect-to-api', + '/react-tutorial/05-add-node-app', + '/react-tutorial/06-proxy', + '/react-tutorial/07-share-code', + '/react-tutorial/08-create-libs', + '/react-tutorial/09-dep-graph', + '/react-tutorial/10-computation-caching', + '/react-tutorial/11-test-affected-projects', + '/react-tutorial/12-summary', +]; +const reactRedirectDestination = '/react-tutorial/1-code-generation'; +const reactTutorialRedirects = oldReactTutorialPaths.reduce((acc, path) => { + acc[path] = reactRedirectDestination; + return acc; +}, {}); +const oldNodeTutorialPaths = [ + '/node-tutorial/01-create-application', + '/node-tutorial/02-display-todos', + '/node-tutorial/03-share-code', + '/node-tutorial/04-create-libs', + '/node-tutorial/05-dep-graph', + '/node-tutorial/06-computation-caching', + '/node-tutorial/07-test-affected-projects', + '/node-tutorial/08-summary', +]; +const nodeRedirectDestination = '/node-tutorial/1-code-generation'; +const nodeTutorialRedirects = oldNodeTutorialPaths.reduce((acc, path) => { + acc[path] = nodeRedirectDestination; + return acc; +}, {}); +const tutorialRedirects = Object.assign( + reactTutorialRedirects, + nodeTutorialRedirects +); + /** * Public export API */ @@ -331,4 +373,5 @@ module.exports = { overviewUrls, recipesUrls, schemaUrls, + tutorialRedirects, }; From 45a8d222d816ccaba41cfcf825f898cffc01933e Mon Sep 17 00:00:00 2001 From: Zack DeRose Date: Fri, 21 Oct 2022 17:39:19 -0700 Subject: [PATCH 3/5] feat(nxdev): adding tutorial redirect tests --- nx-dev/nx-dev/redirect-rules.config.spec.js | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/nx-dev/nx-dev/redirect-rules.config.spec.js b/nx-dev/nx-dev/redirect-rules.config.spec.js index 396c0f07a148a..f319dabef0940 100644 --- a/nx-dev/nx-dev/redirect-rules.config.spec.js +++ b/nx-dev/nx-dev/redirect-rules.config.spec.js @@ -9,6 +9,7 @@ describe('Redirect rules configuration', () => { ...redirectRules.guideUrls, ...redirectRules.overviewUrls, ...redirectRules.schemaUrls, + ...redirectRules.tutorialRedirects, }; for (let k of Object.keys(rules)) { @@ -16,4 +17,48 @@ describe('Redirect rules configuration', () => { } }); }); + + describe('Tutorial redirects', () => { + test('old react tutorial links', () => { + const oldReactUrls = [ + '/react-tutori23al/01-create-application', + '/react-tutorial/02-add-e2e-test', + '/react-tutorial/03-display-todos', + '/react-tutorial/04-connect-to-api', + '/react-tutorial/05-add-node-app', + '/react-tutorial/06-proxy', + '/react-tutorial/07-share-code', + '/react-tutorial/08-create-libs', + '/react-tutorial/09-dep-graph', + '/react-tutorial/10-computation-caching', + '/react-tutorial/11-test-affected-projects', + '/react-tutorial/12-summary', + ]; + + for (const url of oldReactUrls) { + expect(redirectRules.tutorialRedirects[url]).toEqual( + '/react-tutorial/1-code-generation' + ); + } + }); + + test('old node tutorial links', () => { + const oldNodeTutorialPaths = [ + '/node-tutorial/01-create-application', + '/node-tutorial/02-display-todos', + '/node-tutorial/03-share-code', + '/node-tutorial/04-create-libs', + '/node-tutorial/05-dep-graph', + '/node-tutorial/06-computation-caching', + '/node-tutorial/07-test-affected-projects', + '/node-tutorial/08-summary', + ]; + + for (const url of oldNodeTutorialPaths) { + expect(redirectRules.tutorialRedirects[url]).toEqual( + '/node-tutorial/1-code-generation' + ); + } + }); + }); }); From 2d9d318f10f8e25e6d793d640e38f61a7b4bf1af Mon Sep 17 00:00:00 2001 From: Zack DeRose Date: Fri, 21 Oct 2022 17:41:37 -0700 Subject: [PATCH 4/5] feat(nxdev): fixing l/r/tutorial redirect --- nx-dev/nx-dev/next.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nx-dev/nx-dev/next.config.js b/nx-dev/nx-dev/next.config.js index 9e423e75677ec..ee3d1d568ae0c 100644 --- a/nx-dev/nx-dev/next.config.js +++ b/nx-dev/nx-dev/next.config.js @@ -44,7 +44,7 @@ module.exports = withNx({ // Tutorials rules.push({ - source: '/(l|latest)/(r|react)/tutorial/01-create-application', + source: '/(l|latest)/(r|react)/tutorial/1-code-generation', destination: '/react-tutorial/1-code-generation', permanent: true, }); From 686aba5ba610e53ecea3079a94850243144217d5 Mon Sep 17 00:00:00 2001 From: Zack DeRose Date: Fri, 21 Oct 2022 19:56:26 -0700 Subject: [PATCH 5/5] feat(nxdev): fixing url typo --- nx-dev/nx-dev/redirect-rules.config.js | 2 +- nx-dev/nx-dev/redirect-rules.config.spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nx-dev/nx-dev/redirect-rules.config.js b/nx-dev/nx-dev/redirect-rules.config.js index 302b7c4fde6c8..8948b1fe1c97e 100644 --- a/nx-dev/nx-dev/redirect-rules.config.js +++ b/nx-dev/nx-dev/redirect-rules.config.js @@ -325,7 +325,7 @@ const recipesUrls = { * Tutorial Updates */ const oldReactTutorialPaths = [ - '/react-tutori23al/01-create-application', + '/react-tutorial/01-create-application', '/react-tutorial/02-add-e2e-test', '/react-tutorial/03-display-todos', '/react-tutorial/04-connect-to-api', diff --git a/nx-dev/nx-dev/redirect-rules.config.spec.js b/nx-dev/nx-dev/redirect-rules.config.spec.js index f319dabef0940..a4a05c118a08f 100644 --- a/nx-dev/nx-dev/redirect-rules.config.spec.js +++ b/nx-dev/nx-dev/redirect-rules.config.spec.js @@ -21,7 +21,7 @@ describe('Redirect rules configuration', () => { describe('Tutorial redirects', () => { test('old react tutorial links', () => { const oldReactUrls = [ - '/react-tutori23al/01-create-application', + '/react-tutorial/01-create-application', '/react-tutorial/02-add-e2e-test', '/react-tutorial/03-display-todos', '/react-tutorial/04-connect-to-api',