@ysk-kit/create-app 1.5.1 → 1.6.0

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/help.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const HELP = "create-ysk-app \u2014 scaffold a product from YSK Kit\n\nUsage:\n pnpm --filter @ysk-kit/create-app start <name> [options]\n pnpm create @ysk-kit/app <name> [options]\n npm create @ysk-kit/app <name> [options]\n\n There is no unscoped create-ysk-app package on npm. The published\n package is @ysk-kit/create-app; its bin name is create-ysk-app.\n\nOptions:\n --preset thin|full\n Default: thin. Copies this kit then strips llm, billing, organizations,\n and devices (push). Use full to keep the living demonstration.\n --db mysql|postgresql|sqlite\n Default: mysql. Rewrites Prisma provider, driver adapter, and Compose.\n --flavor saas|desktop|gateway|php-bridge|trading|static-web3\n Default: saas. Selects which apps are copied.\n --no-admin\n Skip apps/admin (ignored by gateway, php-bridge, trading, static-web3,\n desktop).\n --no-mobile\n Skip apps/mobile (ignored by flavors that already omit mobile).\n --yes, -y\n Accept defaults (or flags already passed). Never prompt.\n\nOn a TTY, omitted name / flavor / preset / db / admin / mobile are prompted.\nNon-TTY (CI, pipes) never prompts.\n\nphp-bridge and static-web3 ignore --preset.\n\nFlavors:\n saas API + web + admin + mobile (flags can drop admin/mobile)\n desktop API + Electron desktop\n gateway API + admin (machine API keys)\n php-bridge OpenAPI + TypeScript/PHP clients only (no Node apps)\n trading API + web + worker (no admin/mobile/desktop)\n static-web3 Vite web only (no API)\n\nManual: docs/cli/create-ysk-app.md\nChinese: docs/cli/create-ysk-app.zh.md\n";
1
+ export declare const HELP = "create-ysk-app \u2014 scaffold a product from YSK Kit\n\nUsage:\n pnpm --filter @ysk-kit/create-app start <name> [options]\n pnpm create @ysk-kit/app <name> [options]\n npm create @ysk-kit/app <name> [options]\n\n There is no unscoped create-ysk-app package on npm. The published\n package is @ysk-kit/create-app; its bin name is create-ysk-app.\n\nOptions:\n --preset thin|full\n Default: thin. Copies this kit then strips llm, billing, organizations,\n and devices (push). Use full to keep the living demonstration.\n --db mysql|postgresql|sqlite\n Default: mysql. Rewrites Prisma provider, driver adapter, and Compose.\n --flavor saas|desktop|gateway|php-bridge|trading|static-web3\n Default: saas. Selects which apps are copied.\n --no-admin\n Skip apps/admin (ignored by gateway, php-bridge, trading, static-web3,\n desktop).\n --no-mobile\n Skip apps/mobile (ignored by flavors that already omit mobile).\n --yes, -y\n Accept defaults (or flags already passed). Never prompt.\n\nOn a TTY, omitted name / flavor / preset / db / admin / mobile are prompted\nwith a numbered guided wizard (best-for / avoid-when / tradeoffs) and a\nconfirm-before-write summary. Enter 1\u20136 or a flavor slug. Proceed no exits\nwithout creating files. Non-TTY (CI, pipes) never prompts.\n\nphp-bridge and static-web3 ignore --preset.\n\nFlavors:\n saas API + web + admin + mobile (flags can drop admin/mobile)\n desktop API + Electron desktop\n gateway API + admin (machine API keys)\n php-bridge OpenAPI + TypeScript/PHP clients only (no Node apps)\n trading API + web + worker (no admin/mobile/desktop)\n static-web3 Vite web only (no API)\n\nManual: docs/cli/create-ysk-app.md\nChinese: docs/cli/create-ysk-app.zh.md\n";
2
2
  //# sourceMappingURL=help.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,0lDAyChB,CAAC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,2wDA2ChB,CAAC"}
package/dist/help.js CHANGED
@@ -24,8 +24,10 @@ Options:
24
24
  --yes, -y
25
25
  Accept defaults (or flags already passed). Never prompt.
26
26
 
