create-zenstack 3.0.0-alpha.9 → 3.0.0-beta.2
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/index.cjs +32 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +32 -7
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -59,14 +59,15 @@ model Post {
|
|
|
59
59
|
}
|
|
60
60
|
`;
|
|
61
61
|
var STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';
|
|
62
|
-
import { schema } from './zenstack/schema';
|
|
63
62
|
import SQLite from 'better-sqlite3';
|
|
63
|
+
import { SqliteDialect } from 'kysely';
|
|
64
|
+
import { schema } from './zenstack/schema';
|
|
64
65
|
|
|
65
66
|
async function main() {
|
|
66
67
|
const client = new ZenStackClient(schema, {
|
|
67
|
-
|
|
68
|
+
dialect: new SqliteDialect({
|
|
68
69
|
database: new SQLite('./zenstack/dev.db'),
|
|
69
|
-
},
|
|
70
|
+
}),
|
|
70
71
|
});
|
|
71
72
|
const user = await client.user.create({
|
|
72
73
|
data: {
|
|
@@ -127,6 +128,7 @@ function initProject(name) {
|
|
|
127
128
|
},
|
|
128
129
|
license: "ISC"
|
|
129
130
|
}, null, 2));
|
|
131
|
+
createVsCodeConfig();
|
|
130
132
|
const packages = [
|
|
131
133
|
{
|
|
132
134
|
name: "@zenstackhq/cli@next",
|
|
@@ -175,18 +177,25 @@ function initProject(name) {
|
|
|
175
177
|
import_node_fs.default.mkdirSync("zenstack");
|
|
176
178
|
import_node_fs.default.writeFileSync("zenstack/schema.zmodel", STARTER_ZMODEL);
|
|
177
179
|
import_node_fs.default.writeFileSync("main.ts", STARTER_MAIN_TS);
|
|
178
|
-
runCommand(`${agentExec}
|
|
179
|
-
runCommand(`${agentExec}
|
|
180
|
+
runCommand(`${agentExec} zen generate`, "Running `zen generate`");
|
|
181
|
+
runCommand(`${agentExec} zen db push`, "Running `zen db push`");
|
|
182
|
+
console.log(`Running \`${agent} run dev\``);
|
|
183
|
+
(0, import_node_child_process.execSync)(`${agent} run dev`, {
|
|
184
|
+
stdio: "inherit"
|
|
185
|
+
});
|
|
186
|
+
console.log(import_colors.default.green("Project setup completed!"));
|
|
180
187
|
}
|
|
181
188
|
__name(initProject, "initProject");
|
|
182
189
|
function installPackage(pkg) {
|
|
183
190
|
runCommand(`${agent} install ${pkg.name} ${pkg.dev ? saveDev : ""}`, `Installing "${pkg.name}"`);
|
|
184
191
|
}
|
|
185
192
|
__name(installPackage, "installPackage");
|
|
186
|
-
function runCommand(cmd, status) {
|
|
193
|
+
function runCommand(cmd, status, stdio = "ignore") {
|
|
187
194
|
const spinner = (0, import_ora.default)(status).start();
|
|
188
195
|
try {
|
|
189
|
-
(0, import_node_child_process.execSync)(cmd
|
|
196
|
+
(0, import_node_child_process.execSync)(cmd, {
|
|
197
|
+
stdio
|
|
198
|
+
});
|
|
190
199
|
spinner.succeed();
|
|
191
200
|
} catch (e) {
|
|
192
201
|
spinner.fail();
|
|
@@ -194,4 +203,20 @@ function runCommand(cmd, status) {
|
|
|
194
203
|
}
|
|
195
204
|
}
|
|
196
205
|
__name(runCommand, "runCommand");
|
|
206
|
+
function createVsCodeConfig() {
|
|
207
|
+
import_node_fs.default.mkdirSync(".vscode", {
|
|
208
|
+
recursive: true
|
|
209
|
+
});
|
|
210
|
+
import_node_fs.default.writeFileSync(".vscode/settings.json", JSON.stringify({
|
|
211
|
+
"files.associations": {
|
|
212
|
+
"*.zmodel": "zmodel-v3"
|
|
213
|
+
}
|
|
214
|
+
}, null, 4));
|
|
215
|
+
import_node_fs.default.writeFileSync(".vscode/extensions.json", JSON.stringify({
|
|
216
|
+
recommendations: [
|
|
217
|
+
"zenstack.zenstack-v3"
|
|
218
|
+
]
|
|
219
|
+
}, null, 4));
|
|
220
|
+
}
|
|
221
|
+
__name(createVsCodeConfig, "createVsCodeConfig");
|
|
197
222
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../../cli/src/actions/templates.ts"],"sourcesContent":["import colors from 'colors';\nimport { Command } from 'commander';\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport ora from 'ora';\nimport { STARTER_MAIN_TS, STARTER_ZMODEL } from './templates';\n\n// detect package manager\nconst npmAgent = process.env['npm_config_user_agent'];\nlet agent = 'npm';\nlet agentExec = 'npx';\nlet saveDev = '--save-dev';\n\nif (npmAgent?.includes('pnpm')) {\n agent = 'pnpm';\n agentExec = 'pnpm';\n} else if (npmAgent?.includes('yarn')) {\n agent = 'yarn';\n agentExec = 'npx';\n saveDev = '--dev';\n} else if (npmAgent?.includes('bun')) {\n agent = 'bun';\n agentExec = 'bun';\n}\n\nconst program = new Command('create-zenstack');\n\nprogram.arguments('<project-name>').action((projectName) => {\n initProject(projectName);\n});\n\nprogram.parse(process.argv);\n\nfunction initProject(name: string) {\n // create folder\n if (fs.existsSync(name)) {\n console.log(colors.red(`Directory ${name} already exists.`));\n process.exit(1);\n }\n fs.mkdirSync(name);\n process.chdir(name);\n\n console.log(colors.gray(`Using package manager: ${agent}`));\n\n // create package.json\n fs.writeFileSync(\n 'package.json',\n JSON.stringify(\n {\n name: 'zenstack-app',\n version: '1.0.0',\n description: 'Scaffolded with create-zenstack',\n type: 'module',\n scripts: {\n dev: 'tsx main.ts',\n },\n license: 'ISC',\n },\n null,\n 2,\n ),\n );\n\n // install packages\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n { name: 'better-sqlite3', dev: false },\n { name: '@types/better-sqlite3', dev: true },\n { name: 'typescript', dev: true },\n { name: 'tsx', dev: true },\n { name: '@types/node', dev: true },\n ];\n for (const pkg of packages) {\n installPackage(pkg);\n }\n\n // create tsconfig.json\n fs.writeFileSync(\n 'tsconfig.json',\n JSON.stringify(\n {\n compilerOptions: {\n module: 'esnext',\n target: 'esnext',\n moduleResolution: 'bundler',\n sourceMap: true,\n outDir: 'dist',\n strict: true,\n skipLibCheck: true,\n esModuleInterop: true,\n },\n },\n null,\n 2,\n ),\n );\n\n // create schema.zmodel\n fs.mkdirSync('zenstack');\n fs.writeFileSync('zenstack/schema.zmodel', STARTER_ZMODEL);\n\n // create main.ts\n fs.writeFileSync('main.ts', STARTER_MAIN_TS);\n\n // run `
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../../cli/src/actions/templates.ts"],"sourcesContent":["import colors from 'colors';\nimport { Command } from 'commander';\nimport { execSync, type StdioOptions } from 'node:child_process';\nimport fs from 'node:fs';\nimport ora from 'ora';\nimport { STARTER_MAIN_TS, STARTER_ZMODEL } from './templates';\n\n// detect package manager\nconst npmAgent = process.env['npm_config_user_agent'];\nlet agent = 'npm';\nlet agentExec = 'npx';\nlet saveDev = '--save-dev';\n\nif (npmAgent?.includes('pnpm')) {\n agent = 'pnpm';\n agentExec = 'pnpm';\n} else if (npmAgent?.includes('yarn')) {\n agent = 'yarn';\n agentExec = 'npx';\n saveDev = '--dev';\n} else if (npmAgent?.includes('bun')) {\n agent = 'bun';\n agentExec = 'bun';\n}\n\nconst program = new Command('create-zenstack');\n\nprogram.arguments('<project-name>').action((projectName) => {\n initProject(projectName);\n});\n\nprogram.parse(process.argv);\n\nfunction initProject(name: string) {\n // create folder\n if (fs.existsSync(name)) {\n console.log(colors.red(`Directory ${name} already exists.`));\n process.exit(1);\n }\n fs.mkdirSync(name);\n process.chdir(name);\n\n console.log(colors.gray(`Using package manager: ${agent}`));\n\n // create package.json\n fs.writeFileSync(\n 'package.json',\n JSON.stringify(\n {\n name: 'zenstack-app',\n version: '1.0.0',\n description: 'Scaffolded with create-zenstack',\n type: 'module',\n scripts: {\n dev: 'tsx main.ts',\n },\n license: 'ISC',\n },\n null,\n 2,\n ),\n );\n\n // create VSCode config files\n createVsCodeConfig();\n\n // install packages\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n { name: 'better-sqlite3', dev: false },\n { name: '@types/better-sqlite3', dev: true },\n { name: 'typescript', dev: true },\n { name: 'tsx', dev: true },\n { name: '@types/node', dev: true },\n ];\n for (const pkg of packages) {\n installPackage(pkg);\n }\n\n // create tsconfig.json\n fs.writeFileSync(\n 'tsconfig.json',\n JSON.stringify(\n {\n compilerOptions: {\n module: 'esnext',\n target: 'esnext',\n moduleResolution: 'bundler',\n sourceMap: true,\n outDir: 'dist',\n strict: true,\n skipLibCheck: true,\n esModuleInterop: true,\n },\n },\n null,\n 2,\n ),\n );\n\n // create schema.zmodel\n fs.mkdirSync('zenstack');\n fs.writeFileSync('zenstack/schema.zmodel', STARTER_ZMODEL);\n\n // create main.ts\n fs.writeFileSync('main.ts', STARTER_MAIN_TS);\n\n // run `zen generate`\n runCommand(`${agentExec} zen generate`, 'Running `zen generate`');\n\n // run `zen db push`\n runCommand(`${agentExec} zen db push`, 'Running `zen db push`');\n\n // run `$agent run dev`\n console.log(`Running \\`${agent} run dev\\``);\n execSync(`${agent} run dev`, { stdio: 'inherit' });\n console.log(colors.green('Project setup completed!'));\n}\n\nfunction installPackage(pkg: { name: string; dev: boolean }) {\n runCommand(`${agent} install ${pkg.name} ${pkg.dev ? saveDev : ''}`, `Installing \"${pkg.name}\"`);\n}\n\nfunction runCommand(cmd: string, status: string, stdio: StdioOptions = 'ignore') {\n const spinner = ora(status).start();\n try {\n execSync(cmd, { stdio });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n}\n\nfunction createVsCodeConfig() {\n fs.mkdirSync('.vscode', { recursive: true });\n fs.writeFileSync(\n '.vscode/settings.json',\n JSON.stringify(\n {\n 'files.associations': {\n '*.zmodel': 'zmodel-v3',\n },\n },\n null,\n 4,\n ),\n );\n fs.writeFileSync('.vscode/extensions.json', JSON.stringify({ recommendations: ['zenstack.zenstack-v3'] }, null, 4));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n"],"mappings":"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","names":["STARTER_ZMODEL","STARTER_MAIN_TS","npmAgent","process","env","agent","agentExec","saveDev","includes","program","Command","arguments","action","projectName","initProject","parse","argv","name","fs","existsSync","console","log","colors","red","exit","mkdirSync","chdir","gray","writeFileSync","JSON","stringify","version","description","type","scripts","dev","license","createVsCodeConfig","packages","pkg","installPackage","compilerOptions","module","target","moduleResolution","sourceMap","outDir","strict","skipLibCheck","esModuleInterop","STARTER_ZMODEL","STARTER_MAIN_TS","runCommand","execSync","stdio","green","cmd","status","spinner","ora","start","succeed","e","fail","recursive","recommendations"]}
|
package/dist/index.js
CHANGED
|
@@ -37,14 +37,15 @@ model Post {
|
|
|
37
37
|
}
|
|
38
38
|
`;
|
|
39
39
|
var STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';
|
|
40
|
-
import { schema } from './zenstack/schema';
|
|
41
40
|
import SQLite from 'better-sqlite3';
|
|
41
|
+
import { SqliteDialect } from 'kysely';
|
|
42
|
+
import { schema } from './zenstack/schema';
|
|
42
43
|
|
|
43
44
|
async function main() {
|
|
44
45
|
const client = new ZenStackClient(schema, {
|
|
45
|
-
|
|
46
|
+
dialect: new SqliteDialect({
|
|
46
47
|
database: new SQLite('./zenstack/dev.db'),
|
|
47
|
-
},
|
|
48
|
+
}),
|
|
48
49
|
});
|
|
49
50
|
const user = await client.user.create({
|
|
50
51
|
data: {
|
|
@@ -105,6 +106,7 @@ function initProject(name) {
|
|
|
105
106
|
},
|
|
106
107
|
license: "ISC"
|
|
107
108
|
}, null, 2));
|
|
109
|
+
createVsCodeConfig();
|
|
108
110
|
const packages = [
|
|
109
111
|
{
|
|
110
112
|
name: "@zenstackhq/cli@next",
|
|
@@ -153,18 +155,25 @@ function initProject(name) {
|
|
|
153
155
|
fs.mkdirSync("zenstack");
|
|
154
156
|
fs.writeFileSync("zenstack/schema.zmodel", STARTER_ZMODEL);
|
|
155
157
|
fs.writeFileSync("main.ts", STARTER_MAIN_TS);
|
|
156
|
-
runCommand(`${agentExec}
|
|
157
|
-
runCommand(`${agentExec}
|
|
158
|
+
runCommand(`${agentExec} zen generate`, "Running `zen generate`");
|
|
159
|
+
runCommand(`${agentExec} zen db push`, "Running `zen db push`");
|
|
160
|
+
console.log(`Running \`${agent} run dev\``);
|
|
161
|
+
execSync(`${agent} run dev`, {
|
|
162
|
+
stdio: "inherit"
|
|
163
|
+
});
|
|
164
|
+
console.log(colors.green("Project setup completed!"));
|
|
158
165
|
}
|
|
159
166
|
__name(initProject, "initProject");
|
|
160
167
|
function installPackage(pkg) {
|
|
161
168
|
runCommand(`${agent} install ${pkg.name} ${pkg.dev ? saveDev : ""}`, `Installing "${pkg.name}"`);
|
|
162
169
|
}
|
|
163
170
|
__name(installPackage, "installPackage");
|
|
164
|
-
function runCommand(cmd, status) {
|
|
171
|
+
function runCommand(cmd, status, stdio = "ignore") {
|
|
165
172
|
const spinner = ora(status).start();
|
|
166
173
|
try {
|
|
167
|
-
execSync(cmd
|
|
174
|
+
execSync(cmd, {
|
|
175
|
+
stdio
|
|
176
|
+
});
|
|
168
177
|
spinner.succeed();
|
|
169
178
|
} catch (e) {
|
|
170
179
|
spinner.fail();
|
|
@@ -172,4 +181,20 @@ function runCommand(cmd, status) {
|
|
|
172
181
|
}
|
|
173
182
|
}
|
|
174
183
|
__name(runCommand, "runCommand");
|
|
184
|
+
function createVsCodeConfig() {
|
|
185
|
+
fs.mkdirSync(".vscode", {
|
|
186
|
+
recursive: true
|
|
187
|
+
});
|
|
188
|
+
fs.writeFileSync(".vscode/settings.json", JSON.stringify({
|
|
189
|
+
"files.associations": {
|
|
190
|
+
"*.zmodel": "zmodel-v3"
|
|
191
|
+
}
|
|
192
|
+
}, null, 4));
|
|
193
|
+
fs.writeFileSync(".vscode/extensions.json", JSON.stringify({
|
|
194
|
+
recommendations: [
|
|
195
|
+
"zenstack.zenstack-v3"
|
|
196
|
+
]
|
|
197
|
+
}, null, 4));
|
|
198
|
+
}
|
|
199
|
+
__name(createVsCodeConfig, "createVsCodeConfig");
|
|
175
200
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../../cli/src/actions/templates.ts"],"sourcesContent":["import colors from 'colors';\nimport { Command } from 'commander';\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport ora from 'ora';\nimport { STARTER_MAIN_TS, STARTER_ZMODEL } from './templates';\n\n// detect package manager\nconst npmAgent = process.env['npm_config_user_agent'];\nlet agent = 'npm';\nlet agentExec = 'npx';\nlet saveDev = '--save-dev';\n\nif (npmAgent?.includes('pnpm')) {\n agent = 'pnpm';\n agentExec = 'pnpm';\n} else if (npmAgent?.includes('yarn')) {\n agent = 'yarn';\n agentExec = 'npx';\n saveDev = '--dev';\n} else if (npmAgent?.includes('bun')) {\n agent = 'bun';\n agentExec = 'bun';\n}\n\nconst program = new Command('create-zenstack');\n\nprogram.arguments('<project-name>').action((projectName) => {\n initProject(projectName);\n});\n\nprogram.parse(process.argv);\n\nfunction initProject(name: string) {\n // create folder\n if (fs.existsSync(name)) {\n console.log(colors.red(`Directory ${name} already exists.`));\n process.exit(1);\n }\n fs.mkdirSync(name);\n process.chdir(name);\n\n console.log(colors.gray(`Using package manager: ${agent}`));\n\n // create package.json\n fs.writeFileSync(\n 'package.json',\n JSON.stringify(\n {\n name: 'zenstack-app',\n version: '1.0.0',\n description: 'Scaffolded with create-zenstack',\n type: 'module',\n scripts: {\n dev: 'tsx main.ts',\n },\n license: 'ISC',\n },\n null,\n 2,\n ),\n );\n\n // install packages\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n { name: 'better-sqlite3', dev: false },\n { name: '@types/better-sqlite3', dev: true },\n { name: 'typescript', dev: true },\n { name: 'tsx', dev: true },\n { name: '@types/node', dev: true },\n ];\n for (const pkg of packages) {\n installPackage(pkg);\n }\n\n // create tsconfig.json\n fs.writeFileSync(\n 'tsconfig.json',\n JSON.stringify(\n {\n compilerOptions: {\n module: 'esnext',\n target: 'esnext',\n moduleResolution: 'bundler',\n sourceMap: true,\n outDir: 'dist',\n strict: true,\n skipLibCheck: true,\n esModuleInterop: true,\n },\n },\n null,\n 2,\n ),\n );\n\n // create schema.zmodel\n fs.mkdirSync('zenstack');\n fs.writeFileSync('zenstack/schema.zmodel', STARTER_ZMODEL);\n\n // create main.ts\n fs.writeFileSync('main.ts', STARTER_MAIN_TS);\n\n // run `
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../../cli/src/actions/templates.ts"],"sourcesContent":["import colors from 'colors';\nimport { Command } from 'commander';\nimport { execSync, type StdioOptions } from 'node:child_process';\nimport fs from 'node:fs';\nimport ora from 'ora';\nimport { STARTER_MAIN_TS, STARTER_ZMODEL } from './templates';\n\n// detect package manager\nconst npmAgent = process.env['npm_config_user_agent'];\nlet agent = 'npm';\nlet agentExec = 'npx';\nlet saveDev = '--save-dev';\n\nif (npmAgent?.includes('pnpm')) {\n agent = 'pnpm';\n agentExec = 'pnpm';\n} else if (npmAgent?.includes('yarn')) {\n agent = 'yarn';\n agentExec = 'npx';\n saveDev = '--dev';\n} else if (npmAgent?.includes('bun')) {\n agent = 'bun';\n agentExec = 'bun';\n}\n\nconst program = new Command('create-zenstack');\n\nprogram.arguments('<project-name>').action((projectName) => {\n initProject(projectName);\n});\n\nprogram.parse(process.argv);\n\nfunction initProject(name: string) {\n // create folder\n if (fs.existsSync(name)) {\n console.log(colors.red(`Directory ${name} already exists.`));\n process.exit(1);\n }\n fs.mkdirSync(name);\n process.chdir(name);\n\n console.log(colors.gray(`Using package manager: ${agent}`));\n\n // create package.json\n fs.writeFileSync(\n 'package.json',\n JSON.stringify(\n {\n name: 'zenstack-app',\n version: '1.0.0',\n description: 'Scaffolded with create-zenstack',\n type: 'module',\n scripts: {\n dev: 'tsx main.ts',\n },\n license: 'ISC',\n },\n null,\n 2,\n ),\n );\n\n // create VSCode config files\n createVsCodeConfig();\n\n // install packages\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n { name: 'better-sqlite3', dev: false },\n { name: '@types/better-sqlite3', dev: true },\n { name: 'typescript', dev: true },\n { name: 'tsx', dev: true },\n { name: '@types/node', dev: true },\n ];\n for (const pkg of packages) {\n installPackage(pkg);\n }\n\n // create tsconfig.json\n fs.writeFileSync(\n 'tsconfig.json',\n JSON.stringify(\n {\n compilerOptions: {\n module: 'esnext',\n target: 'esnext',\n moduleResolution: 'bundler',\n sourceMap: true,\n outDir: 'dist',\n strict: true,\n skipLibCheck: true,\n esModuleInterop: true,\n },\n },\n null,\n 2,\n ),\n );\n\n // create schema.zmodel\n fs.mkdirSync('zenstack');\n fs.writeFileSync('zenstack/schema.zmodel', STARTER_ZMODEL);\n\n // create main.ts\n fs.writeFileSync('main.ts', STARTER_MAIN_TS);\n\n // run `zen generate`\n runCommand(`${agentExec} zen generate`, 'Running `zen generate`');\n\n // run `zen db push`\n runCommand(`${agentExec} zen db push`, 'Running `zen db push`');\n\n // run `$agent run dev`\n console.log(`Running \\`${agent} run dev\\``);\n execSync(`${agent} run dev`, { stdio: 'inherit' });\n console.log(colors.green('Project setup completed!'));\n}\n\nfunction installPackage(pkg: { name: string; dev: boolean }) {\n runCommand(`${agent} install ${pkg.name} ${pkg.dev ? saveDev : ''}`, `Installing \"${pkg.name}\"`);\n}\n\nfunction runCommand(cmd: string, status: string, stdio: StdioOptions = 'ignore') {\n const spinner = ora(status).start();\n try {\n execSync(cmd, { stdio });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n}\n\nfunction createVsCodeConfig() {\n fs.mkdirSync('.vscode', { recursive: true });\n fs.writeFileSync(\n '.vscode/settings.json',\n JSON.stringify(\n {\n 'files.associations': {\n '*.zmodel': 'zmodel-v3',\n },\n },\n null,\n 4,\n ),\n );\n fs.writeFileSync('.vscode/extensions.json', JSON.stringify({ recommendations: ['zenstack.zenstack-v3'] }, null, 4));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n"],"mappings":"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","names":["colors","Command","execSync","fs","ora","STARTER_ZMODEL","STARTER_MAIN_TS","npmAgent","process","env","agent","agentExec","saveDev","includes","program","Command","arguments","action","projectName","initProject","parse","argv","name","fs","existsSync","console","log","colors","red","exit","mkdirSync","chdir","gray","writeFileSync","JSON","stringify","version","description","type","scripts","dev","license","createVsCodeConfig","packages","pkg","installPackage","compilerOptions","module","target","moduleResolution","sourceMap","outDir","strict","skipLibCheck","esModuleInterop","STARTER_ZMODEL","STARTER_MAIN_TS","runCommand","execSync","stdio","green","cmd","status","spinner","ora","start","succeed","e","fail","recursive","recommendations"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-zenstack",
|
|
3
|
-
"version": "3.0.0-
|
|
3
|
+
"version": "3.0.0-beta.2",
|
|
4
4
|
"description": "Create a new ZenStack project",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [],
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"ora": "^5.4.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@zenstackhq/eslint-config": "3.0.0-
|
|
34
|
-
"@zenstackhq/typescript-config": "3.0.0-
|
|
33
|
+
"@zenstackhq/eslint-config": "3.0.0-beta.2",
|
|
34
|
+
"@zenstackhq/typescript-config": "3.0.0-beta.2"
|
|
35
35
|
},
|
|
36
36
|
"scripts": {
|
|
37
|
-
"build": "tsup-node",
|
|
37
|
+
"build": "tsc --noEmit && tsup-node",
|
|
38
38
|
"lint": "eslint src --ext ts",
|
|
39
39
|
"pack": "pnpm pack"
|
|
40
40
|
}
|