diff --git a/packages/cli/__tests__/__snapshots__/cli.test.ts.snap b/packages/cli/__tests__/__snapshots__/cli.test.ts.snap index d2ce54fe4..bb9eb14e3 100644 --- a/packages/cli/__tests__/__snapshots__/cli.test.ts.snap +++ b/packages/cli/__tests__/__snapshots__/cli.test.ts.snap @@ -15,10 +15,8 @@ exports[`Inquirerer prompts user and correctly processes delayed input 2`] = ` exports[`Inquirerer prompts user and correctly processes delayed input 3`] = ` [ "", - "autocompleteField? -Argument--autocompleteFieldtype[autocomplete] ->Yourinput: -$ + "autocompleteField?(--autocompleteField) +> ", ">firstoption ", @@ -27,10 +25,8 @@ $ "firrythirdoption ", "", - "autocompleteField? -Argument--autocompleteFieldtype[autocomplete] ->Yourinput: -$ + "autocompleteField?(--autocompleteField) +> ", "firstoption ", @@ -39,10 +35,8 @@ $ "firrythirdoption ", "", - "autocompleteField? -Argument--autocompleteFieldtype[autocomplete] ->Yourinput: -$ + "autocompleteField?(--autocompleteField) +> ", "firstoption ", diff --git a/packages/cli/package.json b/packages/cli/package.json index 2a62b8771..4ffdc124a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -55,7 +55,7 @@ "@pgpmjs/server-utils": "workspace:^", "@pgpmjs/types": "workspace:^", "find-and-require-package-json": "^0.8.2", - "inquirerer": "^2.2.0", + "inquirerer": "^2.3.0", "js-yaml": "^4.1.0", "minimist": "^1.2.8", "pg-cache": "workspace:^", diff --git a/packages/csv-to-pg/package.json b/packages/csv-to-pg/package.json index f77619334..05ff466cb 100644 --- a/packages/csv-to-pg/package.json +++ b/packages/csv-to-pg/package.json @@ -46,7 +46,7 @@ "@pgsql/types": "^17.6.2", "@pgsql/utils": "^17.8.3", "csv-parser": "^2.3.3", - "inquirerer": "^2.0.3", + "inquirerer": "^2.3.0", "js-yaml": "^3.14.0", "pgsql-deparser": "^17.12.2" } diff --git a/pgpm/cli/package.json b/pgpm/cli/package.json index 1c9a9603e..0c06447bf 100644 --- a/pgpm/cli/package.json +++ b/pgpm/cli/package.json @@ -50,9 +50,9 @@ "@pgpmjs/logger": "workspace:^", "@pgpmjs/types": "workspace:^", "appstash": "^0.2.6", - "create-gen-app": "^0.6.0", + "create-gen-app": "^0.6.2", "find-and-require-package-json": "^0.8.2", - "inquirerer": "^2.2.0", + "inquirerer": "^2.3.0", "js-yaml": "^4.1.0", "minimist": "^1.2.8", "pg-cache": "workspace:^", diff --git a/pgpm/cli/src/commands/cache.ts b/pgpm/cli/src/commands/cache.ts index 7b2972932..32f4f5fae 100644 --- a/pgpm/cli/src/commands/cache.ts +++ b/pgpm/cli/src/commands/cache.ts @@ -1,10 +1,7 @@ -import { Logger } from '@pgpmjs/logger'; import { CLIOptions, Inquirerer } from 'inquirerer'; import { CacheManager } from 'create-gen-app'; import { cliExitWithError } from '../utils/cli-error'; -const log = new Logger('cache'); - const cacheUsageText = ` Cache Command: @@ -35,8 +32,7 @@ export default async ( const cacheManager = new CacheManager({ toolName }); cacheManager.clearAll(); - log.success(`Cleared template cache for "${toolName}".`); - log.debug(`Cache location: ${cacheManager.getReposDir()}`); + process.stdout.write(`Cleared template cache for "${toolName}".\n`); return argv; }; diff --git a/pgpm/cli/src/commands/init/module.ts b/pgpm/cli/src/commands/init/module.ts index a707530e6..2c693f059 100644 --- a/pgpm/cli/src/commands/init/module.ts +++ b/pgpm/cli/src/commands/init/module.ts @@ -1,9 +1,16 @@ +import fs from 'fs'; +import path from 'path'; + import { DEFAULT_TEMPLATE_REPO, DEFAULT_TEMPLATE_TOOL_NAME, PgpmPackage, sluggify } from '@pgpmjs/core'; -import { Logger } from '@pgpmjs/logger'; import { errors } from '@pgpmjs/types'; import { Inquirerer, OptionValue, Question } from 'inquirerer'; -const log = new Logger('module-init'); +const DEFAULT_MOTD = ` + | _ _ + === |.===. '\\-//\` + (o o) {}o o{} (o o) +ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo- +`; export default async function runModuleSetup( argv: Partial>, @@ -14,12 +21,12 @@ export default async function runModuleSetup( const project = new PgpmPackage(cwd); if (!project.workspacePath) { - log.error('Not inside a PGPM workspace.'); + process.stderr.write('Not inside a PGPM workspace.\n'); throw errors.NOT_IN_WORKSPACE({}); } if (!project.isInsideAllowedDirs(cwd) && !project.isInWorkspace() && !project.isParentOfAllowedDirs(cwd)) { - log.error('You must be inside the workspace root or a parent directory of modules (like packages/).'); + process.stderr.write('You must be inside the workspace root or a parent directory of modules (like packages/).\n'); throw errors.NOT_IN_WORKSPACE_MODULE({}); } @@ -74,6 +81,28 @@ export default async function runModuleSetup( noTty: Boolean((argv as any).noTty || argv['no-tty'] || process.env.CI === 'true') }); - log.success(`Initialized module: ${modName}`); + const isRoot = path.resolve(project.getWorkspacePath()!) === path.resolve(cwd); + const modulePath = isRoot + ? path.join(cwd, 'packages', modName) + : path.join(cwd, modName); + + const motdPath = path.join(modulePath, '.motd'); + let motd = DEFAULT_MOTD; + if (fs.existsSync(motdPath)) { + try { + motd = fs.readFileSync(motdPath, 'utf8'); + fs.unlinkSync(motdPath); + } catch { + // Ignore errors reading/deleting .motd + } + } + process.stdout.write(motd); + if (!motd.endsWith('\n')) { + process.stdout.write('\n'); + } + + const relPath = isRoot ? `packages/${modName}` : modName; + process.stdout.write(`\n✨ Enjoy!\n\ncd ./${relPath}\n`); + return { ...argv, ...answers }; } diff --git a/pgpm/cli/src/commands/init/workspace.ts b/pgpm/cli/src/commands/init/workspace.ts index 727097cb2..dacf9d3c3 100644 --- a/pgpm/cli/src/commands/init/workspace.ts +++ b/pgpm/cli/src/commands/init/workspace.ts @@ -1,9 +1,15 @@ +import fs from 'fs'; +import path from 'path'; + import { DEFAULT_TEMPLATE_REPO, DEFAULT_TEMPLATE_TOOL_NAME, scaffoldTemplate, sluggify } from '@pgpmjs/core'; -import { Logger } from '@pgpmjs/logger'; import { Inquirerer, Question, registerDefaultResolver } from 'inquirerer'; -import path from 'path'; -const log = new Logger('workspace-init'); +const DEFAULT_MOTD = ` + | _ _ + === |.===. '\\-//\` + (o o) {}o o{} (o o) +ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo- +`; export default async function runWorkspaceSetup( argv: Partial>, @@ -33,7 +39,7 @@ export default async function runWorkspaceSetup( const dirName = path.basename(targetPath); registerDefaultResolver('workspace.dirname', () => dirName); - const scaffoldResult = await scaffoldTemplate({ + await scaffoldTemplate({ type: 'workspace', outputDir: targetPath, templateRepo, @@ -49,11 +55,23 @@ export default async function runWorkspaceSetup( cwd }); - const cacheMessage = scaffoldResult.cacheUsed - ? `Using cached templates from ${scaffoldResult.templateDir}` - : `Fetched templates into ${scaffoldResult.templateDir}`; - log.success(cacheMessage); - log.success('Workspace templates rendered.'); + // Check for .motd file and print it, or use default ASCII art + const motdPath = path.join(targetPath, '.motd'); + let motd = DEFAULT_MOTD; + if (fs.existsSync(motdPath)) { + try { + motd = fs.readFileSync(motdPath, 'utf8'); + fs.unlinkSync(motdPath); + } catch { + // Ignore errors reading/deleting .motd + } + } + process.stdout.write(motd); + if (!motd.endsWith('\n')) { + process.stdout.write('\n'); + } + + process.stdout.write(`\n✨ Enjoy!\n\ncd ./${dirName}\n`); return { ...argv, ...answers, cwd: targetPath }; } diff --git a/pgpm/core/package.json b/pgpm/core/package.json index 3cc616c89..3d0ae19b9 100644 --- a/pgpm/core/package.json +++ b/pgpm/core/package.json @@ -51,7 +51,7 @@ "@pgpmjs/logger": "workspace:^", "@pgpmjs/server-utils": "workspace:^", "@pgpmjs/types": "workspace:^", - "create-gen-app": "^0.6.0", + "create-gen-app": "^0.6.2", "csv-to-pg": "^2.0.10", "glob": "^13.0.0", "komoji": "^0.7.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18d936e91..a8603fe06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1240,8 +1240,8 @@ importers: specifier: ^0.8.2 version: 0.8.2 inquirerer: - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^2.3.0 + version: 2.3.0 js-yaml: specifier: ^4.1.0 version: 4.1.1 @@ -1322,8 +1322,8 @@ importers: specifier: ^2.3.3 version: 2.3.5 inquirerer: - specifier: ^2.0.3 - version: 2.2.0 + specifier: ^2.3.0 + version: 2.3.0 js-yaml: specifier: ^3.14.0 version: 3.14.2 @@ -1427,14 +1427,14 @@ importers: specifier: ^0.2.6 version: 0.2.6 create-gen-app: - specifier: ^0.6.0 - version: 0.6.0 + specifier: ^0.6.2 + version: 0.6.2 find-and-require-package-json: specifier: ^0.8.2 version: 0.8.2 inquirerer: - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^2.3.0 + version: 2.3.0 js-yaml: specifier: ^4.1.0 version: 4.1.1 @@ -1504,8 +1504,8 @@ importers: specifier: workspace:^ version: link:../types/dist create-gen-app: - specifier: ^0.6.0 - version: 0.6.0 + specifier: ^0.6.2 + version: 0.6.2 csv-to-pg: specifier: ^2.0.10 version: 2.0.10(@babel/core@7.28.5) @@ -4590,8 +4590,8 @@ packages: typescript: optional: true - create-gen-app@0.6.0: - resolution: {integrity: sha512-hzl6vNeou0C8WKP9v+bPrkOK3DlBV/u+kI+dIHAbFjAnhwDgoiwH2Nwg0e4FHa7KUrPDSDgHxeyxHlCBHi1dYA==} + create-gen-app@0.6.2: + resolution: {integrity: sha512-XSM8Gjnp+UYtWkxRsZcozCX2e0JM8jHrrfuCsKkTN3UIRuEad6N9mFAd47gOHJ+qbH11ohn5+wHvCpykbSgSzA==} create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -5823,8 +5823,8 @@ packages: resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} engines: {node: '>=12.0.0'} - inquirerer@2.2.0: - resolution: {integrity: sha512-K2ORnpyWbx6uImQCwhIhHnZ9UGYiLia7Zxzef4LS5EgFUDdEYeEeTtd5Hwd/H+NgnAcoqJhvQ6yppNDpnFRW7w==} + inquirerer@2.3.0: + resolution: {integrity: sha512-ttH0PZjQUC9X+7yobnyohH/6KcRUiUGuUcjM6SxB4+bUeVx5na1/B+22YNB1MLj4KDMHdkzS6CFSzrSzD16QOw==} invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -12203,10 +12203,10 @@ snapshots: optionalDependencies: typescript: 5.9.3 - create-gen-app@0.6.0: + create-gen-app@0.6.2: dependencies: appstash: 0.2.6 - inquirerer: 2.2.0 + inquirerer: 2.3.0 create-require@1.1.1: {} @@ -13540,7 +13540,7 @@ snapshots: transitivePeerDependencies: - '@types/node' - inquirerer@2.2.0: + inquirerer@2.3.0: dependencies: deepmerge: 4.3.1 find-and-require-package-json: 0.8.2