27
- On a TTY, omitted name / flavor / preset / db / admin / mobile are prompted.
28
- Non-TTY (CI, pipes) never prompts.
27
+ On a TTY, omitted name / flavor / preset / db / admin / mobile are prompted
28
+ with a numbered guided wizard (best-for / avoid-when / tradeoffs) and a
29
+ confirm-before-write summary. Enter 1–6 or a flavor slug. Proceed no exits
30
+ without creating files. Non-TTY (CI, pipes) never prompts.
29
31
 
30
32
  php-bridge and static-web3 ignore --preset.
31
33
 
package/dist/help.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCnB,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CnB,CAAC"}
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import { dirname, resolve } from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import { HELP } from './help.js';
6
6
  import { resolveKitRoot } from './kit-root.js';
7
- import { resolveCreateOptions, withReadlineAsk } from './prompt.js';
7
+ import { isCreateCancelledError, resolveCreateOptions, withReadlineAsk, } from './prompt.js';
8
8
  import { createYskApp, parseArgs } from './scaffold.js';
9
9
  const isCliEntry = () => {
10
10
  const self = fileURLToPath(import.meta.url);
@@ -33,9 +33,20 @@ const main = async () => {
33
33
  }
34
34
  const parsed = parseArgs(argv);
35
35
  const tty = Boolean(process.stdin.isTTY && process.stdout.isTTY);
36
- const resolved = !tty || parsed.yes
37
- ? await resolveCreateOptions(parsed, { tty: false, ask: async () => '' })
38
- : await withReadlineAsk((ask) => resolveCreateOptions(parsed, { tty: true, ask }));
36
+ let resolved;
37
+ try {
38
+ resolved =
39
+ !tty || parsed.yes
40
+ ? await resolveCreateOptions(parsed, { tty: false, ask: async () => '' })
41
+ : await withReadlineAsk((ask) => resolveCreateOptions(parsed, { tty: true, ask }));
42
+ }
43
+ catch (error) {
44
+ if (isCreateCancelledError(error)) {
45
+ console.log('create cancelled');
46
+ process.exit(0);
47
+ }
48
+ throw error;
49
+ }
39
50
  if (!resolved.name) {
40
51
  help();
41
52
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/prompt.d.ts CHANGED
@@ -8,6 +8,11 @@ export type ResolvedCreateOptions = {
8
8
  admin: boolean;
9
9
  mobile: boolean;
10
10
  };
11
+ export declare class CreateCancelledError extends Error {
12
+ readonly code: "CREATE_CANCELLED";
13
+ constructor();
14
+ }
15
+ export declare const isCreateCancelledError: (error: unknown) => error is CreateCancelledError;
11
16
  export declare const resolveCreateOptions: (parsed: ParsedArgs, opts: {
12
17
  tty: boolean;
13
18
  ask: AskFn;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAO,KAAK,EAAE,EAAW,KAAK,UAAU,EAAW,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAE7F,MAAM,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,EAAE,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAsCF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,UAAU,EAClB,MAAM;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,KAAK,CAAA;CAAE,KACjC,OAAO,CAAC,qBAAqB,CAmC/B,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAQlF,CAAC"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAO,KAAK,EAAE,EAAW,KAAK,UAAU,EAAW,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAU7F,MAAM,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,EAAE,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAG,kBAAkB,CAAU;;CAK7C;AAED,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,oBAC1B,CAAC;AA2HxC,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,UAAU,EAClB,MAAM;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,KAAK,CAAA;CAAE,KACjC,OAAO,CAAC,qBAAqB,CAoE/B,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAQlF,CAAC"}
package/dist/prompt.js CHANGED
@@ -1,22 +1,46 @@
1
1
  import { stdin as input, stdout as output } from 'node:process';
2
2
  import { createInterface } from 'node:readline/promises';
3
3
  import { DBS, FLAVORS, PRESETS } from './scaffold.js';
4
+ import { DB_ITEMS, FLAVOR_ITEMS, formatMenu, LANGUAGE_NOTE, PRESET_ITEMS, } from './wizard-copy.js';
5
+ export class CreateCancelledError extends Error {
6
+ code = 'CREATE_CANCELLED';
7
+ constructor() {
8
+ super('create cancelled');
9
+ this.name = 'CreateCancelledError';
10
+ }
11
+ }
12
+ export const isCreateCancelledError = (error) => error instanceof CreateCancelledError;
4
13
  const PRESET_SKIP = new Set(['php-bridge', 'static-web3']);
5
- const pick = async (ask, label, allowed, fallback) => {
6
- const list = allowed.join(', ');
14
+ const matchMenuChoice = (raw, allowed) => {
15
+ if (/^\d+$/.test(raw)) {
16
+ const index = Number(raw);
17
+ if (index >= 1 && index <= allowed.length)
18
+ return allowed[index - 1];
19
+ return undefined;
20
+ }
21
+ if (allowed.includes(raw))
22
+ return raw;
23
+ return undefined;
24
+ };
25
+ const pickMenu = async (ask, opts) => {
26
+ const menu = formatMenu(opts.title, opts.items);
27
+ const prefix = opts.preamble ? `${opts.preamble}\n\n${menu}` : menu;
28
+ const prompt = `${prefix}${opts.hint} [${opts.fallback}]:`;
7
29
  for (let attempt = 0; attempt < 3; attempt += 1) {
8
- const raw = (await ask(`${label} (${list}) [${fallback}]:`)).trim().toLowerCase();
30
+ const raw = (await ask(prompt)).trim().toLowerCase();
9
31
  if (raw === '')
10
- return fallback;
11
- if (allowed.includes(raw))
12
- return raw;
32
+ return opts.fallback;
33
+ const matched = matchMenuChoice(raw, opts.allowed);
34
+ if (matched)
35
+ return matched;
13
36
  }
14
- throw new Error(`unknown ${label.toLowerCase()}`);
37
+ throw new Error(`unknown ${opts.label.toLowerCase()}`);
15
38
  };
16
- const pickYesNo = async (ask, label, fallback) => {
39
+ const pickYesNo = async (ask, label, fallback, preamble) => {
17
40
  const def = fallback ? 'yes' : 'no';
41
+ const prompt = `${preamble ? `${preamble}\n` : ''}${label} (yes, no) [${def}]:`;
18
42
  for (let attempt = 0; attempt < 3; attempt += 1) {
19
- const raw = (await ask(`${label} (yes, no) [${def}]:`)).trim().toLowerCase();
43
+ const raw = (await ask(prompt)).trim().toLowerCase();
20
44
  if (raw === '')
21
45
  return fallback;
22
46
  if (raw === 'yes' || raw === 'y')
@@ -34,6 +58,51 @@ const pickName = async (ask) => {
34
58
  }
35
59
  throw new Error('product name required');
36
60
  };
61
+ const pickFlavor = async (ask, fallback) => pickMenu(ask, {
62
+ label: 'Flavor',
63
+ title: 'Flavor — product shape. Enter 1–6 or a slug.',
64
+ items: FLAVOR_ITEMS,
65
+ allowed: FLAVORS,
66
+ fallback,
67
+ hint: 'Flavor (1–6 or slug)',
68
+ });
69
+ const pickPreset = async (ask, fallback, preamble) => pickMenu(ask, {
70
+ label: 'Preset',
71
+ title: 'Preset — capability depth. Enter 1–2 or thin|full.',
72
+ items: PRESET_ITEMS,
73
+ allowed: PRESETS,
74
+ fallback,
75
+ hint: 'Preset (1–2 or thin|full)',
76
+ ...(preamble ? { preamble } : {}),
77
+ });
78
+ const pickDatabase = async (ask, fallback, preamble) => pickMenu(ask, {
79
+ label: 'Database',
80
+ title: 'Database. Enter 1–3 or mysql|postgresql|sqlite.',
81
+ items: DB_ITEMS,
82
+ allowed: DBS,
83
+ fallback,
84
+ hint: 'Database (1–3 or mysql|postgresql|sqlite)',
85
+ ...(preamble ? { preamble } : {}),
86
+ });
87
+ const formatIgnored = (flavor, skipPresetDb, value) => skipPresetDb ? `ignored (${flavor})` : value;
88
+ const formatSurface = (flavor, value) => flavor === 'saas' ? (value ? 'yes' : 'no') : 'n/a';
89
+ const confirmCreate = async (ask, resolved, skipPresetDb, preamble) => {
90
+ const summary = [
91
+ 'Summary — no files have been written yet.',
92
+ ` Product: ${resolved.name}`,
93
+ ` Flavor: ${resolved.flavor}`,
94
+ ` Preset: ${formatIgnored(resolved.flavor, skipPresetDb, resolved.preset)}`,
95
+ ` Database: ${formatIgnored(resolved.flavor, skipPresetDb, resolved.db)}`,
96
+ ` Admin: ${formatSurface(resolved.flavor, resolved.admin)}`,
97
+ ` Mobile: ${formatSurface(resolved.flavor, resolved.mobile)}`,
98
+ '',
99
+ 'Proceed and write files?',
100
+ ].join('\n');
101
+ const body = preamble ? `${preamble}\n\n${summary}` : summary;
102
+ const proceed = await pickYesNo(ask, 'Proceed?', true, body);
103
+ if (!proceed)
104
+ throw new CreateCancelledError();
105
+ };
37
106
  export const resolveCreateOptions = async (parsed, opts) => {
38
107
  if (!opts.tty || parsed.yes) {
39
108
  return {
@@ -46,21 +115,44 @@ export const resolveCreateOptions = async (parsed, opts) => {
46
115
  };
47
116
  }
48
117
  const name = parsed.name && parsed.name.length > 0 ? parsed.name : await pickName(opts.ask);
49
- const flavor = parsed.explicit.flavor
50
- ? parsed.flavor
51
- : await pick(opts.ask, 'Flavor', FLAVORS, 'saas');
118
+ const flavor = parsed.explicit.flavor ? parsed.flavor : await pickFlavor(opts.ask, 'saas');
52
119
  const skipPresetDb = PRESET_SKIP.has(flavor);
120
+ let languageNotePending = true;
121
+ const takeLanguageNote = () => {
122
+ if (!languageNotePending)
123
+ return undefined;
124
+ languageNotePending = false;
125
+ return LANGUAGE_NOTE;
126
+ };
53
127
  const preset = (parsed.explicit.preset || skipPresetDb
54
128
  ? parsed.preset
55
- : await pick(opts.ask, 'Preset', PRESETS, 'thin'));
56
- const db = (parsed.explicit.db || skipPresetDb ? parsed.db : await pick(opts.ask, 'Database', DBS, 'mysql'));
129
+ : await pickPreset(opts.ask, 'thin', takeLanguageNote()));
130
+ const db = (parsed.explicit.db || skipPresetDb
131
+ ? parsed.db
132
+ : await pickDatabase(opts.ask, 'mysql', takeLanguageNote()));
57
133
  const admin = flavor !== 'saas' || parsed.explicit.noAdmin
58
134
  ? parsed.admin
59
- : await pickYesNo(opts.ask, 'Include admin?', true);
135
+ : await pickYesNo(opts.ask, 'Include admin?', true, [
136
+ takeLanguageNote(),
137
+ 'Include the operator admin Vite app (apps/admin).',
138
+ ' yes — copy admin for operators (default).',
139
+ ' no — skip apps/admin (same as --no-admin).',
140
+ ]
141
+ .filter((line) => Boolean(line))
142
+ .join('\n'));
60
143
  const mobile = flavor !== 'saas' || parsed.explicit.noMobile
61
144
  ? parsed.mobile
62
- : await pickYesNo(opts.ask, 'Include mobile?', true);
63
- return { name, flavor, db, preset, admin, mobile };
145
+ : await pickYesNo(opts.ask, 'Include mobile?', true, [
146
+ takeLanguageNote(),
147
+ 'Include the Expo mobile app (apps/mobile).',
148
+ ' yes — copy Expo mobile (default).',
149
+ ' no — skip apps/mobile (same as --no-mobile).',
150
+ ]
151
+ .filter((line) => Boolean(line))
152
+ .join('\n'));
153
+ const resolved = { name, flavor, db, preset, admin, mobile };
154
+ await confirmCreate(opts.ask, resolved, skipPresetDb, takeLanguageNote());
155
+ return resolved;
64
156
  };
65
157
  export const withReadlineAsk = async (fn) => {
66
158
  const rl = createInterface({ input, output });
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type MenuItem = {
2
+ id: string;
3
+ bestFor: string;
4
+ avoidWhen: string;
5
+ tradeoff: string;
6
+ };
7
+ export declare const LANGUAGE_NOTE = "Client language: the default stack is TypeScript (Node API, Vite, Expo, Electron). php-bridge emits OpenAPI + envelope-aware PHP/TS clients against an existing Kit API. Tauri, Flutter, and Kotlin Multiplatform are deferred (ADR 0002) \u2014 this wizard does not scaffold them. Generate an OpenAPI client and point it at API_PUBLIC_URL instead. Do not copy application/ into another language.";
8
+ export declare const FLAVOR_ITEMS: readonly MenuItem[];
9
+ export declare const PRESET_ITEMS: readonly MenuItem[];
10
+ export declare const DB_ITEMS: readonly MenuItem[];
11
+ export declare const formatMenu: (title: string, items: readonly MenuItem[]) => string;
12
+ //# sourceMappingURL=wizard-copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-copy.d.ts","sourceRoot":"","sources":["../src/wizard-copy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,aAAa,4YAAuY,CAAC;AAEla,eAAO,MAAM,YAAY,EAAE,SAAS,QAAQ,EAsClC,CAAC;AAEX,eAAO,MAAM,YAAY,EAAE,SAAS,QAAQ,EAclC,CAAC;AAEX,eAAO,MAAM,QAAQ,EAAE,SAAS,QAAQ,EAmB9B,CAAC;AAEX,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,EAAE,OAAO,SAAS,QAAQ,EAAE,KAAG,MAUtE,CAAC"}
@@ -0,0 +1,85 @@
1
+ export const LANGUAGE_NOTE = `Client language: the default stack is TypeScript (Node API, Vite, Expo, Electron). php-bridge emits OpenAPI + envelope-aware PHP/TS clients against an existing Kit API. Tauri, Flutter, and Kotlin Multiplatform are deferred (ADR 0002) — this wizard does not scaffold them. Generate an OpenAPI client and point it at API_PUBLIC_URL instead. Do not copy application/ into another language.`;
2
+ export const FLAVOR_ITEMS = [
3
+ {
4
+ id: 'saas',
5
+ bestFor: 'Multi-surface product: public web, operator admin, optional Expo, one API.',
6
+ avoidWhen: 'You only need Electron, a machine gateway, PHP clients, API+web without kit admin/mobile, or Vite without Prisma.',
7
+ tradeoff: 'Copies api + web + admin + mobile. Honours --preset, --db, --no-admin, --no-mobile.',
8
+ },
9
+ {
10
+ id: 'desktop',
11
+ bestFor: 'Electron talks to the API through @ysk-kit/sdk (platform: desktop).',
12
+ avoidWhen: 'You need web/admin/mobile in this repo, or a Tauri binary (deferred).',
13
+ tradeoff: 'Copies api + desktop. Prisma stays in the API process.',
14
+ },
15
+ {
16
+ id: 'gateway',
17
+ bestFor: 'Machine clients + operator console; mint API keys (GATEWAY.md).',
18
+ avoidWhen: 'You need a public web or Expo app from this scaffold.',
19
+ tradeoff: 'Copies api + admin. --no-admin / --no-mobile are ignored.',
20
+ },
21
+ {
22
+ id: 'php-bridge',
23
+ bestFor: 'OpenAPI + envelope-aware TypeScript/PHP clients against an existing Kit API.',
24
+ avoidWhen: 'You need Node apps, Prisma, or to copy application/ into PHP.',
25
+ tradeoff: 'Does not copy this monorepo. Ignores --preset and --db.',
26
+ },
27
+ {
28
+ id: 'trading',
29
+ bestFor: 'API + web + worker; the product owns market data (TRADING.md).',
30
+ avoidWhen: 'You need kit admin/mobile/desktop apps.',
31
+ tradeoff: 'Copies api + web + worker. --no-admin / --no-mobile are ignored.',
32
+ },
33
+ {
34
+ id: 'static-web3',
35
+ bestFor: 'Vite web only; no Prisma / DATABASE_URL (WEB3.md).',
36
+ avoidWhen: 'You need an API in this repository.',
37
+ tradeoff: 'Copies web only. Ignores --preset and --db.',
38
+ },
39
+ ];
40
+ export const PRESET_ITEMS = [
41
+ {
42
+ id: 'thin',
43
+ bestFor: 'New products. Identity, files, notifications, jobs, mail, API keys, crypto, and realtime stay. Strips llm, billing, organizations, and devices. Restore later with ysk-kit add.',
44
+ avoidWhen: 'You want the living demonstration mounted now.',
45
+ tradeoff: 'Default. Smaller dest; add capabilities when you need them.',
46
+ },
47
+ {
48
+ id: 'full',
49
+ bestFor: 'Exploring the living kit with llm, billing, organizations, and push mounted.',
50
+ avoidWhen: 'You want a thin production start.',
51
+ tradeoff: 'Keeps the demonstration modules, routes, and screens.',
52
+ },
53
+ ];
54
+ export const DB_ITEMS = [
55
+ {
56
+ id: 'mysql',
57
+ bestFor: 'Default production-like path. Docker Compose service mysql.',
58
+ avoidWhen: 'You cannot run Docker or want a file database.',
59
+ tradeoff: 'Rewrites Prisma provider, driver adapter, DATABASE_URL, and Compose.',
60
+ },
61
+ {
62
+ id: 'postgresql',
63
+ bestFor: 'Postgres shops. Docker Compose service postgres.',
64
+ avoidWhen: 'You want the kit default MySQL Compose path unchanged.',
65
+ tradeoff: 'Same Prisma rewrite as mysql, targeting PostgreSQL.',
66
+ },
67
+ {
68
+ id: 'sqlite',
69
+ bestFor: 'Local smoke and CI. No Compose service.',
70
+ avoidWhen: 'Multiple writers or production concurrency matter.',
71
+ tradeoff: 'File database; strips @db.* native types.',
72
+ },
73
+ ];
74
+ export const formatMenu = (title, items) => {
75
+ const lines = [title, ''];
76
+ items.forEach((item, index) => {
77
+ lines.push(` ${index + 1}. ${item.id}`);
78
+ lines.push(` Best for: ${item.bestFor}`);
79
+ lines.push(` Avoid when: ${item.avoidWhen}`);
80
+ lines.push(` Tradeoff: ${item.tradeoff}`);
81
+ lines.push('');
82
+ });
83
+ return lines.join('\n');
84
+ };
85
+ //# sourceMappingURL=wizard-copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-copy.js","sourceRoot":"","sources":["../src/wizard-copy.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAG,oYAAoY,CAAC;AAEla,MAAM,CAAC,MAAM,YAAY,GAAwB;IAC/C;QACE,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,4EAA4E;QACrF,SAAS,EACP,mHAAmH;QACrH,QAAQ,EAAE,qFAAqF;KAChG;IACD;QACE,EAAE,EAAE,SAAS;QACb,OAAO,EAAE,qEAAqE;QAC9E,SAAS,EAAE,uEAAuE;QAClF,QAAQ,EAAE,wDAAwD;KACnE;IACD;QACE,EAAE,EAAE,SAAS;QACb,OAAO,EAAE,iEAAiE;QAC1E,SAAS,EAAE,uDAAuD;QAClE,QAAQ,EAAE,2DAA2D;KACtE;IACD;QACE,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,8EAA8E;QACvF,SAAS,EAAE,+DAA+D;QAC1E,QAAQ,EAAE,yDAAyD;KACpE;IACD;QACE,EAAE,EAAE,SAAS;QACb,OAAO,EAAE,gEAAgE;QACzE,SAAS,EAAE,yCAAyC;QACpD,QAAQ,EAAE,kEAAkE;KAC7E;IACD;QACE,EAAE,EAAE,aAAa;QACjB,OAAO,EAAE,oDAAoD;QAC7D,SAAS,EAAE,qCAAqC;QAChD,QAAQ,EAAE,6CAA6C;KACxD;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAwB;IAC/C;QACE,EAAE,EAAE,MAAM;QACV,OAAO,EACL,iLAAiL;QACnL,SAAS,EAAE,gDAAgD;QAC3D,QAAQ,EAAE,6DAA6D;KACxE;IACD;QACE,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,8EAA8E;QACvF,SAAS,EAAE,mCAAmC;QAC9C,QAAQ,EAAE,uDAAuD;KAClE;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAwB;IAC3C;QACE,EAAE,EAAE,OAAO;QACX,OAAO,EAAE,6DAA6D;QACtE,SAAS,EAAE,gDAAgD;QAC3D,QAAQ,EAAE,sEAAsE;KACjF;IACD;QACE,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,kDAAkD;QAC3D,SAAS,EAAE,wDAAwD;QACnE,QAAQ,EAAE,qDAAqD;KAChE;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,OAAO,EAAE,yCAAyC;QAClD,SAAS,EAAE,oDAAoD;QAC/D,QAAQ,EAAE,2CAA2C;KACtD;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,KAA0B,EAAU,EAAE;IAC9E,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ysk-kit/create-app",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "create-ysk-app": "./dist/index.js"