From 8841e09155bb9ae052d4019fa3e4c8bcf631b903 Mon Sep 17 00:00:00 2001 From: Ben Gubler Date: Thu, 9 Feb 2023 15:44:06 -0700 Subject: [PATCH 1/9] Update version of npm-to-yarn --- packages/docusaurus-remark-plugin-npm2yarn/package.json | 2 +- packages/docusaurus-remark-plugin-npm2yarn/src/index.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/docusaurus-remark-plugin-npm2yarn/package.json b/packages/docusaurus-remark-plugin-npm2yarn/package.json index cb7b5030a90d..a895fed7a790 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/package.json +++ b/packages/docusaurus-remark-plugin-npm2yarn/package.json @@ -17,7 +17,7 @@ }, "license": "MIT", "dependencies": { - "npm-to-yarn": "^1.2.1", + "npm-to-yarn": "^1.3.0", "tslib": "^2.4.1", "unist-util-visit": "^2.0.3" }, diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts index 1da28fb7f243..39236a1537b4 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts @@ -6,7 +6,6 @@ */ import visit from 'unist-util-visit'; -// @ts-expect-error: this package provides CJS import npmToYarn from 'npm-to-yarn'; import type {Code, Content, Literal} from 'mdast'; import type {Plugin} from 'unified'; From c847966345eff7eb13e2ac46871c0159aef5cec6 Mon Sep 17 00:00:00 2001 From: Ben Gubler Date: Fri, 10 Feb 2023 14:48:09 -0700 Subject: [PATCH 2/9] chore: update yarn.lock --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index b4ed6ac70e1f..602b1809446d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11447,10 +11447,10 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -npm-to-yarn@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/npm-to-yarn/-/npm-to-yarn-1.2.1.tgz#ee88854d03ac930510c28a621985d800b51e76e0" - integrity sha512-ci3GjP40SKgZL2OOVW6B1z/3LdLNBsEtJupkYC/NQ8/Y0grfZZNNsR5DQdoy7zgL+FsKIXtnxMgrDjoMoJ40zQ== +npm-to-yarn@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/npm-to-yarn/-/npm-to-yarn-1.3.0.tgz#d8eebae5aaef44a26f451838ab78917a1ea5ee3a" + integrity sha512-07nTERZViiQvQJpVxhUyJgV5zLaMrAxW+nfSv/ELHe3Fv9bSSxRS1lTw9MplkuLtynQru3fvEm9r4a5+IE7j2A== npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" From ef2cdf219ec0ddd72b18c9bea9c9342719090d02 Mon Sep 17 00:00:00 2001 From: Ben Gubler Date: Mon, 20 Feb 2023 08:02:56 -0700 Subject: [PATCH 3/9] Update version to 2.0.0 --- packages/docusaurus-remark-plugin-npm2yarn/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docusaurus-remark-plugin-npm2yarn/package.json b/packages/docusaurus-remark-plugin-npm2yarn/package.json index a895fed7a790..188c5858f174 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/package.json +++ b/packages/docusaurus-remark-plugin-npm2yarn/package.json @@ -17,7 +17,7 @@ }, "license": "MIT", "dependencies": { - "npm-to-yarn": "^1.3.0", + "npm-to-yarn": "^2.0.0", "tslib": "^2.4.1", "unist-util-visit": "^2.0.3" }, From 14bcafeb810159c96f4b09f35d05717b2d7624fc Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 20 Feb 2023 22:08:20 +0100 Subject: [PATCH 4/9] feat(npm-to-yarn): add support for PnPm and custom converters --- .../__snapshots__/index.test.ts.snap | 151 +++++++++++++++++- .../src/__tests__/index.test.ts | 25 ++- .../src/index.ts | 55 +++++-- website/docs/installation.mdx | 32 +--- .../docs/migration/migration-automated.mdx | 6 +- website/docs/migration/migration-manual.mdx | 8 +- yarn.lock | 8 +- 7 files changed, 224 insertions(+), 61 deletions(-) diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap index b8e77588d05b..fa62162d9b0b 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap @@ -6,6 +6,7 @@ exports[`npm2yarn plugin does not re-import tabs components when already importe import TabItem from '@theme/TabItem'; + \`\`\`bash @@ -13,19 +14,30 @@ import TabItem from '@theme/TabItem'; \`\`\` + \`\`\`bash - $ yarn add --global docusaurus + $ yarn global add docusaurus +\`\`\` + + + + + +\`\`\`bash + $ pnpm add --global docusaurus \`\`\` + " `; exports[`npm2yarn plugin does not re-import tabs components when already imported below 1`] = ` " + \`\`\`bash @@ -33,13 +45,23 @@ exports[`npm2yarn plugin does not re-import tabs components when already importe \`\`\` + \`\`\`bash - $ yarn add --global docusaurus + $ yarn global add docusaurus +\`\`\` + + + + + +\`\`\`bash + $ pnpm add --global docusaurus \`\`\` + import Tabs from '@theme/Tabs'; @@ -63,11 +85,102 @@ npm install --save docusaurus-plugin-name " `; +exports[`npm2yarn plugin work with custom converter 1`] = ` +"import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Installing a plugin + +A plugin is usually a npm package, so you install them like other npm packages using npm. + + + + + +\`\`\`bash +npm install --save docusaurus-plugin-name +\`\`\` + + + + + +\`\`\`bash +turbo install --save docusaurus-plugin-name +\`\`\` + + + + +" +`; + +exports[`npm2yarn plugin work with pnpm converter 1`] = ` +"import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Installing a plugin + +A plugin is usually a npm package, so you install them like other npm packages using npm. + + + + + +\`\`\`bash +npm install --save docusaurus-plugin-name +\`\`\` + + + + + +\`\`\`bash +pnpm add docusaurus-plugin-name +\`\`\` + + + + +" +`; + +exports[`npm2yarn plugin work with yarn converter 1`] = ` +"import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Installing a plugin + +A plugin is usually a npm package, so you install them like other npm packages using npm. + + + + + +\`\`\`bash +npm install --save docusaurus-plugin-name +\`\`\` + + + + + +\`\`\`bash +yarn add docusaurus-plugin-name +\`\`\` + + + + +" +`; + exports[`npm2yarn plugin works on installation file 1`] = ` "import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; + \`\`\`bash @@ -75,13 +188,23 @@ import TabItem from '@theme/TabItem'; \`\`\` + \`\`\`bash - $ yarn add --global docusaurus + $ yarn global add docusaurus +\`\`\` + + + + + +\`\`\`bash + $ pnpm add --global docusaurus \`\`\` + " `; @@ -95,6 +218,7 @@ import TabItem from '@theme/TabItem'; A plugin is usually a npm package, so you install them like other npm packages using npm. + \`\`\`bash @@ -102,6 +226,7 @@ npm install --save docusaurus-plugin-name \`\`\` + \`\`\`bash @@ -109,6 +234,15 @@ yarn add docusaurus-plugin-name \`\`\` + + + +\`\`\`bash +pnpm add docusaurus-plugin-name +\`\`\` + + + " `; @@ -122,6 +256,7 @@ import TabItem from '@theme/TabItem'; A plugin is usually a npm package, so you install them like other npm packages using npm. + \`\`\`bash @@ -129,6 +264,7 @@ npm install --save docusaurus-plugin-name \`\`\` + \`\`\`bash @@ -136,6 +272,15 @@ yarn add docusaurus-plugin-name \`\`\` + + + +\`\`\`bash +pnpm add docusaurus-plugin-name +\`\`\` + + + " `; diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts index 2ed961332463..04f0480af6ac 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts @@ -11,7 +11,10 @@ import mdx from 'remark-mdx'; import remark from 'remark'; import npm2yarn from '../index'; -const processFixture = async (name: string, options?: {sync?: boolean}) => { +const processFixture = async ( + name: string, + options?: Parameters[0], +) => { const filePath = path.join(__dirname, '__fixtures__', `${name}.md`); const file = await vfile.read(filePath); const result = await remark().use(mdx).use(npm2yarn, options).process(file); @@ -55,4 +58,24 @@ describe('npm2yarn plugin', () => { expect(result).toMatchSnapshot(); }); + + it('work with yarn converter', async () => { + const result = await processFixture('plugin', {converters: ['yarn']}); + + expect(result).toMatchSnapshot(); + }); + + it('work with pnpm converter', async () => { + const result = await processFixture('plugin', {converters: ['pnpm']}); + + expect(result).toMatchSnapshot(); + }); + + it('work with custom converter', async () => { + const result = await processFixture('plugin', { + converters: [['Turbo', (code) => code.replace(/npm/g, 'turbo')]], + }); + + expect(result).toMatchSnapshot(); + }); }); diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts index 39236a1537b4..3367d59c0f58 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts @@ -11,39 +11,62 @@ import type {Code, Content, Literal} from 'mdast'; import type {Plugin} from 'unified'; import type {Node, Parent} from 'unist'; +type CustomConverter = [name: string, cb: (npmCode: string) => string]; + type PluginOptions = { sync?: boolean; + converters?: (CustomConverter | 'yarn' | 'pnpm')[]; }; -// E.g. global install: 'npm i' -> 'yarn' -const convertNpmToYarn = (npmCode: string) => npmToYarn(npmCode, 'yarn'); - -const transformNode = (node: Code, isSync: boolean) => { - const groupIdProp = isSync ? ' groupId="npm2yarn"' : ''; - const npmCode = node.value; - const yarnCode = convertNpmToYarn(node.value); +function createTabItem( + code: string, + node: Code, + value: string, + label?: string, +) { return [ { type: 'jsx', - value: `\n`, + value: ``, }, { type: node.type, lang: node.lang, - value: npmCode, + value: code, }, { type: 'jsx', - value: '\n', + value: '', }, + ] as Content[]; +} + +const transformNode = ( + node: Code, + isSync: boolean, + converters: (CustomConverter | 'yarn' | 'pnpm')[], +) => { + const groupIdProp = isSync ? ' groupId="npm2yarn"' : ''; + const npmCode = node.value; + return [ { - type: node.type, - lang: node.lang, - value: yarnCode, + type: 'jsx', + value: ``, }, + ...createTabItem(npmCode, node, 'npm'), + ...converters.flatMap((converter) => + typeof converter === 'string' + ? createTabItem( + npmToYarn(npmCode, converter), + node, + converter, + converter === 'yarn' ? 'Yarn' : 'PnPm', + ) + : createTabItem(converter[1](npmCode), node, converter[0]), + ), { type: 'jsx', - value: '\n', + value: '', }, ] as Content[]; }; @@ -60,7 +83,7 @@ const nodeForImport: Literal = { }; const plugin: Plugin<[PluginOptions?]> = (options = {}) => { - const {sync = false} = options; + const {sync = false, converters = ['yarn', 'pnpm']} = options; return (root) => { let transformed = false as boolean; let alreadyImported = false as boolean; @@ -73,7 +96,7 @@ const plugin: Plugin<[PluginOptions?]> = (options = {}) => { while (index < node.children.length) { const child = node.children[index]!; if (matchNode(child)) { - const result = transformNode(child, sync); + const result = transformNode(child, sync, converters); node.children.splice(index, 1, ...result); index += result.length; transformed = true; diff --git a/website/docs/installation.mdx b/website/docs/installation.mdx index 77d6baab05dc..38d53f425d5e 100644 --- a/website/docs/installation.mdx +++ b/website/docs/installation.mdx @@ -55,38 +55,10 @@ npx create-docusaurus@latest my-website facebook You can also initialize a new project using your preferred project manager: -```mdx-code-block - - -``` - -```bash +```bash npm2yarn npm init docusaurus ``` -```mdx-code-block - - -``` - -```bash -yarn create docusaurus -``` - -```mdx-code-block - - -``` - -```bash -pnpm create docusaurus -``` - -```mdx-code-block - - -``` - Run `npx create-docusaurus@latest --help`, or check out its [API docs](./api/misc/create-docusaurus.mdx) for more information about all available flags. @@ -193,7 +165,7 @@ npm install To check that the update occurred successfully, run: -```bash npm2yarn +```bash npx docusaurus --version ``` diff --git a/website/docs/migration/migration-automated.mdx b/website/docs/migration/migration-automated.mdx index 65f95cfdaf5a..93c41ae8863f 100644 --- a/website/docs/migration/migration-automated.mdx +++ b/website/docs/migration/migration-automated.mdx @@ -38,10 +38,10 @@ npx @docusaurus/migrate migrate ./v1-website ./v2-website 3. To view your new website locally, go into your v2 website's directory and start your development server. -```bash +```bash npm2yarn cd ./v2-website -yarn install -yarn start +npm install +npm start ``` :::danger diff --git a/website/docs/migration/migration-manual.mdx b/website/docs/migration/migration-manual.mdx index 95a8c47d0465..49a7cdd1fce4 100644 --- a/website/docs/migration/migration-manual.mdx +++ b/website/docs/migration/migration-manual.mdx @@ -622,13 +622,13 @@ my-project Start the development server and fix any errors: -```bash +```bash npm2yarn cd website -yarn start +npm start ``` You can also try to build the site for production: -```bash -yarn build +```bash npm2yarn +npm run build ``` diff --git a/yarn.lock b/yarn.lock index 602b1809446d..219291d0fa70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11447,10 +11447,10 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -npm-to-yarn@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/npm-to-yarn/-/npm-to-yarn-1.3.0.tgz#d8eebae5aaef44a26f451838ab78917a1ea5ee3a" - integrity sha512-07nTERZViiQvQJpVxhUyJgV5zLaMrAxW+nfSv/ELHe3Fv9bSSxRS1lTw9MplkuLtynQru3fvEm9r4a5+IE7j2A== +npm-to-yarn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-to-yarn/-/npm-to-yarn-2.0.0.tgz#59c9c615eca3ba8920308a0b418007b73ffc7492" + integrity sha512-/IbjiJ7vqbxfxJxAZ+QI9CCRjnIbvGxn5KQcSY9xHh0lMKc/Sgqmm7yp7KPmd6TiTZX5/KiSBKlkGHo59ucZbg== npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" From 8d22204bdfbbbe9d758e979d15e8ed2f9409c3c7 Mon Sep 17 00:00:00 2001 From: Armano Date: Wed, 22 Feb 2023 00:03:17 +0100 Subject: [PATCH 5/9] feat(npm-to-yarn): change PnPm to pnpm --- .../src/__tests__/__snapshots__/index.test.ts.snap | 12 ++++++------ .../docusaurus-remark-plugin-npm2yarn/src/index.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap index fa62162d9b0b..2da7ceba3005 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap @@ -23,7 +23,7 @@ import TabItem from '@theme/TabItem'; - + \`\`\`bash $ pnpm add --global docusaurus @@ -54,7 +54,7 @@ exports[`npm2yarn plugin does not re-import tabs components when already importe - + \`\`\`bash $ pnpm add --global docusaurus @@ -133,7 +133,7 @@ npm install --save docusaurus-plugin-name - + \`\`\`bash pnpm add docusaurus-plugin-name @@ -197,7 +197,7 @@ import TabItem from '@theme/TabItem'; - + \`\`\`bash $ pnpm add --global docusaurus @@ -235,7 +235,7 @@ yarn add docusaurus-plugin-name - + \`\`\`bash pnpm add docusaurus-plugin-name @@ -273,7 +273,7 @@ yarn add docusaurus-plugin-name - + \`\`\`bash pnpm add docusaurus-plugin-name diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts index 3367d59c0f58..ee562f491d56 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/index.ts @@ -60,7 +60,7 @@ const transformNode = ( npmToYarn(npmCode, converter), node, converter, - converter === 'yarn' ? 'Yarn' : 'PnPm', + converter === 'yarn' ? 'Yarn' : converter, ) : createTabItem(converter[1](npmCode), node, converter[0]), ), From a48b90bc952a66b247af6ff9907786102a173d84 Mon Sep 17 00:00:00 2001 From: Armano Date: Wed, 22 Feb 2023 20:23:30 +0100 Subject: [PATCH 6/9] test(npm-to-yarn): add additional tests --- .../__tests__/__fixtures__/conversion-test.md | 16 ++ .../__snapshots__/index.test.ts.snap | 159 ++++++++++++++++++ .../src/__tests__/index.test.ts | 6 + 3 files changed, 181 insertions(+) create mode 100644 packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__fixtures__/conversion-test.md diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__fixtures__/conversion-test.md b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__fixtures__/conversion-test.md new file mode 100644 index 000000000000..b0bf7f08a52b --- /dev/null +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__fixtures__/conversion-test.md @@ -0,0 +1,16 @@ +```bash npm2yarn +npm run xxx -- --arg +``` + +```bash npm2yarn +npm install package +``` + +```bash npm2yarn +npm remove package-name +``` + +```bash npm2yarn +npm init docusaurus +npm init docusaurus@latest my-website classic +``` diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap index 2da7ceba3005..8a46aac675ad 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap @@ -247,6 +247,127 @@ pnpm add docusaurus-plugin-name " `; +exports[`npm2yarn plugin works with common commands 1`] = ` +"import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + + + +\`\`\`bash +npm run xxx -- --arg +\`\`\` + + + + + +\`\`\`bash +yarn xxx --arg +\`\`\` + + + + + +\`\`\`bash +pnpm run xxx -- --arg +\`\`\` + + + + + + + + + +\`\`\`bash +npm install package +\`\`\` + + + + + +\`\`\`bash +yarn add package +\`\`\` + + + + + +\`\`\`bash +pnpm add package +\`\`\` + + + + + + + + + +\`\`\`bash +npm remove package-name +\`\`\` + + + + + +\`\`\`bash +yarn remove package-name +\`\`\` + + + + + +\`\`\`bash +pnpm remove package-name +\`\`\` + + + + + + + + + +\`\`\`bash +npm init docusaurus +npm init docusaurus@latest my-website classic +\`\`\` + + + + + +\`\`\`bash +yarn create docusaurus +yarn create docusaurus@latest my-website classic +\`\`\` + + + + + +\`\`\`bash +pnpm create docusaurus +pnpm create docusaurus@latest my-website classic +\`\`\` + + + + +" +`; + exports[`npm2yarn plugin works with sync option 1`] = ` "import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -284,3 +405,41 @@ pnpm add docusaurus-plugin-name " `; + +exports[`npm2yarn plugin works with sync option 2`] = ` +"import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Installing a plugin + +A plugin is usually a npm package, so you install them like other npm packages using npm. + + + + + +\`\`\`bash +npm install --save docusaurus-plugin-name +\`\`\` + + + + + +\`\`\`bash +yarn add docusaurus-plugin-name +\`\`\` + + + + + +\`\`\`bash +pnpm add docusaurus-plugin-name +\`\`\` + + + + +" +`; diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts index 04f0480af6ac..84afcc23ae29 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/index.test.ts @@ -35,6 +35,12 @@ describe('npm2yarn plugin', () => { expect(result).toMatchSnapshot(); }); + it('works with common commands', async () => { + const result = await processFixture('conversion-test', {sync: true}); + + expect(result).toMatchSnapshot(); + }); + it('works with sync option', async () => { const result = await processFixture('plugin', {sync: true}); From 221ddc57551241930b4cd8b2653c641af90ab3c1 Mon Sep 17 00:00:00 2001 From: Armano Date: Wed, 22 Feb 2023 20:24:24 +0100 Subject: [PATCH 7/9] docs(npm-to-yarn): add configuration section to npm2yarn doc --- .../markdown-features-code-blocks.mdx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx b/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx index a0ac137ca4bb..fd6d65f7e522 100644 --- a/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx +++ b/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx @@ -772,6 +772,14 @@ module.exports = { remarkPlugins: [require('@docusaurus/remark-plugin-npm2yarn')], }, blog: { + // highlight-start + remarkPlugins: [ + [ + require('@docusaurus/remark-plugin-npm2yarn'), + {converters: ['pnpm']}, + ], + ], + // highlight-end // ... }, }, @@ -788,7 +796,12 @@ npm install @docusaurus/remark-plugin-npm2yarn ``` ```` -Using the `{sync: true}` option would make all tab choices synced. Because the choice is stored under the same namespace `npm2yarn`, different `npm2yarn` plugin instances would also sync their choices. +#### Configuration {#npm2yarn-remark-plugin-configuration} + +| Option | Type | Default | Description | +| --- | --- | --- | --- | +| `sync` | `boolean` | `false` | Whether to sync the selected converter across all code blocks. | +| `converters` | `array` | `'yarn'`, `'pnpm'` | The list of converters to use. The order of the converters is important, as the first converter will be used as the default choice. | ## Usage in JSX {#usage-in-jsx} From bc30745b0817a1008085eb31be6389e9cf9efcf9 Mon Sep 17 00:00:00 2001 From: Armano Date: Wed, 22 Feb 2023 20:34:54 +0100 Subject: [PATCH 8/9] test(npm-to-yarn): update snapshot --- .../__snapshots__/index.test.ts.snap | 38 ------------------- 1 file changed, 38 deletions(-) diff --git a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap index 8a46aac675ad..393470b31218 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/docusaurus-remark-plugin-npm2yarn/src/__tests__/__snapshots__/index.test.ts.snap @@ -405,41 +405,3 @@ pnpm add docusaurus-plugin-name " `; - -exports[`npm2yarn plugin works with sync option 2`] = ` -"import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -## Installing a plugin - -A plugin is usually a npm package, so you install them like other npm packages using npm. - - - - - -\`\`\`bash -npm install --save docusaurus-plugin-name -\`\`\` - - - - - -\`\`\`bash -yarn add docusaurus-plugin-name -\`\`\` - - - - - -\`\`\`bash -pnpm add docusaurus-plugin-name -\`\`\` - - - - -" -`; From 6138a745427e155500d4abc43a7368d06067fbd6 Mon Sep 17 00:00:00 2001 From: sebastienlorber Date: Fri, 24 Feb 2023 17:42:37 +0100 Subject: [PATCH 9/9] add little doc mention for custom converters --- .../README.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/packages/docusaurus-remark-plugin-npm2yarn/README.md b/packages/docusaurus-remark-plugin-npm2yarn/README.md index 5fc6a1705e15..055ca12d30cd 100644 --- a/packages/docusaurus-remark-plugin-npm2yarn/README.md +++ b/packages/docusaurus-remark-plugin-npm2yarn/README.md @@ -63,3 +63,30 @@ module.exports = { | Property | Type | Default | Description | | --- | --- | --- | --- | | `sync` | `boolean` | `false` | Syncing tab choices (Yarn and npm). See https://docusaurus.io/docs/markdown-features/#syncing-tab-choices for details. | +| `converters` | `array` | `'yarn'`, `'pnpm'` | The list of converters to use. The order of the converters is important, as the first converter will be used as the default choice. | + +## Custom converters + +In case you want to convert npm commands to something else than `yarn` or `pnpm`, you can use custom converters: + +```ts +type CustomConverter = [name: string, cb: (npmCode: string) => string]; +``` + +```ts +{ + remarkPlugins: [ + [ + require('@docusaurus/remark-plugin-npm2yarn'), + { + sync: true, + converters: [ + 'yarn', + 'pnpm', + ['Turbo', (code) => code.replace(/npm/g, 'turbo')], + ], + }, + ], + ]; +} +```