create-junando-app 0.12.2 → 0.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.d.ts CHANGED
@@ -1 +1 @@
1
- export { };
1
+ export {}
package/dist/cli.js CHANGED
@@ -151,7 +151,8 @@ const targetDir = parsed.projectName;
151
151
  const projectName = basename(targetDir);
152
152
  if (targetDir.split(/[\\/]/).includes("..")) die(`Target path "${targetDir}" must not contain ".." segments.`);
153
153
  if (!isValidProjectName(projectName)) die(`Invalid project name "${projectName}". Use letters, digits, dots, hyphens, or underscores; must start with a letter or digit.`);
154
- const templateDir = fileURLToPath(new URL("../template/", import.meta.url));
154
+ const templateDirUrl = new URL("../template/", import.meta.url);
155
+ const templateDir = fileURLToPath(templateDirUrl);
155
156
  if (!existsSync(templateDir)) die(`Template directory not found at ${templateDir}. This is likely a broken install — try reinstalling create-junando-app.`);
156
157
  (async () => {
157
158
  try {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","names":["RESET"],"sources":["../src/helpers/parse-args.ts","../src/helpers/validate-name.ts","../src/helpers/rewrite-package-json.ts","../src/scaffold.ts","../src/helpers/next-steps.ts","../src/cli.ts"],"sourcesContent":["export interface ParsedArgs {\n projectName: string | undefined;\n help: boolean;\n version: boolean;\n unknownFlag: string | undefined;\n}\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n // argv[0] = node, argv[1] = script path, rest are user args\n const args = argv.slice(2);\n let projectName: string | undefined;\n let help = false;\n let version = false;\n let unknownFlag: string | undefined;\n\n for (const arg of args) {\n if (arg === '--help' || arg === '-h') {\n help = true;\n } else if (arg === '--version' || arg === '-v') {\n version = true;\n } else if (arg.startsWith('-')) {\n unknownFlag = arg;\n } else if (projectName === undefined) {\n projectName = arg;\n }\n }\n\n return { projectName, help, version, unknownFlag };\n}\n","/**\n * Validates an npm-compatible project name (basename of target dir).\n * Rules: letters/digits/dots/hyphens/underscores; must start with letter or digit.\n * Matches the practical subset of npm's package name spec we expose to users.\n */\nexport function isValidProjectName(name: string): boolean {\n return /^[a-z0-9][a-z0-9._-]*$/i.test(name);\n}\n","import { readFile, writeFile } from 'node:fs/promises';\n\nexport async function rewritePackageJson(\n path: string,\n mutate: (pkg: object) => object,\n): Promise<void> {\n const raw = await readFile(path, 'utf-8');\n const pkg = JSON.parse(raw) as object;\n const updated = mutate(pkg);\n await writeFile(path, JSON.stringify(updated, null, 2) + '\\n', 'utf-8');\n}\n","import { cp, readdir, rename, access, copyFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { rewritePackageJson } from './helpers/rewrite-package-json.js';\n\nexport interface ScaffoldOptions {\n targetDir: string;\n projectName: string;\n templateDir: string;\n skipInstall?: boolean;\n}\n\nexport async function scaffold({\n targetDir,\n projectName,\n templateDir,\n skipInstall = false,\n}: ScaffoldOptions): Promise<void> {\n // Check if target dir exists and is non-empty (only treat ENOENT as \"missing\")\n let entries: string[] = [];\n try {\n entries = await readdir(targetDir);\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code !== 'ENOENT') {\n throw err;\n }\n }\n if (entries.length > 0) {\n throw new Error(\n `Target directory \"${targetDir}\" already exists and is non-empty. Remove it first or choose a different name.`,\n );\n }\n\n // Copy template → target\n await cp(templateDir, targetDir, { recursive: true });\n\n // Rename app/_gitignore → app/.gitignore (workaround for npm stripping .gitignore on publish).\n // Lives in app/ because that's where the user runs `git init` after scaffolding.\n const renamedGitignore = join(targetDir, 'app', '_gitignore');\n try {\n await access(renamedGitignore);\n await rename(renamedGitignore, join(targetDir, 'app', '.gitignore'));\n } catch {\n // No app/_gitignore in template — fine.\n }\n\n // Copy app/.env.example → app/.env so `pnpm dev` (which uses --env-file=.env)\n // works out of the box. Do not overwrite if .env already exists.\n const envExample = join(targetDir, 'app', '.env.example');\n const envFile = join(targetDir, 'app', '.env');\n try {\n await access(envExample);\n let envExists = false;\n try {\n await access(envFile);\n envExists = true;\n } catch {\n // .env missing — that's the expected case.\n }\n if (!envExists) {\n await copyFile(envExample, envFile);\n }\n } catch {\n // No app/.env.example in template — fine.\n }\n\n // Rewrite app/package.json name\n const pkgPath = join(targetDir, 'app', 'package.json');\n await rewritePackageJson(pkgPath, (pkg) => ({ ...(pkg as object), name: projectName }));\n\n if (!skipInstall) {\n await runPnpmInstall(join(targetDir, 'app'));\n }\n}\n\nfunction runPnpmInstall(cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn('pnpm', ['install'], { cwd, stdio: 'inherit', shell: false });\n\n child.on('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'ENOENT') {\n reject(new Error('pnpm not found on PATH. Install pnpm (https://pnpm.io/installation) and try again.'));\n } else {\n reject(err);\n }\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`pnpm install exited with code ${String(code)}`));\n }\n });\n });\n}\n","const RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst GREEN = '\\x1b[32m';\nconst CYAN = '\\x1b[36m';\n\nexport function buildNextStepsMessage(targetDir: string): string {\n return [\n '',\n `${GREEN}${BOLD}✔ Scaffolded ${targetDir} successfully!${RESET}`,\n '',\n `${BOLD}Next steps:${RESET}`,\n ` ${CYAN}cd ${targetDir}/app${RESET}`,\n ` ${CYAN}pnpm dev${RESET}`,\n '',\n `Your ${CYAN}.env${RESET} was created from ${CYAN}.env.example${RESET} with placeholder values.`,\n `Edit it with your real LLM/Slack keys when you wire the full pipeline.`,\n '',\n `See ${targetDir}/app/README.md for more details.`,\n '',\n ].join('\\n');\n}\n","#!/usr/bin/env node\nimport { existsSync, readFileSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { parseArgs } from './helpers/parse-args.js';\nimport { isValidProjectName } from './helpers/validate-name.js';\nimport { scaffold } from './scaffold.js';\nimport { buildNextStepsMessage } from './helpers/next-steps.js';\n\nconst pkgUrl = new URL('../package.json', import.meta.url);\nconst pkg = JSON.parse(readFileSync(fileURLToPath(pkgUrl), 'utf8')) as { version: string };\nconst VERSION = pkg.version;\n\nconst USAGE = `\nUsage:\n pnpm create junando-app <project-name>\n npx create-junando-app <project-name>\n\nArguments:\n project-name Name of the new project directory\n\nOptions:\n --help, -h Show this help message\n --version, -v Show version number\n`.trim();\n\nconst RED = '\\x1b[31m';\nconst RESET = '\\x1b[0m';\n\nfunction die(msg: string): never {\n process.stderr.write(`${RED}Error: ${msg}${RESET}\\n`);\n process.exit(1);\n}\n\nconst parsed = parseArgs(process.argv);\n\nif (parsed.help) {\n console.log(USAGE);\n process.exit(0);\n}\n\nif (parsed.version) {\n console.log(VERSION);\n process.exit(0);\n}\n\nif (parsed.unknownFlag !== undefined) {\n die(`Unknown flag: ${parsed.unknownFlag}\\n\\n${USAGE}`);\n}\n\nif (parsed.projectName === undefined) {\n process.stderr.write(USAGE + '\\n');\n process.exit(1);\n}\n\nconst targetDir = parsed.projectName;\nconst projectName = basename(targetDir);\n\nif (targetDir.split(/[\\\\/]/).includes('..')) {\n die(`Target path \"${targetDir}\" must not contain \"..\" segments.`);\n}\n\nif (!isValidProjectName(projectName)) {\n die(\n `Invalid project name \"${projectName}\". ` +\n 'Use letters, digits, dots, hyphens, or underscores; must start with a letter or digit.',\n );\n}\n\nconst templateDirUrl = new URL('../template/', import.meta.url);\nconst templateDir = fileURLToPath(templateDirUrl);\n\nif (!existsSync(templateDir)) {\n die(\n `Template directory not found at ${templateDir}. ` +\n 'This is likely a broken install — try reinstalling create-junando-app.',\n );\n}\n\n(async () => {\n try {\n await scaffold({ targetDir, projectName, templateDir });\n process.stdout.write(buildNextStepsMessage(targetDir));\n } catch (err: unknown) {\n die(err instanceof Error ? err.message : String(err));\n }\n})();\n"],"mappings":";;;;;;;AAOA,SAAgB,UAAU,MAA4B;CAEpD,MAAM,OAAO,KAAK,MAAM,CAAC;CACzB,IAAI;CACJ,IAAI,OAAO;CACX,IAAI,UAAU;CACd,IAAI;CAEJ,KAAK,MAAM,OAAO,MAChB,IAAI,QAAQ,YAAY,QAAQ,MAC9B,OAAO;MACF,IAAI,QAAQ,eAAe,QAAQ,MACxC,UAAU;MACL,IAAI,IAAI,WAAW,GAAG,GAC3B,cAAc;MACT,IAAI,gBAAgB,KAAA,GACzB,cAAc;CAIlB,OAAO;EAAE;EAAa;EAAM;EAAS;CAAY;AACnD;;;;;;;;ACvBA,SAAgB,mBAAmB,MAAuB;CACxD,OAAO,0BAA0B,KAAK,IAAI;AAC5C;;;ACLA,eAAsB,mBACpB,MACA,QACe;CACf,MAAM,MAAM,MAAM,SAAS,MAAM,OAAO;CAExC,MAAM,UAAU,OADJ,KAAK,MAAM,GACE,CAAC;CAC1B,MAAM,UAAU,MAAM,KAAK,UAAU,SAAS,MAAM,CAAC,IAAI,MAAM,OAAO;AACxE;;;ACEA,eAAsB,SAAS,EAC7B,WACA,aACA,aACA,cAAc,SACmB;CAEjC,IAAI,UAAoB,CAAC;CACzB,IAAI;EACF,UAAU,MAAM,QAAQ,SAAS;CACnC,SAAS,KAAc;EAErB,IADc,IAA8B,SAC/B,UACX,MAAM;CAEV;CACA,IAAI,QAAQ,SAAS,GACnB,MAAM,IAAI,MACR,qBAAqB,UAAU,+EACjC;CAIF,MAAM,GAAG,aAAa,WAAW,EAAE,WAAW,KAAK,CAAC;CAIpD,MAAM,mBAAmB,KAAK,WAAW,OAAO,YAAY;CAC5D,IAAI;EACF,MAAM,OAAO,gBAAgB;EAC7B,MAAM,OAAO,kBAAkB,KAAK,WAAW,OAAO,YAAY,CAAC;CACrE,QAAQ,CAER;CAIA,MAAM,aAAa,KAAK,WAAW,OAAO,cAAc;CACxD,MAAM,UAAU,KAAK,WAAW,OAAO,MAAM;CAC7C,IAAI;EACF,MAAM,OAAO,UAAU;EACvB,IAAI,YAAY;EAChB,IAAI;GACF,MAAM,OAAO,OAAO;GACpB,YAAY;EACd,QAAQ,CAER;EACA,IAAI,CAAC,WACH,MAAM,SAAS,YAAY,OAAO;CAEtC,QAAQ,CAER;CAIA,MAAM,mBADU,KAAK,WAAW,OAAO,cACR,IAAI,SAAS;EAAE,GAAI;EAAgB,MAAM;CAAY,EAAE;CAEtF,IAAI,CAAC,aACH,MAAM,eAAe,KAAK,WAAW,KAAK,CAAC;AAE/C;AAEA,SAAS,eAAe,KAA4B;CAClD,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,QAAQ,MAAM,QAAQ,CAAC,SAAS,GAAG;GAAE;GAAK,OAAO;GAAW,OAAO;EAAM,CAAC;EAEhF,MAAM,GAAG,UAAU,QAA+B;GAChD,IAAI,IAAI,SAAS,UACf,uBAAO,IAAI,MAAM,oFAAoF,CAAC;QAEtG,OAAO,GAAG;EAEd,CAAC;EAED,MAAM,GAAG,UAAU,SAAS;GAC1B,IAAI,SAAS,GACX,QAAQ;QAER,uBAAO,IAAI,MAAM,iCAAiC,OAAO,IAAI,GAAG,CAAC;EAErE,CAAC;CACH,CAAC;AACH;;;AChGA,MAAMA,UAAQ;AACd,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,OAAO;AAEb,SAAgB,sBAAsB,WAA2B;CAC/D,OAAO;EACL;EACA,GAAG,QAAQ,KAAK,eAAe,UAAU,gBAAgBA;EACzD;EACA,GAAG,KAAK,aAAaA;EACrB,KAAK,KAAK,KAAK,UAAU,MAAMA;EAC/B,KAAK,KAAK,UAAUA;EACpB;EACA,QAAQ,KAAK,MAAMA,QAAM,oBAAoB,KAAK,cAAcA,QAAM;EACtE;EACA;EACA,OAAO,UAAU;EACjB;CACF,CAAC,CAAC,KAAK,IAAI;AACb;;;ACXA,MAAM,SAAS,IAAI,IAAI,mBAAmB,OAAO,KAAK,GAAG;AAEzD,MAAM,UADM,KAAK,MAAM,aAAa,cAAc,MAAM,GAAG,MAAM,CAC/C,CAAC,CAAC;AAEpB,MAAM,QAAQ;;;;;;;;;;;EAWZ,KAAK;AAEP,MAAM,MAAM;AACZ,MAAM,QAAQ;AAEd,SAAS,IAAI,KAAoB;CAC/B,QAAQ,OAAO,MAAM,GAAG,IAAI,SAAS,MAAM,MAAM,GAAG;CACpD,QAAQ,KAAK,CAAC;AAChB;AAEA,MAAM,SAAS,UAAU,QAAQ,IAAI;AAErC,IAAI,OAAO,MAAM;CACf,QAAQ,IAAI,KAAK;CACjB,QAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,OAAO,SAAS;CAClB,QAAQ,IAAI,OAAO;CACnB,QAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,OAAO,gBAAgB,KAAA,GACzB,IAAI,iBAAiB,OAAO,YAAY,MAAM,OAAO;AAGvD,IAAI,OAAO,gBAAgB,KAAA,GAAW;CACpC,QAAQ,OAAO,MAAM,QAAQ,IAAI;CACjC,QAAQ,KAAK,CAAC;AAChB;AAEA,MAAM,YAAY,OAAO;AACzB,MAAM,cAAc,SAAS,SAAS;AAEtC,IAAI,UAAU,MAAM,OAAO,CAAC,CAAC,SAAS,IAAI,GACxC,IAAI,gBAAgB,UAAU,kCAAkC;AAGlE,IAAI,CAAC,mBAAmB,WAAW,GACjC,IACE,yBAAyB,YAAY,0FAEvC;AAIF,MAAM,cAAc,cAAc,IADP,IAAI,gBAAgB,OAAO,KAAK,GACZ,CAAC;AAEhD,IAAI,CAAC,WAAW,WAAW,GACzB,IACE,mCAAmC,YAAY,yEAEjD;CAGD,YAAY;CACX,IAAI;EACF,MAAM,SAAS;GAAE;GAAW;GAAa;EAAY,CAAC;EACtD,QAAQ,OAAO,MAAM,sBAAsB,SAAS,CAAC;CACvD,SAAS,KAAc;EACrB,IAAI,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;CACtD;AACF,EAAA,CAAG"}
1
+ {"version":3,"file":"cli.js","names":["RESET"],"sources":["../src/helpers/parse-args.ts","../src/helpers/validate-name.ts","../src/helpers/rewrite-package-json.ts","../src/scaffold.ts","../src/helpers/next-steps.ts","../src/cli.ts"],"sourcesContent":["export interface ParsedArgs {\n projectName: string | undefined;\n help: boolean;\n version: boolean;\n unknownFlag: string | undefined;\n}\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n // argv[0] = node, argv[1] = script path, rest are user args\n const args = argv.slice(2);\n let projectName: string | undefined;\n let help = false;\n let version = false;\n let unknownFlag: string | undefined;\n\n for (const arg of args) {\n if (arg === '--help' || arg === '-h') {\n help = true;\n } else if (arg === '--version' || arg === '-v') {\n version = true;\n } else if (arg.startsWith('-')) {\n unknownFlag = arg;\n } else if (projectName === undefined) {\n projectName = arg;\n }\n }\n\n return { projectName, help, version, unknownFlag };\n}\n","/**\n * Validates an npm-compatible project name (basename of target dir).\n * Rules: letters/digits/dots/hyphens/underscores; must start with letter or digit.\n * Matches the practical subset of npm's package name spec we expose to users.\n */\nexport function isValidProjectName(name: string): boolean {\n return /^[a-z0-9][a-z0-9._-]*$/i.test(name);\n}\n","import { readFile, writeFile } from 'node:fs/promises';\n\nexport async function rewritePackageJson(\n path: string,\n mutate: (pkg: object) => object,\n): Promise<void> {\n const raw = await readFile(path, 'utf-8');\n const pkg = JSON.parse(raw) as object;\n const updated = mutate(pkg);\n await writeFile(path, JSON.stringify(updated, null, 2) + '\\n', 'utf-8');\n}\n","import { cp, readdir, rename, access, copyFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { rewritePackageJson } from './helpers/rewrite-package-json.js';\n\nexport interface ScaffoldOptions {\n targetDir: string;\n projectName: string;\n templateDir: string;\n skipInstall?: boolean;\n}\n\nexport async function scaffold({\n targetDir,\n projectName,\n templateDir,\n skipInstall = false,\n}: ScaffoldOptions): Promise<void> {\n // Check if target dir exists and is non-empty (only treat ENOENT as \"missing\")\n let entries: string[] = [];\n try {\n entries = await readdir(targetDir);\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code !== 'ENOENT') {\n throw err;\n }\n }\n if (entries.length > 0) {\n throw new Error(\n `Target directory \"${targetDir}\" already exists and is non-empty. Remove it first or choose a different name.`,\n );\n }\n\n // Copy template → target\n await cp(templateDir, targetDir, { recursive: true });\n\n // Rename app/_gitignore → app/.gitignore (workaround for npm stripping .gitignore on publish).\n // Lives in app/ because that's where the user runs `git init` after scaffolding.\n const renamedGitignore = join(targetDir, 'app', '_gitignore');\n try {\n await access(renamedGitignore);\n await rename(renamedGitignore, join(targetDir, 'app', '.gitignore'));\n } catch {\n // No app/_gitignore in template — fine.\n }\n\n // Copy app/.env.example → app/.env so `pnpm dev` (which uses --env-file=.env)\n // works out of the box. Do not overwrite if .env already exists.\n const envExample = join(targetDir, 'app', '.env.example');\n const envFile = join(targetDir, 'app', '.env');\n try {\n await access(envExample);\n let envExists = false;\n try {\n await access(envFile);\n envExists = true;\n } catch {\n // .env missing — that's the expected case.\n }\n if (!envExists) {\n await copyFile(envExample, envFile);\n }\n } catch {\n // No app/.env.example in template — fine.\n }\n\n // Rewrite app/package.json name\n const pkgPath = join(targetDir, 'app', 'package.json');\n await rewritePackageJson(pkgPath, (pkg) => ({ ...(pkg as object), name: projectName }));\n\n if (!skipInstall) {\n await runPnpmInstall(join(targetDir, 'app'));\n }\n}\n\nfunction runPnpmInstall(cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn('pnpm', ['install'], { cwd, stdio: 'inherit', shell: false });\n\n child.on('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'ENOENT') {\n reject(new Error('pnpm not found on PATH. Install pnpm (https://pnpm.io/installation) and try again.'));\n } else {\n reject(err);\n }\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`pnpm install exited with code ${String(code)}`));\n }\n });\n });\n}\n","const RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst GREEN = '\\x1b[32m';\nconst CYAN = '\\x1b[36m';\n\nexport function buildNextStepsMessage(targetDir: string): string {\n return [\n '',\n `${GREEN}${BOLD}✔ Scaffolded ${targetDir} successfully!${RESET}`,\n '',\n `${BOLD}Next steps:${RESET}`,\n ` ${CYAN}cd ${targetDir}/app${RESET}`,\n ` ${CYAN}pnpm dev${RESET}`,\n '',\n `Your ${CYAN}.env${RESET} was created from ${CYAN}.env.example${RESET} with placeholder values.`,\n `Edit it with your real LLM/Slack keys when you wire the full pipeline.`,\n '',\n `See ${targetDir}/app/README.md for more details.`,\n '',\n ].join('\\n');\n}\n","#!/usr/bin/env node\nimport { existsSync, readFileSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { parseArgs } from './helpers/parse-args.js';\nimport { isValidProjectName } from './helpers/validate-name.js';\nimport { scaffold } from './scaffold.js';\nimport { buildNextStepsMessage } from './helpers/next-steps.js';\n\nconst pkgUrl = new URL('../package.json', import.meta.url);\nconst pkg = JSON.parse(readFileSync(fileURLToPath(pkgUrl), 'utf8')) as { version: string };\nconst VERSION = pkg.version;\n\nconst USAGE = `\nUsage:\n pnpm create junando-app <project-name>\n npx create-junando-app <project-name>\n\nArguments:\n project-name Name of the new project directory\n\nOptions:\n --help, -h Show this help message\n --version, -v Show version number\n`.trim();\n\nconst RED = '\\x1b[31m';\nconst RESET = '\\x1b[0m';\n\nfunction die(msg: string): never {\n process.stderr.write(`${RED}Error: ${msg}${RESET}\\n`);\n process.exit(1);\n}\n\nconst parsed = parseArgs(process.argv);\n\nif (parsed.help) {\n console.log(USAGE);\n process.exit(0);\n}\n\nif (parsed.version) {\n console.log(VERSION);\n process.exit(0);\n}\n\nif (parsed.unknownFlag !== undefined) {\n die(`Unknown flag: ${parsed.unknownFlag}\\n\\n${USAGE}`);\n}\n\nif (parsed.projectName === undefined) {\n process.stderr.write(USAGE + '\\n');\n process.exit(1);\n}\n\nconst targetDir = parsed.projectName;\nconst projectName = basename(targetDir);\n\nif (targetDir.split(/[\\\\/]/).includes('..')) {\n die(`Target path \"${targetDir}\" must not contain \"..\" segments.`);\n}\n\nif (!isValidProjectName(projectName)) {\n die(\n `Invalid project name \"${projectName}\". ` +\n 'Use letters, digits, dots, hyphens, or underscores; must start with a letter or digit.',\n );\n}\n\nconst templateDirUrl = new URL('../template/', import.meta.url);\nconst templateDir = fileURLToPath(templateDirUrl);\n\nif (!existsSync(templateDir)) {\n die(\n `Template directory not found at ${templateDir}. ` +\n 'This is likely a broken install — try reinstalling create-junando-app.',\n );\n}\n\n(async () => {\n try {\n await scaffold({ targetDir, projectName, templateDir });\n process.stdout.write(buildNextStepsMessage(targetDir));\n } catch (err: unknown) {\n die(err instanceof Error ? err.message : String(err));\n }\n})();\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-junando-app",
3
- "version": "0.12.2",
3
+ "version": "0.12.3",
4
4
  "description": "Scaffold a new Junando alerting app from the express-end-to-end template",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -23,10 +23,10 @@
23
23
  "access": "public"
24
24
  },
25
25
  "devDependencies": {
26
- "@types/node": "^26.1.1",
27
- "tsdown": "^0.22.12",
26
+ "@types/node": "^26.4.1",
27
+ "tsdown": "^0.23.0",
28
28
  "typescript": "^7.0.2",
29
- "vitest": "^4.1.10"
29
+ "vitest": "^5.0.0"
30
30
  },
31
31
  "scripts": {
32
32
  "prebuild": "node scripts/sync-template.js",