From 9ddb26e166724e4682974b8d13f40109a072c6a1 Mon Sep 17 00:00:00 2001 From: ESnark <31977180+ESnark@users.noreply.github.com> Date: Fri, 12 Jul 2024 21:57:03 +0900 Subject: [PATCH 1/3] add yarn pnp mode support --- src/commands/create/cli.ts | 16 +++++++++++++++- src/commands/create/types.ts | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/commands/create/cli.ts b/src/commands/create/cli.ts index da3fecc..635ba38 100644 --- a/src/commands/create/cli.ts +++ b/src/commands/create/cli.ts @@ -1,3 +1,5 @@ +import { execSync } from 'child_process'; + import prompts from 'prompts'; import { unflatten } from 'flat'; @@ -5,7 +7,7 @@ import { adapterOptions, packageManagerOptions, pluginOptions, databaseDriversForAdapter, environmentVariablesPrompts, } from './options.js'; import { CreateCommand } from './command.js'; -import { CreateCommandInput } from './types.js'; +import { CreateCommandInput, PackageManager } from './types.js'; const questions: prompts.PromptObject[] = [ { @@ -32,6 +34,18 @@ const questions: prompts.PromptObject[] = [ message: 'Select a package manager', choices: packageManagerOptions, }, + { + type: (prev) => { + if (prev !== PackageManager.Yarn) { + return null; + } + const isYarn1 = execSync('yarn --version', { stdio: 'pipe' }).toString().trim().startsWith('1'); + return isYarn1 ? null : 'confirm'; + }, + name: 'yarnPnp', + message: 'Would you like to enable Yarn PnP?', + initial: false, + }, { type: 'select', name: 'plugin', diff --git a/src/commands/create/types.ts b/src/commands/create/types.ts index 8d6b02a..0e10762 100644 --- a/src/commands/create/types.ts +++ b/src/commands/create/types.ts @@ -19,6 +19,7 @@ export enum AdminJSPlugin { export enum PackageManager { NPM = 'npm', Yarn = 'yarn', + PNPM = 'pnpm', } export enum DatabaseDriver { @@ -37,6 +38,7 @@ export interface CreateCommandInput { adapter: AdminJSAdapter; plugin: AdminJSPlugin; packageManager: PackageManager; + yarnPnp?: boolean; databaseDriver?: DatabaseDriver; env?: { DATABASE_URL: string; From 024d653bc29a9ae36cd3d92aa9094f26cb376c1d Mon Sep 17 00:00:00 2001 From: ESnark <31977180+ESnark@users.noreply.github.com> Date: Fri, 12 Jul 2024 21:57:16 +0900 Subject: [PATCH 2/3] add pnpm support --- src/commands/create/handlers/BaseSetup.handler.ts | 9 +++++++++ src/commands/create/options.ts | 1 + 2 files changed, 10 insertions(+) diff --git a/src/commands/create/handlers/BaseSetup.handler.ts b/src/commands/create/handlers/BaseSetup.handler.ts index bc0185f..bd0a858 100644 --- a/src/commands/create/handlers/BaseSetup.handler.ts +++ b/src/commands/create/handlers/BaseSetup.handler.ts @@ -17,6 +17,9 @@ export class BaseSetupHandler extends BaseCommandHandler { await this.modifyPackageName(); await this.copyDotFile('.eslintrc.cjs'); await this.copyDotFile('.prettierrc'); + if (this.options.packageManager === 'yarn') { + await this.setupYarnrc(!!this.options.yarnPnp); + } logger.info('Base template setup successful.'); } @@ -52,4 +55,10 @@ export class BaseSetupHandler extends BaseCommandHandler { destination, ); } + + protected async setupYarnrc(pnpEnabled: boolean) { + const yarnrcPath = path.join(process.cwd(), this.options.projectName, '.yarnrc.yml'); + const content = `nodeLinker: ${pnpEnabled ? 'pnp' : 'node-modules'}\n`; + await fs.writeFile(yarnrcPath, content, 'utf8'); + } } diff --git a/src/commands/create/options.ts b/src/commands/create/options.ts index 70724f8..ab70ca7 100644 --- a/src/commands/create/options.ts +++ b/src/commands/create/options.ts @@ -7,6 +7,7 @@ import { export const packageManagerOptions = [ { title: 'NPM', value: PackageManager.NPM }, { title: 'Yarn', value: PackageManager.Yarn }, + { title: 'PNPM', value: PackageManager.PNPM }, ]; export const pluginOptions = [ From 601c51b2fbd43e1dbd6fd62149eb87dbdfd74bf1 Mon Sep 17 00:00:00 2001 From: ESnark <31977180+ESnark@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:08:06 +0900 Subject: [PATCH 3/3] fix: resolve tiptap dependencies --- src/commands/create/handlers/BaseSetup.handler.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/commands/create/handlers/BaseSetup.handler.ts b/src/commands/create/handlers/BaseSetup.handler.ts index bd0a858..03831e3 100644 --- a/src/commands/create/handlers/BaseSetup.handler.ts +++ b/src/commands/create/handlers/BaseSetup.handler.ts @@ -58,7 +58,18 @@ export class BaseSetupHandler extends BaseCommandHandler { protected async setupYarnrc(pnpEnabled: boolean) { const yarnrcPath = path.join(process.cwd(), this.options.projectName, '.yarnrc.yml'); - const content = `nodeLinker: ${pnpEnabled ? 'pnp' : 'node-modules'}\n`; + let content = pnpEnabled ? 'nodeLinker: pnp' : 'nodeLinker: node-modules'; + + // An workaround for dependencies problem + // Ref: https://github.com/ueberdosis/tiptap/issues/3746 + if (pnpEnabled) { + content += ` +packageExtensions: + '@tiptap/starter-kit@^2.0.0': + peerDependencies: + '@tiptap/pm': '^2.0.0'`; + } + await fs.writeFile(yarnrcPath, content, 'utf8'); } }