create-junando-app 0.11.0 → 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 +1 -1
- package/dist/cli.js +139 -172
- package/dist/cli.js.map +1 -0
- package/package.json +6 -7
package/dist/cli.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export { };
|
package/dist/cli.js
CHANGED
|
@@ -1,146 +1,121 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
+
return /^[a-z0-9][a-z0-9._-]*$/i.test(name);
|
|
32
34
|
}
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
49
|
-
async function scaffold({
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
function buildNextStepsMessage(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
|
|
156
|
-
|
|
130
|
+
const RED = "\x1B[31m";
|
|
131
|
+
const RESET = "\x1B[0m";
|
|
157
132
|
function die(msg) {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
process.exit(1);
|
|
133
|
+
process.stderr.write(`${RED}Error: ${msg}${RESET}\n`);
|
|
134
|
+
process.exit(1);
|
|
161
135
|
}
|
|
162
|
-
|
|
136
|
+
const parsed = parseArgs(process.argv);
|
|
163
137
|
if (parsed.help) {
|
|
164
|
-
|
|
165
|
-
|
|
138
|
+
console.log(USAGE);
|
|
139
|
+
process.exit(0);
|
|
166
140
|
}
|
|
167
141
|
if (parsed.version) {
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
178
|
-
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -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.11.
|
|
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": "^
|
|
28
|
-
"
|
|
29
|
-
"typescript": "^
|
|
30
|
-
"vitest": "^
|
|
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": "
|
|
33
|
+
"build": "tsdown",
|
|
35
34
|
"typecheck": "tsc --noEmit",
|
|
36
35
|
"clean": "rm -rf dist template"
|
|
37
36
|
}
|