@zhin.js/scaffold-wizard 0.1.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.
@@ -0,0 +1,260 @@
1
+ import inquirer from 'inquirer';
2
+ // 配置数据库选项
3
+ export async function configureDatabaseOptions() {
4
+ const { dialect } = await inquirer.prompt([
5
+ {
6
+ type: 'select',
7
+ name: 'dialect',
8
+ message: '选择数据库类型:',
9
+ choices: [
10
+ { name: 'SQLite (推荐, 零配置)', value: 'sqlite' },
11
+ { name: 'MySQL', value: 'mysql' },
12
+ { name: 'PostgreSQL', value: 'pg' },
13
+ { name: 'MongoDB', value: 'mongodb' },
14
+ { name: 'Redis', value: 'redis' }
15
+ ],
16
+ default: 'sqlite'
17
+ }
18
+ ]);
19
+ switch (dialect) {
20
+ case 'sqlite':
21
+ return await configureSQLite();
22
+ case 'mysql':
23
+ return await configureMySQL();
24
+ case 'pg':
25
+ return await configurePostgreSQL();
26
+ case 'mongodb':
27
+ return await configureMongoDB();
28
+ case 'redis':
29
+ return await configureRedis();
30
+ default:
31
+ throw new Error(`未支持的数据库类型: ${dialect}`);
32
+ }
33
+ }
34
+ // SQLite 配置
35
+ async function configureSQLite() {
36
+ const { filename, mode } = await inquirer.prompt([
37
+ {
38
+ type: 'input',
39
+ name: 'filename',
40
+ message: 'SQLite 数据库文件路径:',
41
+ default: './data/bot.db',
42
+ validate: (input) => {
43
+ if (!input.trim())
44
+ return '文件路径不能为空';
45
+ return true;
46
+ }
47
+ },
48
+ {
49
+ type: 'select',
50
+ name: 'mode',
51
+ message: 'SQLite 模式:',
52
+ choices: [
53
+ { name: 'WAL (推荐, 并发性能好)', value: 'wal' },
54
+ { name: 'DELETE (默认)', value: 'delete' },
55
+ { name: 'MEMORY (内存数据库)', value: 'memory' }
56
+ ],
57
+ default: 'wal'
58
+ }
59
+ ]);
60
+ return {
61
+ dialect: 'sqlite',
62
+ filename,
63
+ mode
64
+ };
65
+ }
66
+ // MySQL 配置
67
+ async function configureMySQL() {
68
+ const config = await inquirer.prompt([
69
+ {
70
+ type: 'input',
71
+ name: 'host',
72
+ message: 'MySQL 主机地址:',
73
+ default: 'localhost'
74
+ },
75
+ {
76
+ type: 'input',
77
+ name: 'port',
78
+ message: 'MySQL 端口:',
79
+ default: '3306',
80
+ validate: (input) => {
81
+ const port = parseInt(input);
82
+ if (isNaN(port) || port < 1 || port > 65535) {
83
+ return '请输入有效的端口号 (1-65535)';
84
+ }
85
+ return true;
86
+ }
87
+ },
88
+ {
89
+ type: 'input',
90
+ name: 'user',
91
+ message: 'MySQL 用户名:',
92
+ default: 'root'
93
+ },
94
+ {
95
+ type: 'password',
96
+ name: 'password',
97
+ message: 'MySQL 密码:'
98
+ },
99
+ {
100
+ type: 'input',
101
+ name: 'database',
102
+ message: 'MySQL 数据库名:',
103
+ default: 'zhin_bot',
104
+ validate: (input) => {
105
+ if (!input.trim())
106
+ return '数据库名不能为空';
107
+ return true;
108
+ }
109
+ }
110
+ ]);
111
+ return {
112
+ dialect: 'mysql',
113
+ host: config.host,
114
+ port: parseInt(config.port),
115
+ user: config.user,
116
+ password: config.password,
117
+ database: config.database
118
+ };
119
+ }
120
+ // PostgreSQL 配置
121
+ async function configurePostgreSQL() {
122
+ const config = await inquirer.prompt([
123
+ {
124
+ type: 'input',
125
+ name: 'host',
126
+ message: 'PostgreSQL 主机地址:',
127
+ default: 'localhost'
128
+ },
129
+ {
130
+ type: 'input',
131
+ name: 'port',
132
+ message: 'PostgreSQL 端口:',
133
+ default: '5432',
134
+ validate: (input) => {
135
+ const port = parseInt(input);
136
+ if (isNaN(port) || port < 1 || port > 65535) {
137
+ return '请输入有效的端口号 (1-65535)';
138
+ }
139
+ return true;
140
+ }
141
+ },
142
+ {
143
+ type: 'input',
144
+ name: 'user',
145
+ message: 'PostgreSQL 用户名:',
146
+ default: 'postgres'
147
+ },
148
+ {
149
+ type: 'password',
150
+ name: 'password',
151
+ message: 'PostgreSQL 密码:'
152
+ },
153
+ {
154
+ type: 'input',
155
+ name: 'database',
156
+ message: 'PostgreSQL 数据库名:',
157
+ default: 'zhin_bot',
158
+ validate: (input) => {
159
+ if (!input.trim())
160
+ return '数据库名不能为空';
161
+ return true;
162
+ }
163
+ }
164
+ ]);
165
+ return {
166
+ dialect: 'pg',
167
+ host: config.host,
168
+ port: parseInt(config.port),
169
+ user: config.user,
170
+ password: config.password,
171
+ database: config.database
172
+ };
173
+ }
174
+ // MongoDB 配置
175
+ async function configureMongoDB() {
176
+ const { url, dbName } = await inquirer.prompt([
177
+ {
178
+ type: 'input',
179
+ name: 'url',
180
+ message: 'MongoDB 连接字符串:',
181
+ default: 'mongodb://localhost:27017',
182
+ validate: (input) => {
183
+ if (!input.trim())
184
+ return '连接字符串不能为空';
185
+ if (!input.startsWith('mongodb://') && !input.startsWith('mongodb+srv://')) {
186
+ return '请输入有效的 MongoDB 连接字符串';
187
+ }
188
+ return true;
189
+ }
190
+ },
191
+ {
192
+ type: 'input',
193
+ name: 'dbName',
194
+ message: 'MongoDB 数据库名:',
195
+ default: 'zhin_bot',
196
+ validate: (input) => {
197
+ if (!input.trim())
198
+ return '数据库名不能为空';
199
+ return true;
200
+ }
201
+ }
202
+ ]);
203
+ return {
204
+ dialect: 'mongodb',
205
+ url,
206
+ dbName
207
+ };
208
+ }
209
+ // Redis 配置
210
+ async function configureRedis() {
211
+ const config = await inquirer.prompt([
212
+ {
213
+ type: 'input',
214
+ name: 'host',
215
+ message: 'Redis 主机地址:',
216
+ default: 'localhost'
217
+ },
218
+ {
219
+ type: 'input',
220
+ name: 'port',
221
+ message: 'Redis 端口:',
222
+ default: '6379',
223
+ validate: (input) => {
224
+ const port = parseInt(input);
225
+ if (isNaN(port) || port < 1 || port > 65535) {
226
+ return '请输入有效的端口号 (1-65535)';
227
+ }
228
+ return true;
229
+ }
230
+ },
231
+ {
232
+ type: 'password',
233
+ name: 'password',
234
+ message: 'Redis 密码 (可选):'
235
+ },
236
+ {
237
+ type: 'input',
238
+ name: 'db',
239
+ message: 'Redis 数据库索引:',
240
+ default: '0',
241
+ validate: (input) => {
242
+ const db = parseInt(input);
243
+ if (isNaN(db) || db < 0) {
244
+ return '请输入有效的数据库索引 (>= 0)';
245
+ }
246
+ return true;
247
+ }
248
+ }
249
+ ]);
250
+ return {
251
+ dialect: 'redis',
252
+ socket: {
253
+ host: config.host,
254
+ port: parseInt(config.port)
255
+ },
256
+ password: config.password || undefined,
257
+ database: parseInt(config.db)
258
+ };
259
+ }
260
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export type { InitOptions, DatabaseConfig } from './types.js';
2
+ export { DATABASE_PACKAGES } from './types.js';
3
+ export type { AdapterSetupResult } from './adapter.js';
4
+ export { configureAdapters, generateAdapterEnvVars, generateBotsConfigYaml, generateBotsConfigJSON, generateBotsConfigToml, getAdapterDependencies, getAdapterSetupNotes, } from './adapter.js';
5
+ export { ADAPTERS_DOCS_URL, ADAPTERS_INDEX_URL, ADAPTERS_ESSENTIALS_URL, adapterDocsUrl, } from './adapter-configurers.js';
6
+ export type { AISetupConfig } from './ai.js';
7
+ export { configureAI, generateAIEnvVars, generateAIConfigYaml, generateAIConfigJSON, generateAIConfigToml, RECOMMENDED_AI_DEFAULTS, } from './ai.js';
8
+ export { configureDatabaseOptions } from './database.js';
9
+ export { MCP_SDK_VERSION, getAIDependencies, ensureDatabaseForAI, ensureDatabaseForAdapters, } from './project-deps.js';
10
+ export { CONSOLE_HOST_PLUGINS, applyDatabaseToConfig, applyAdaptersToConfig, applyAIToConfig, appendWizardEnvVars, collectWizardDependencies, mergeDependenciesIntoPackageJson, finalizeWizardOptions, applyWizardOptionsToConfig, } from './apply.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { DATABASE_PACKAGES } from './types.js';
2
+ export { configureAdapters, generateAdapterEnvVars, generateBotsConfigYaml, generateBotsConfigJSON, generateBotsConfigToml, getAdapterDependencies, getAdapterSetupNotes, } from './adapter.js';
3
+ export { ADAPTERS_DOCS_URL, ADAPTERS_INDEX_URL, ADAPTERS_ESSENTIALS_URL, adapterDocsUrl, } from './adapter-configurers.js';
4
+ export { configureAI, generateAIEnvVars, generateAIConfigYaml, generateAIConfigJSON, generateAIConfigToml, RECOMMENDED_AI_DEFAULTS, } from './ai.js';
5
+ export { configureDatabaseOptions } from './database.js';
6
+ export { MCP_SDK_VERSION, getAIDependencies, ensureDatabaseForAI, ensureDatabaseForAdapters, } from './project-deps.js';
7
+ export { CONSOLE_HOST_PLUGINS, applyDatabaseToConfig, applyAdaptersToConfig, applyAIToConfig, appendWizardEnvVars, collectWizardDependencies, mergeDependenciesIntoPackageJson, finalizeWizardOptions, applyWizardOptionsToConfig, } from './apply.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { AISetupConfig } from './ai.js';
2
+ import type { InitOptions } from './types.js';
3
+ /** 与 monorepo 中 agent / test-bot 对齐的 MCP SDK 版本 */
4
+ export declare const MCP_SDK_VERSION = "^1.29.0";
5
+ /**
6
+ * AI 启用时预装 MCP SDK,避免 memoryMcp / mcpServers 运行时报 optional peer 缺失。
7
+ */
8
+ export declare function getAIDependencies(ai?: AISetupConfig): Record<string, string>;
9
+ /**
10
+ * AI 会话持久化默认开启时,若用户未选数据库则自动补 SQLite(零配置、与 inbox 一致)。
11
+ * `-y` Stable 路径 intentionally 无数据库,与 examples/minimal-bot 对齐,此处跳过。
12
+ */
13
+ export declare function ensureDatabaseForAI(options: InitOptions): void;
14
+ /**
15
+ * 所选适配器(如 GitHub)需要 database 时自动补 SQLite。
16
+ */
17
+ export declare function ensureDatabaseForAdapters(options: InitOptions): void;
18
+ //# sourceMappingURL=project-deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-deps.d.ts","sourceRoot":"","sources":["../src/project-deps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,mDAAmD;AACnD,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK5E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAa9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAUpE"}
@@ -0,0 +1,49 @@
1
+ /** 与 monorepo 中 agent / test-bot 对齐的 MCP SDK 版本 */
2
+ export const MCP_SDK_VERSION = '^1.29.0';
3
+ /**
4
+ * AI 启用时预装 MCP SDK,避免 memoryMcp / mcpServers 运行时报 optional peer 缺失。
5
+ */
6
+ export function getAIDependencies(ai) {
7
+ if (!ai?.enabled)
8
+ return {};
9
+ return {
10
+ '@modelcontextprotocol/sdk': MCP_SDK_VERSION,
11
+ };
12
+ }
13
+ /**
14
+ * AI 会话持久化默认开启时,若用户未选数据库则自动补 SQLite(零配置、与 inbox 一致)。
15
+ * `-y` Stable 路径 intentionally 无数据库,与 examples/minimal-bot 对齐,此处跳过。
16
+ */
17
+ export function ensureDatabaseForAI(options) {
18
+ if (options.yes)
19
+ return;
20
+ if (!options.ai?.enabled)
21
+ return;
22
+ if (options.database)
23
+ return;
24
+ const useDatabase = options.ai.sessions?.useDatabase !== false;
25
+ if (!useDatabase)
26
+ return;
27
+ options.database = {
28
+ dialect: 'sqlite',
29
+ filename: './data/bot.db',
30
+ mode: 'wal',
31
+ };
32
+ }
33
+ /**
34
+ * 所选适配器(如 GitHub)需要 database 时自动补 SQLite。
35
+ */
36
+ export function ensureDatabaseForAdapters(options) {
37
+ if (options.yes)
38
+ return;
39
+ if (options.database)
40
+ return;
41
+ if (!options.adapters?.requiresDatabase)
42
+ return;
43
+ options.database = {
44
+ dialect: 'sqlite',
45
+ filename: './data/bot.db',
46
+ mode: 'wal',
47
+ };
48
+ }
49
+ //# sourceMappingURL=project-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-deps.js","sourceRoot":"","sources":["../src/project-deps.ts"],"names":[],"mappings":"AAGA,mDAAmD;AACnD,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAkB;IAClD,IAAI,CAAC,EAAE,EAAE,OAAO;QAAE,OAAO,EAAE,CAAC;IAC5B,OAAO;QACL,2BAA2B,EAAE,eAAe;KAC7C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAoB;IACtD,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO;IACxB,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO;QAAE,OAAO;IACjC,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO;IAE7B,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,KAAK,CAAC;IAC/D,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,OAAO,CAAC,QAAQ,GAAG;QACjB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,eAAe;QACzB,IAAI,EAAE,KAAK;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAoB;IAC5D,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO;IACxB,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO;IAC7B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB;QAAE,OAAO;IAEhD,OAAO,CAAC,QAAQ,GAAG;QACjB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,eAAe;QACzB,IAAI,EAAE,KAAK;KACZ,CAAC;AACJ,CAAC"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ import type { AISetupConfig } from './ai.js';
2
+ import type { AdapterSetupResult } from './adapter.js';
3
+ export type { AISetupConfig } from './ai.js';
4
+ export type { AdapterSetupResult } from './adapter.js';
5
+ export interface InitOptions {
6
+ name?: string;
7
+ config?: 'json' | 'yaml' | 'toml';
8
+ runtime?: 'node' | 'bun';
9
+ yes?: boolean;
10
+ httpToken?: string;
11
+ database?: DatabaseConfig;
12
+ ai?: AISetupConfig;
13
+ adapters?: AdapterSetupResult;
14
+ installGlobalCli?: boolean;
15
+ devSkills?: boolean;
16
+ }
17
+ export interface DatabaseConfig {
18
+ dialect: 'sqlite' | 'mysql' | 'pg' | 'mongodb' | 'redis';
19
+ [key: string]: any;
20
+ }
21
+ export declare const DATABASE_PACKAGES: Record<DatabaseConfig['dialect'], string | undefined>;
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,EAAE,CAAC,EAAE,aAAa,CAAC;IACnB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAGD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAMnF,CAAC"}
package/lib/types.js ADDED
@@ -0,0 +1,9 @@
1
+ // 数据库配置映射(SQLite 使用 Node 内置 node:sqlite,无需额外安装)
2
+ export const DATABASE_PACKAGES = {
3
+ sqlite: undefined,
4
+ mysql: 'mysql2',
5
+ pg: 'pg',
6
+ mongodb: 'mongodb',
7
+ redis: 'redis'
8
+ };
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAwBA,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAA0D;IACtF,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,QAAQ;IACf,EAAE,EAAE,IAAI;IACR,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACf,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@zhin.js/scaffold-wizard",
3
+ "version": "0.1.0",
4
+ "description": "Shared interactive scaffold wizard for create-zhin-app and @zhin.js/cli",
5
+ "type": "module",
6
+ "main": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/index.d.ts",
11
+ "development": "./src/index.ts",
12
+ "import": "./lib/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "lib",
17
+ "src"
18
+ ],
19
+ "dependencies": {
20
+ "chalk": "^5.6.2",
21
+ "fs-extra": "^11.3.5",
22
+ "inquirer": "^14.0.2"
23
+ },
24
+ "devDependencies": {
25
+ "@types/fs-extra": "^11.0.4",
26
+ "@types/inquirer": "^9.0.7",
27
+ "@types/node": "^25.9.1",
28
+ "typescript": "^6.0.3"
29
+ },
30
+ "engines": {
31
+ "node": "^20.19.0 || >=22.12.0"
32
+ },
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/zhinjs/zhin.git",
37
+ "directory": "packages/toolkit/scaffold-wizard"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public",
41
+ "registry": "https://registry.npmjs.org"
42
+ },
43
+ "scripts": {
44
+ "build": "tsc",
45
+ "clean": "rimraf lib",
46
+ "test": "vitest run --root ../../.. packages/toolkit/scaffold-wizard/tests"
47
+ }
48
+ }