create-junando-app 0.10.1 → 0.11.1

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
- #!/usr/bin/env node
1
+ export { };
package/dist/cli.js CHANGED
@@ -1,146 +1,121 @@
1
1
  #!/usr/bin/env node
2
-
3
- // src/cli.ts
4
- import { existsSync, readFileSync } from "fs";
5
- import { basename } from "path";
6
- import { fileURLToPath } from "url";
7
-
8
- // src/helpers/parse-args.ts
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { basename, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { access, copyFile, cp, readFile, readdir, rename, writeFile } from "node:fs/promises";
6
+ import { spawn } from "node:child_process";
7
+ //#region src/helpers/parse-args.ts
9
8
  function parseArgs(argv) {
10
- const args = argv.slice(2);
11
- let projectName2;
12
- let help = false;
13
- let version = false;
14
- let unknownFlag;
15
- for (const arg of args) {
16
- if (arg === "--help" || arg === "-h") {
17
- help = true;
18
- } else if (arg === "--version" || arg === "-v") {
19
- version = true;
20
- } else if (arg.startsWith("-")) {
21
- unknownFlag = arg;
22
- } else if (projectName2 === void 0) {
23
- projectName2 = arg;
24
- }
25
- }
26
- return { projectName: projectName2, help, version, unknownFlag };
9
+ const args = argv.slice(2);
10
+ let projectName;
11
+ let help = false;
12
+ let version = false;
13
+ let unknownFlag;
14
+ for (const arg of args) if (arg === "--help" || arg === "-h") help = true;
15
+ else if (arg === "--version" || arg === "-v") version = true;
16
+ else if (arg.startsWith("-")) unknownFlag = arg;
17
+ else if (projectName === void 0) projectName = arg;
18
+ return {
19
+ projectName,
20
+ help,
21
+ version,
22
+ unknownFlag
23
+ };
27
24
  }
28
-
29
- // src/helpers/validate-name.ts
25
+ //#endregion
26
+ //#region src/helpers/validate-name.ts
27
+ /**
28
+ * Validates an npm-compatible project name (basename of target dir).
29
+ * Rules: letters/digits/dots/hyphens/underscores; must start with letter or digit.
30
+ * Matches the practical subset of npm's package name spec we expose to users.
31
+ */
30
32
  function isValidProjectName(name) {
31
- return /^[a-z0-9][a-z0-9._-]*$/i.test(name);
33
+ return /^[a-z0-9][a-z0-9._-]*$/i.test(name);
32
34
  }
33
-
34
- // src/scaffold.ts
35
- import { cp, readdir, rename, access, copyFile } from "fs/promises";
36
- import { join } from "path";
37
- import { spawn } from "child_process";
38
-
39
- // src/helpers/rewrite-package-json.ts
40
- import { readFile, writeFile } from "fs/promises";
35
+ //#endregion
36
+ //#region src/helpers/rewrite-package-json.ts
41
37
  async function rewritePackageJson(path, mutate) {
42
- const raw = await readFile(path, "utf-8");
43
- const pkg2 = JSON.parse(raw);
44
- const updated = mutate(pkg2);
45
- await writeFile(path, JSON.stringify(updated, null, 2) + "\n", "utf-8");
38
+ const raw = await readFile(path, "utf-8");
39
+ const updated = mutate(JSON.parse(raw));
40
+ await writeFile(path, JSON.stringify(updated, null, 2) + "\n", "utf-8");
46
41
  }
47
-
48
- // src/scaffold.ts
49
- async function scaffold({
50
- targetDir: targetDir2,
51
- projectName: projectName2,
52
- templateDir: templateDir2,
53
- skipInstall = false
54
- }) {
55
- let entries = [];
56
- try {
57
- entries = await readdir(targetDir2);
58
- } catch (err) {
59
- const code = err.code;
60
- if (code !== "ENOENT") {
61
- throw err;
62
- }
63
- }
64
- if (entries.length > 0) {
65
- throw new Error(
66
- `Target directory "${targetDir2}" already exists and is non-empty. Remove it first or choose a different name.`
67
- );
68
- }
69
- await cp(templateDir2, targetDir2, { recursive: true });
70
- const renamedGitignore = join(targetDir2, "app", "_gitignore");
71
- try {
72
- await access(renamedGitignore);
73
- await rename(renamedGitignore, join(targetDir2, "app", ".gitignore"));
74
- } catch {
75
- }
76
- const envExample = join(targetDir2, "app", ".env.example");
77
- const envFile = join(targetDir2, "app", ".env");
78
- try {
79
- await access(envExample);
80
- let envExists = false;
81
- try {
82
- await access(envFile);
83
- envExists = true;
84
- } catch {
85
- }
86
- if (!envExists) {
87
- await copyFile(envExample, envFile);
88
- }
89
- } catch {
90
- }
91
- const pkgPath = join(targetDir2, "app", "package.json");
92
- await rewritePackageJson(pkgPath, (pkg2) => ({ ...pkg2, name: projectName2 }));
93
- if (!skipInstall) {
94
- await runPnpmInstall(join(targetDir2, "app"));
95
- }
42
+ //#endregion
43
+ //#region src/scaffold.ts
44
+ async function scaffold({ targetDir, projectName, templateDir, skipInstall = false }) {
45
+ let entries = [];
46
+ try {
47
+ entries = await readdir(targetDir);
48
+ } catch (err) {
49
+ if (err.code !== "ENOENT") throw err;
50
+ }
51
+ if (entries.length > 0) throw new Error(`Target directory "${targetDir}" already exists and is non-empty. Remove it first or choose a different name.`);
52
+ await cp(templateDir, targetDir, { recursive: true });
53
+ const renamedGitignore = join(targetDir, "app", "_gitignore");
54
+ try {
55
+ await access(renamedGitignore);
56
+ await rename(renamedGitignore, join(targetDir, "app", ".gitignore"));
57
+ } catch {}
58
+ const envExample = join(targetDir, "app", ".env.example");
59
+ const envFile = join(targetDir, "app", ".env");
60
+ try {
61
+ await access(envExample);
62
+ let envExists = false;
63
+ try {
64
+ await access(envFile);
65
+ envExists = true;
66
+ } catch {}
67
+ if (!envExists) await copyFile(envExample, envFile);
68
+ } catch {}
69
+ await rewritePackageJson(join(targetDir, "app", "package.json"), (pkg) => ({
70
+ ...pkg,
71
+ name: projectName
72
+ }));
73
+ if (!skipInstall) await runPnpmInstall(join(targetDir, "app"));
96
74
  }
97
75
  function runPnpmInstall(cwd) {
98
- return new Promise((resolve, reject) => {
99
- const child = spawn("pnpm", ["install"], { cwd, stdio: "inherit", shell: false });
100
- child.on("error", (err) => {
101
- if (err.code === "ENOENT") {
102
- reject(new Error("pnpm not found on PATH. Install pnpm (https://pnpm.io/installation) and try again."));
103
- } else {
104
- reject(err);
105
- }
106
- });
107
- child.on("close", (code) => {
108
- if (code === 0) {
109
- resolve();
110
- } else {
111
- reject(new Error(`pnpm install exited with code ${String(code)}`));
112
- }
113
- });
114
- });
76
+ return new Promise((resolve, reject) => {
77
+ const child = spawn("pnpm", ["install"], {
78
+ cwd,
79
+ stdio: "inherit",
80
+ shell: false
81
+ });
82
+ child.on("error", (err) => {
83
+ if (err.code === "ENOENT") reject(/* @__PURE__ */ new Error("pnpm not found on PATH. Install pnpm (https://pnpm.io/installation) and try again."));
84
+ else reject(err);
85
+ });
86
+ child.on("close", (code) => {
87
+ if (code === 0) resolve();
88
+ else reject(/* @__PURE__ */ new Error(`pnpm install exited with code ${String(code)}`));
89
+ });
90
+ });
115
91
  }
116
-
117
- // src/helpers/next-steps.ts
118
- var RESET = "\x1B[0m";
119
- var BOLD = "\x1B[1m";
120
- var GREEN = "\x1B[32m";
121
- var CYAN = "\x1B[36m";
122
- function buildNextStepsMessage(targetDir2) {
123
- return [
124
- "",
125
- `${GREEN}${BOLD}\u2714 Scaffolded ${targetDir2} successfully!${RESET}`,
126
- "",
127
- `${BOLD}Next steps:${RESET}`,
128
- ` ${CYAN}cd ${targetDir2}/app${RESET}`,
129
- ` ${CYAN}pnpm dev${RESET}`,
130
- "",
131
- `Your ${CYAN}.env${RESET} was created from ${CYAN}.env.example${RESET} with placeholder values.`,
132
- `Edit it with your real LLM/Slack keys when you wire the full pipeline.`,
133
- "",
134
- `See ${targetDir2}/app/README.md for more details.`,
135
- ""
136
- ].join("\n");
92
+ //#endregion
93
+ //#region src/helpers/next-steps.ts
94
+ const RESET$1 = "\x1B[0m";
95
+ const BOLD = "\x1B[1m";
96
+ const GREEN = "\x1B[32m";
97
+ const CYAN = "\x1B[36m";
98
+ function buildNextStepsMessage(targetDir) {
99
+ return [
100
+ "",
101
+ `${GREEN}${BOLD} Scaffolded ${targetDir} successfully!${RESET$1}`,
102
+ "",
103
+ `${BOLD}Next steps:${RESET$1}`,
104
+ ` ${CYAN}cd ${targetDir}/app${RESET$1}`,
105
+ ` ${CYAN}pnpm dev${RESET$1}`,
106
+ "",
107
+ `Your ${CYAN}.env${RESET$1} was created from ${CYAN}.env.example${RESET$1} with placeholder values.`,
108
+ `Edit it with your real LLM/Slack keys when you wire the full pipeline.`,
109
+ "",
110
+ `See ${targetDir}/app/README.md for more details.`,
111
+ ""
112
+ ].join("\n");
137
113
  }
138
-
139
- // src/cli.ts
140
- var pkgUrl = new URL("../package.json", import.meta.url);
141
- var pkg = JSON.parse(readFileSync(fileURLToPath(pkgUrl), "utf8"));
142
- var VERSION = pkg.version;
143
- var USAGE = `
114
+ //#endregion
115
+ //#region src/cli.ts
116
+ const pkgUrl = new URL("../package.json", import.meta.url);
117
+ const VERSION = JSON.parse(readFileSync(fileURLToPath(pkgUrl), "utf8")).version;
118
+ const USAGE = `
144
119
  Usage:
145
120
  pnpm create junando-app <project-name>
146
121
  npx create-junando-app <project-name>
@@ -152,53 +127,45 @@ Options:
152
127
  --help, -h Show this help message
153
128
  --version, -v Show version number
154
129
  `.trim();
155
- var RED = "\x1B[31m";
156
- var RESET2 = "\x1B[0m";
130
+ const RED = "\x1B[31m";
131
+ const RESET = "\x1B[0m";
157
132
  function die(msg) {
158
- process.stderr.write(`${RED}Error: ${msg}${RESET2}
159
- `);
160
- process.exit(1);
133
+ process.stderr.write(`${RED}Error: ${msg}${RESET}\n`);
134
+ process.exit(1);
161
135
  }
162
- var parsed = parseArgs(process.argv);
136
+ const parsed = parseArgs(process.argv);
163
137
  if (parsed.help) {
164
- console.log(USAGE);
165
- process.exit(0);
138
+ console.log(USAGE);
139
+ process.exit(0);
166
140
  }
167
141
  if (parsed.version) {
168
- console.log(VERSION);
169
- process.exit(0);
170
- }
171
- if (parsed.unknownFlag !== void 0) {
172
- die(`Unknown flag: ${parsed.unknownFlag}
173
-
174
- ${USAGE}`);
142
+ console.log(VERSION);
143
+ process.exit(0);
175
144
  }
145
+ if (parsed.unknownFlag !== void 0) die(`Unknown flag: ${parsed.unknownFlag}\n\n${USAGE}`);
176
146
  if (parsed.projectName === void 0) {
177
- process.stderr.write(USAGE + "\n");
178
- process.exit(1);
179
- }
180
- var targetDir = parsed.projectName;
181
- var projectName = basename(targetDir);
182
- if (targetDir.split(/[\\/]/).includes("..")) {
183
- die(`Target path "${targetDir}" must not contain ".." segments.`);
184
- }
185
- if (!isValidProjectName(projectName)) {
186
- die(
187
- `Invalid project name "${projectName}". Use letters, digits, dots, hyphens, or underscores; must start with a letter or digit.`
188
- );
189
- }
190
- var templateDirUrl = new URL("../template/", import.meta.url);
191
- var templateDir = fileURLToPath(templateDirUrl);
192
- if (!existsSync(templateDir)) {
193
- die(
194
- `Template directory not found at ${templateDir}. This is likely a broken install \u2014 try reinstalling create-junando-app.`
195
- );
147
+ process.stderr.write(USAGE + "\n");
148
+ process.exit(1);
196
149
  }
150
+ const targetDir = parsed.projectName;
151
+ const projectName = basename(targetDir);
152
+ if (targetDir.split(/[\\/]/).includes("..")) die(`Target path "${targetDir}" must not contain ".." segments.`);
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));
155
+ if (!existsSync(templateDir)) die(`Template directory not found at ${templateDir}. This is likely a broken install — try reinstalling create-junando-app.`);
197
156
  (async () => {
198
- try {
199
- await scaffold({ targetDir, projectName, templateDir });
200
- process.stdout.write(buildNextStepsMessage(targetDir));
201
- } catch (err) {
202
- die(err instanceof Error ? err.message : String(err));
203
- }
157
+ try {
158
+ await scaffold({
159
+ targetDir,
160
+ projectName,
161
+ templateDir
162
+ });
163
+ process.stdout.write(buildNextStepsMessage(targetDir));
164
+ } catch (err) {
165
+ die(err instanceof Error ? err.message : String(err));
166
+ }
204
167
  })();
168
+ //#endregion
169
+ export {};
170
+
171
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-junando-app",
3
- "version": "0.10.1",
3
+ "version": "0.11.1",
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",
@@ -22,16 +22,15 @@
22
22
  "publishConfig": {
23
23
  "access": "public"
24
24
  },
25
- "dependencies": {},
26
25
  "devDependencies": {
27
- "@types/node": "^22.0.0",
28
- "tsup": "^8.0.0",
29
- "typescript": "^5.5.0",
30
- "vitest": "^2.0.0"
26
+ "@types/node": "^26.0.1",
27
+ "tsdown": "^0.22.8",
28
+ "typescript": "^7.0.2",
29
+ "vitest": "^4.1.10"
31
30
  },
32
31
  "scripts": {
33
32
  "prebuild": "node scripts/sync-template.js",
34
- "build": "tsup src/cli.ts --format esm --dts --tsconfig tsconfig.build.json",
33
+ "build": "tsdown",
35
34
  "typecheck": "tsc --noEmit",
36
35
  "clean": "rm -rf dist template"
37
36
  }