create-zenstack 3.5.6 → 3.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/bin/cli CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import '../dist/index.js';
3
+ import '../dist/index.mjs';
package/dist/index.cjs CHANGED
@@ -1,37 +1,35 @@
1
- "use strict";
1
+ //#region \0rolldown/runtime.js
2
2
  var __create = Object.create;
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
8
  var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
16
17
  };
17
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
18
- // If the importer is in node compatibility mode or this is not an ESM
19
- // file that has been converted to a CommonJS file using a Babel-
20
- // compatible transform (i.e. "__esModule" has not been set), then set
21
- // "default" to the CommonJS "module.exports" for node compatibility.
22
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
23
- mod
24
- ));
25
-
26
- // src/index.ts
27
- var import_colors = __toESM(require("colors"), 1);
28
- var import_commander = require("commander");
29
- var import_node_child_process = require("child_process");
30
- var import_node_fs = __toESM(require("fs"), 1);
31
- var import_ora = __toESM(require("ora"), 1);
32
-
33
- // ../cli/src/actions/templates.ts
34
- var STARTER_ZMODEL = `// This is a sample model to get you started.
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
23
+ let colors = require("colors");
24
+ colors = __toESM(colors, 1);
25
+ let commander = require("commander");
26
+ let node_child_process = require("node:child_process");
27
+ let node_fs = require("node:fs");
28
+ node_fs = __toESM(node_fs, 1);
29
+ let ora = require("ora");
30
+ ora = __toESM(ora, 1);
31
+ //#region ../cli/src/actions/templates.ts
32
+ const STARTER_ZMODEL = `// This is a sample model to get you started.
35
33
 
36
34
  /// A sample data source using local sqlite db.
37
35
  datasource db {
@@ -58,7 +56,7 @@ model Post {
58
56
  authorId String
59
57
  }
60
58
  `;
61
- var STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';
59
+ const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';
62
60
  import { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';
63
61
  import SQLite from 'better-sqlite3';
64
62
  import { schema } from './zenstack/schema';
@@ -88,139 +86,116 @@ async function main() {
88
86
 
89
87
  main();
90
88
  `;
91
-
92
- // src/index.ts
93
- var npmAgent = process.env["npm_config_user_agent"];
94
- var agent = "npm";
95
- var agentExec = "npx";
96
- var saveDev = "--save-dev";
89
+ //#endregion
90
+ //#region src/index.ts
91
+ const npmAgent = process.env["npm_config_user_agent"];
92
+ let agent = "npm";
93
+ let agentExec = "npx";
94
+ let saveDev = "--save-dev";
97
95
  if (npmAgent?.includes("pnpm")) {
98
- agent = "pnpm";
99
- agentExec = "pnpm";
96
+ agent = "pnpm";
97
+ agentExec = "pnpm";
100
98
  } else if (npmAgent?.includes("yarn")) {
101
- agent = "yarn";
102
- agentExec = "npx";
103
- saveDev = "--dev";
99
+ agent = "yarn";
100
+ agentExec = "npx";
101
+ saveDev = "--dev";
104
102
  } else if (npmAgent?.includes("bun")) {
105
- agent = "bun";
106
- agentExec = "bun";
103
+ agent = "bun";
104
+ agentExec = "bun";
107
105
  }
108
- var program = new import_commander.Command("create-zenstack");
106
+ const program = new commander.Command("create-zenstack");
109
107
  program.arguments("<project-name>").action((projectName) => {
110
- initProject(projectName);
108
+ initProject(projectName);
111
109
  });
112
110
  program.parse(process.argv);
113
111
  function initProject(name) {
114
- if (import_node_fs.default.existsSync(name)) {
115
- console.log(import_colors.default.red(`Directory ${name} already exists.`));
116
- process.exit(1);
117
- }
118
- import_node_fs.default.mkdirSync(name);
119
- process.chdir(name);
120
- console.log(import_colors.default.gray(`Using package manager: ${agent}`));
121
- import_node_fs.default.writeFileSync("package.json", JSON.stringify({
122
- name: "zenstack-app",
123
- version: "1.0.0",
124
- description: "Scaffolded with create-zenstack",
125
- type: "module",
126
- scripts: {
127
- dev: "tsx main.ts"
128
- },
129
- license: "ISC"
130
- }, null, 2));
131
- createVsCodeConfig();
132
- const packages = [
133
- {
134
- name: "@zenstackhq/cli@latest",
135
- dev: true
136
- },
137
- {
138
- name: "@zenstackhq/schema@latest",
139
- dev: false
140
- },
141
- {
142
- name: "@zenstackhq/orm@latest",
143
- dev: false
144
- },
145
- {
146
- name: "better-sqlite3",
147
- dev: false
148
- },
149
- {
150
- name: "@types/better-sqlite3",
151
- dev: true
152
- },
153
- {
154
- name: "typescript",
155
- dev: true
156
- },
157
- {
158
- name: "tsx",
159
- dev: true
160
- },
161
- {
162
- name: "@types/node",
163
- dev: true
164
- }
165
- ];
166
- for (const pkg of packages) {
167
- installPackage(pkg);
168
- }
169
- import_node_fs.default.writeFileSync("tsconfig.json", JSON.stringify({
170
- compilerOptions: {
171
- module: "esnext",
172
- target: "esnext",
173
- moduleResolution: "bundler",
174
- sourceMap: true,
175
- outDir: "dist",
176
- strict: true,
177
- skipLibCheck: true,
178
- esModuleInterop: true
179
- }
180
- }, null, 2));
181
- import_node_fs.default.mkdirSync("zenstack");
182
- import_node_fs.default.writeFileSync("zenstack/schema.zmodel", STARTER_ZMODEL);
183
- import_node_fs.default.writeFileSync("main.ts", STARTER_MAIN_TS);
184
- runCommand(`${agentExec} zen generate`, "Running `zen generate`");
185
- runCommand(`${agentExec} zen db push`, "Running `zen db push`");
186
- console.log(`Running \`${agent} run dev\``);
187
- (0, import_node_child_process.execSync)(`${agent} run dev`, {
188
- stdio: "inherit"
189
- });
190
- console.log(import_colors.default.green("Project setup completed!"));
112
+ if (node_fs.default.existsSync(name)) {
113
+ console.log(colors.default.red(`Directory ${name} already exists.`));
114
+ process.exit(1);
115
+ }
116
+ node_fs.default.mkdirSync(name);
117
+ process.chdir(name);
118
+ console.log(colors.default.gray(`Using package manager: ${agent}`));
119
+ node_fs.default.writeFileSync("package.json", JSON.stringify({
120
+ name: "zenstack-app",
121
+ version: "1.0.0",
122
+ description: "Scaffolded with create-zenstack",
123
+ type: "module",
124
+ scripts: { dev: "tsx main.ts" },
125
+ license: "ISC"
126
+ }, null, 2));
127
+ createVsCodeConfig();
128
+ for (const pkg of [
129
+ {
130
+ name: "@zenstackhq/cli@latest",
131
+ dev: true
132
+ },
133
+ {
134
+ name: "@zenstackhq/schema@latest",
135
+ dev: false
136
+ },
137
+ {
138
+ name: "@zenstackhq/orm@latest",
139
+ dev: false
140
+ },
141
+ {
142
+ name: "better-sqlite3",
143
+ dev: false
144
+ },
145
+ {
146
+ name: "@types/better-sqlite3",
147
+ dev: true
148
+ },
149
+ {
150
+ name: "typescript",
151
+ dev: true
152
+ },
153
+ {
154
+ name: "tsx",
155
+ dev: true
156
+ },
157
+ {
158
+ name: "@types/node",
159
+ dev: true
160
+ }
161
+ ]) installPackage(pkg);
162
+ node_fs.default.writeFileSync("tsconfig.json", JSON.stringify({ compilerOptions: {
163
+ module: "esnext",
164
+ target: "esnext",
165
+ moduleResolution: "bundler",
166
+ sourceMap: true,
167
+ outDir: "dist",
168
+ strict: true,
169
+ skipLibCheck: true,
170
+ esModuleInterop: true
171
+ } }, null, 2));
172
+ node_fs.default.mkdirSync("zenstack");
173
+ node_fs.default.writeFileSync("zenstack/schema.zmodel", STARTER_ZMODEL);
174
+ node_fs.default.writeFileSync("main.ts", STARTER_MAIN_TS);
175
+ runCommand(`${agentExec} zen generate`, "Running `zen generate`");
176
+ runCommand(`${agentExec} zen db push`, "Running `zen db push`");
177
+ console.log(`Running \`${agent} run dev\``);
178
+ (0, node_child_process.execSync)(`${agent} run dev`, { stdio: "inherit" });
179
+ console.log(colors.default.green("Project setup completed!"));
191
180
  }
192
- __name(initProject, "initProject");
193
181
  function installPackage(pkg) {
194
- runCommand(`${agent} install ${pkg.name} ${pkg.dev ? saveDev : ""}`, `Installing "${pkg.name}"`);
182
+ runCommand(`${agent} install ${pkg.name} ${pkg.dev ? saveDev : ""}`, `Installing "${pkg.name}"`);
195
183
  }
196
- __name(installPackage, "installPackage");
197
184
  function runCommand(cmd, status, stdio = "ignore") {
198
- const spinner = (0, import_ora.default)(status).start();
199
- try {
200
- (0, import_node_child_process.execSync)(cmd, {
201
- stdio
202
- });
203
- spinner.succeed();
204
- } catch (e) {
205
- spinner.fail();
206
- throw e;
207
- }
185
+ const spinner = (0, ora.default)(status).start();
186
+ try {
187
+ (0, node_child_process.execSync)(cmd, { stdio });
188
+ spinner.succeed();
189
+ } catch (e) {
190
+ spinner.fail();
191
+ throw e;
192
+ }
208
193
  }
209
- __name(runCommand, "runCommand");
210
194
  function createVsCodeConfig() {
211
- import_node_fs.default.mkdirSync(".vscode", {
212
- recursive: true
213
- });
214
- import_node_fs.default.writeFileSync(".vscode/settings.json", JSON.stringify({
215
- "files.associations": {
216
- "*.zmodel": "zmodel-v3"
217
- }
218
- }, null, 4));
219
- import_node_fs.default.writeFileSync(".vscode/extensions.json", JSON.stringify({
220
- recommendations: [
221
- "zenstack.zenstack-v3"
222
- ]
223
- }, null, 4));
195
+ node_fs.default.mkdirSync(".vscode", { recursive: true });
196
+ node_fs.default.writeFileSync(".vscode/settings.json", JSON.stringify({ "files.associations": { "*.zmodel": "zmodel-v3" } }, null, 4));
197
+ node_fs.default.writeFileSync(".vscode/extensions.json", JSON.stringify({ recommendations: ["zenstack.zenstack-v3"] }, null, 4));
224
198
  }
225
- __name(createVsCodeConfig, "createVsCodeConfig");
199
+ //#endregion
200
+
226
201
  //# sourceMappingURL=index.cjs.map
@@ -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, 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@latest', dev: true },\n { name: '@zenstackhq/schema@latest', dev: false },\n { name: '@zenstackhq/orm@latest', 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], onDelete: Cascade)\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';\nimport { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';\nimport SQLite from 'better-sqlite3';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const db = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await db.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"]}
1
+ {"version":3,"file":"index.cjs","names":["Command","fs"],"sources":["../../cli/src/actions/templates.ts","../src/index.ts"],"sourcesContent":["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], onDelete: Cascade)\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';\nimport { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';\nimport SQLite from 'better-sqlite3';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const db = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await db.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","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@latest', dev: true },\n { name: '@zenstackhq/schema@latest', dev: false },\n { name: '@zenstackhq/orm@latest', 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"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -1,2 +1 @@
1
-
2
- export { }
1
+ export { };
@@ -0,0 +1 @@
1
+ export { };
package/dist/index.mjs ADDED
@@ -0,0 +1,177 @@
1
+ import colors from "colors";
2
+ import { Command } from "commander";
3
+ import { execSync } from "node:child_process";
4
+ import fs from "node:fs";
5
+ import ora from "ora";
6
+ //#region ../cli/src/actions/templates.ts
7
+ const STARTER_ZMODEL = `// This is a sample model to get you started.
8
+
9
+ /// A sample data source using local sqlite db.
10
+ datasource db {
11
+ provider = 'sqlite'
12
+ url = 'file:./dev.db'
13
+ }
14
+
15
+ /// User model
16
+ model User {
17
+ id String @id @default(cuid())
18
+ email String @unique @email @length(6, 32)
19
+ posts Post[]
20
+ }
21
+
22
+ /// Post model
23
+ model Post {
24
+ id String @id @default(cuid())
25
+ createdAt DateTime @default(now())
26
+ updatedAt DateTime @updatedAt
27
+ title String @length(1, 256)
28
+ content String
29
+ published Boolean @default(false)
30
+ author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
31
+ authorId String
32
+ }
33
+ `;
34
+ const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';
35
+ import { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';
36
+ import SQLite from 'better-sqlite3';
37
+ import { schema } from './zenstack/schema';
38
+
39
+ async function main() {
40
+ const db = new ZenStackClient(schema, {
41
+ dialect: new SqliteDialect({
42
+ database: new SQLite('./zenstack/dev.db'),
43
+ }),
44
+ });
45
+ const user = await db.user.create({
46
+ data: {
47
+ email: 'test@zenstack.dev',
48
+ posts: {
49
+ create: [
50
+ {
51
+ title: 'Hello World',
52
+ content: 'This is a test post',
53
+ },
54
+ ],
55
+ },
56
+ },
57
+ include: { posts: true }
58
+ });
59
+ console.log('User created:', user);
60
+ }
61
+
62
+ main();
63
+ `;
64
+ //#endregion
65
+ //#region src/index.ts
66
+ const npmAgent = process.env["npm_config_user_agent"];
67
+ let agent = "npm";
68
+ let agentExec = "npx";
69
+ let saveDev = "--save-dev";
70
+ if (npmAgent?.includes("pnpm")) {
71
+ agent = "pnpm";
72
+ agentExec = "pnpm";
73
+ } else if (npmAgent?.includes("yarn")) {
74
+ agent = "yarn";
75
+ agentExec = "npx";
76
+ saveDev = "--dev";
77
+ } else if (npmAgent?.includes("bun")) {
78
+ agent = "bun";
79
+ agentExec = "bun";
80
+ }
81
+ const program = new Command("create-zenstack");
82
+ program.arguments("<project-name>").action((projectName) => {
83
+ initProject(projectName);
84
+ });
85
+ program.parse(process.argv);
86
+ function initProject(name) {
87
+ if (fs.existsSync(name)) {
88
+ console.log(colors.red(`Directory ${name} already exists.`));
89
+ process.exit(1);
90
+ }
91
+ fs.mkdirSync(name);
92
+ process.chdir(name);
93
+ console.log(colors.gray(`Using package manager: ${agent}`));
94
+ fs.writeFileSync("package.json", JSON.stringify({
95
+ name: "zenstack-app",
96
+ version: "1.0.0",
97
+ description: "Scaffolded with create-zenstack",
98
+ type: "module",
99
+ scripts: { dev: "tsx main.ts" },
100
+ license: "ISC"
101
+ }, null, 2));
102
+ createVsCodeConfig();
103
+ for (const pkg of [
104
+ {
105
+ name: "@zenstackhq/cli@latest",
106
+ dev: true
107
+ },
108
+ {
109
+ name: "@zenstackhq/schema@latest",
110
+ dev: false
111
+ },
112
+ {
113
+ name: "@zenstackhq/orm@latest",
114
+ dev: false
115
+ },
116
+ {
117
+ name: "better-sqlite3",
118
+ dev: false
119
+ },
120
+ {
121
+ name: "@types/better-sqlite3",
122
+ dev: true
123
+ },
124
+ {
125
+ name: "typescript",
126
+ dev: true
127
+ },
128
+ {
129
+ name: "tsx",
130
+ dev: true
131
+ },
132
+ {
133
+ name: "@types/node",
134
+ dev: true
135
+ }
136
+ ]) installPackage(pkg);
137
+ fs.writeFileSync("tsconfig.json", JSON.stringify({ compilerOptions: {
138
+ module: "esnext",
139
+ target: "esnext",
140
+ moduleResolution: "bundler",
141
+ sourceMap: true,
142
+ outDir: "dist",
143
+ strict: true,
144
+ skipLibCheck: true,
145
+ esModuleInterop: true
146
+ } }, null, 2));
147
+ fs.mkdirSync("zenstack");
148
+ fs.writeFileSync("zenstack/schema.zmodel", STARTER_ZMODEL);
149
+ fs.writeFileSync("main.ts", STARTER_MAIN_TS);
150
+ runCommand(`${agentExec} zen generate`, "Running `zen generate`");
151
+ runCommand(`${agentExec} zen db push`, "Running `zen db push`");
152
+ console.log(`Running \`${agent} run dev\``);
153
+ execSync(`${agent} run dev`, { stdio: "inherit" });
154
+ console.log(colors.green("Project setup completed!"));
155
+ }
156
+ function installPackage(pkg) {
157
+ runCommand(`${agent} install ${pkg.name} ${pkg.dev ? saveDev : ""}`, `Installing "${pkg.name}"`);
158
+ }
159
+ function runCommand(cmd, status, stdio = "ignore") {
160
+ const spinner = ora(status).start();
161
+ try {
162
+ execSync(cmd, { stdio });
163
+ spinner.succeed();
164
+ } catch (e) {
165
+ spinner.fail();
166
+ throw e;
167
+ }
168
+ }
169
+ function createVsCodeConfig() {
170
+ fs.mkdirSync(".vscode", { recursive: true });
171
+ fs.writeFileSync(".vscode/settings.json", JSON.stringify({ "files.associations": { "*.zmodel": "zmodel-v3" } }, null, 4));
172
+ fs.writeFileSync(".vscode/extensions.json", JSON.stringify({ recommendations: ["zenstack.zenstack-v3"] }, null, 4));
173
+ }
174
+ //#endregion
175
+ export {};
176
+
177
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../cli/src/actions/templates.ts","../src/index.ts"],"sourcesContent":["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], onDelete: Cascade)\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';\nimport { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';\nimport SQLite from 'better-sqlite3';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const db = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await db.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","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@latest', dev: true },\n { name: '@zenstackhq/schema@latest', dev: false },\n { name: '@zenstackhq/orm@latest', 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"],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "create-zenstack",
3
3
  "displayName": "Create ZenStack",
4
4
  "description": "Create a new ZenStack project",
5
- "version": "3.5.6",
5
+ "version": "3.6.0",
6
6
  "type": "module",
7
7
  "author": {
8
8
  "name": "ZenStack Team",
@@ -24,8 +24,8 @@
24
24
  "exports": {
25
25
  ".": {
26
26
  "import": {
27
- "types": "./dist/index.d.ts",
28
- "default": "./dist/index.js"
27
+ "types": "./dist/index.d.mts",
28
+ "default": "./dist/index.mjs"
29
29
  },
30
30
  "require": {
31
31
  "types": "./dist/index.d.cts",
@@ -39,12 +39,14 @@
39
39
  "ora": "^5.4.1"
40
40
  },
41
41
  "devDependencies": {
42
- "@zenstackhq/eslint-config": "3.5.6",
43
- "@zenstackhq/typescript-config": "3.5.6"
42
+ "@types/node": "^20.19.0",
43
+ "@zenstackhq/eslint-config": "3.6.0",
44
+ "@zenstackhq/tsdown-config": "3.6.0",
45
+ "@zenstackhq/typescript-config": "3.6.0"
44
46
  },
45
47
  "funding": "https://github.com/sponsors/zenstackhq",
46
48
  "scripts": {
47
- "build": "tsc --noEmit && tsup-node",
49
+ "build": "tsc --noEmit && tsdown",
48
50
  "lint": "eslint src --ext ts",
49
51
  "pack": "pnpm pack"
50
52
  }
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
-
2
- export { }
package/dist/index.js DELETED
@@ -1,204 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
- // src/index.ts
5
- import colors from "colors";
6
- import { Command } from "commander";
7
- import { execSync } from "child_process";
8
- import fs from "fs";
9
- import ora from "ora";
10
-
11
- // ../cli/src/actions/templates.ts
12
- var STARTER_ZMODEL = `// This is a sample model to get you started.
13
-
14
- /// A sample data source using local sqlite db.
15
- datasource db {
16
- provider = 'sqlite'
17
- url = 'file:./dev.db'
18
- }
19
-
20
- /// User model
21
- model User {
22
- id String @id @default(cuid())
23
- email String @unique @email @length(6, 32)
24
- posts Post[]
25
- }
26
-
27
- /// Post model
28
- model Post {
29
- id String @id @default(cuid())
30
- createdAt DateTime @default(now())
31
- updatedAt DateTime @updatedAt
32
- title String @length(1, 256)
33
- content String
34
- published Boolean @default(false)
35
- author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
36
- authorId String
37
- }
38
- `;
39
- var STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';
40
- import { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';
41
- import SQLite from 'better-sqlite3';
42
- import { schema } from './zenstack/schema';
43
-
44
- async function main() {
45
- const db = new ZenStackClient(schema, {
46
- dialect: new SqliteDialect({
47
- database: new SQLite('./zenstack/dev.db'),
48
- }),
49
- });
50
- const user = await db.user.create({
51
- data: {
52
- email: 'test@zenstack.dev',
53
- posts: {
54
- create: [
55
- {
56
- title: 'Hello World',
57
- content: 'This is a test post',
58
- },
59
- ],
60
- },
61
- },
62
- include: { posts: true }
63
- });
64
- console.log('User created:', user);
65
- }
66
-
67
- main();
68
- `;
69
-
70
- // src/index.ts
71
- var npmAgent = process.env["npm_config_user_agent"];
72
- var agent = "npm";
73
- var agentExec = "npx";
74
- var saveDev = "--save-dev";
75
- if (npmAgent?.includes("pnpm")) {
76
- agent = "pnpm";
77
- agentExec = "pnpm";
78
- } else if (npmAgent?.includes("yarn")) {
79
- agent = "yarn";
80
- agentExec = "npx";
81
- saveDev = "--dev";
82
- } else if (npmAgent?.includes("bun")) {
83
- agent = "bun";
84
- agentExec = "bun";
85
- }
86
- var program = new Command("create-zenstack");
87
- program.arguments("<project-name>").action((projectName) => {
88
- initProject(projectName);
89
- });
90
- program.parse(process.argv);
91
- function initProject(name) {
92
- if (fs.existsSync(name)) {
93
- console.log(colors.red(`Directory ${name} already exists.`));
94
- process.exit(1);
95
- }
96
- fs.mkdirSync(name);
97
- process.chdir(name);
98
- console.log(colors.gray(`Using package manager: ${agent}`));
99
- fs.writeFileSync("package.json", JSON.stringify({
100
- name: "zenstack-app",
101
- version: "1.0.0",
102
- description: "Scaffolded with create-zenstack",
103
- type: "module",
104
- scripts: {
105
- dev: "tsx main.ts"
106
- },
107
- license: "ISC"
108
- }, null, 2));
109
- createVsCodeConfig();
110
- const packages = [
111
- {
112
- name: "@zenstackhq/cli@latest",
113
- dev: true
114
- },
115
- {
116
- name: "@zenstackhq/schema@latest",
117
- dev: false
118
- },
119
- {
120
- name: "@zenstackhq/orm@latest",
121
- dev: false
122
- },
123
- {
124
- name: "better-sqlite3",
125
- dev: false
126
- },
127
- {
128
- name: "@types/better-sqlite3",
129
- dev: true
130
- },
131
- {
132
- name: "typescript",
133
- dev: true
134
- },
135
- {
136
- name: "tsx",
137
- dev: true
138
- },
139
- {
140
- name: "@types/node",
141
- dev: true
142
- }
143
- ];
144
- for (const pkg of packages) {
145
- installPackage(pkg);
146
- }
147
- fs.writeFileSync("tsconfig.json", JSON.stringify({
148
- compilerOptions: {
149
- module: "esnext",
150
- target: "esnext",
151
- moduleResolution: "bundler",
152
- sourceMap: true,
153
- outDir: "dist",
154
- strict: true,
155
- skipLibCheck: true,
156
- esModuleInterop: true
157
- }
158
- }, null, 2));
159
- fs.mkdirSync("zenstack");
160
- fs.writeFileSync("zenstack/schema.zmodel", STARTER_ZMODEL);
161
- fs.writeFileSync("main.ts", STARTER_MAIN_TS);
162
- runCommand(`${agentExec} zen generate`, "Running `zen generate`");
163
- runCommand(`${agentExec} zen db push`, "Running `zen db push`");
164
- console.log(`Running \`${agent} run dev\``);
165
- execSync(`${agent} run dev`, {
166
- stdio: "inherit"
167
- });
168
- console.log(colors.green("Project setup completed!"));
169
- }
170
- __name(initProject, "initProject");
171
- function installPackage(pkg) {
172
- runCommand(`${agent} install ${pkg.name} ${pkg.dev ? saveDev : ""}`, `Installing "${pkg.name}"`);
173
- }
174
- __name(installPackage, "installPackage");
175
- function runCommand(cmd, status, stdio = "ignore") {
176
- const spinner = ora(status).start();
177
- try {
178
- execSync(cmd, {
179
- stdio
180
- });
181
- spinner.succeed();
182
- } catch (e) {
183
- spinner.fail();
184
- throw e;
185
- }
186
- }
187
- __name(runCommand, "runCommand");
188
- function createVsCodeConfig() {
189
- fs.mkdirSync(".vscode", {
190
- recursive: true
191
- });
192
- fs.writeFileSync(".vscode/settings.json", JSON.stringify({
193
- "files.associations": {
194
- "*.zmodel": "zmodel-v3"
195
- }
196
- }, null, 4));
197
- fs.writeFileSync(".vscode/extensions.json", JSON.stringify({
198
- recommendations: [
199
- "zenstack.zenstack-v3"
200
- ]
201
- }, null, 4));
202
- }
203
- __name(createVsCodeConfig, "createVsCodeConfig");
204
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
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@latest', dev: true },\n { name: '@zenstackhq/schema@latest', dev: false },\n { name: '@zenstackhq/orm@latest', 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], onDelete: Cascade)\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';\nimport { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';\nimport SQLite from 'better-sqlite3';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const db = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await db.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":";;;;AAAA,OAAOA,YAAY;AACnB,SAASC,eAAe;AACxB,SAASC,gBAAmC;AAC5C,OAAOC,QAAQ;AACf,OAAOC,SAAS;;;ACJT,IAAMC,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BvB,IAAMC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADpB/B,IAAMC,WAAWC,QAAQC,IAAI,uBAAA;AAC7B,IAAIC,QAAQ;AACZ,IAAIC,YAAY;AAChB,IAAIC,UAAU;AAEd,IAAIL,UAAUM,SAAS,MAAA,GAAS;AAC5BH,UAAQ;AACRC,cAAY;AAChB,WAAWJ,UAAUM,SAAS,MAAA,GAAS;AACnCH,UAAQ;AACRC,cAAY;AACZC,YAAU;AACd,WAAWL,UAAUM,SAAS,KAAA,GAAQ;AAClCH,UAAQ;AACRC,cAAY;AAChB;AAEA,IAAMG,UAAU,IAAIC,QAAQ,iBAAA;AAE5BD,QAAQE,UAAU,gBAAA,EAAkBC,OAAO,CAACC,gBAAAA;AACxCC,cAAYD,WAAAA;AAChB,CAAA;AAEAJ,QAAQM,MAAMZ,QAAQa,IAAI;AAE1B,SAASF,YAAYG,MAAY;AAE7B,MAAIC,GAAGC,WAAWF,IAAAA,GAAO;AACrBG,YAAQC,IAAIC,OAAOC,IAAI,aAAaN,IAAAA,kBAAsB,CAAA;AAC1Dd,YAAQqB,KAAK,CAAA;EACjB;AACAN,KAAGO,UAAUR,IAAAA;AACbd,UAAQuB,MAAMT,IAAAA;AAEdG,UAAQC,IAAIC,OAAOK,KAAK,0BAA0BtB,KAAAA,EAAO,CAAA;AAGzDa,KAAGU,cACC,gBACAC,KAAKC,UACD;IACIb,MAAM;IACNc,SAAS;IACTC,aAAa;IACbC,MAAM;IACNC,SAAS;MACLC,KAAK;IACT;IACAC,SAAS;EACb,GACA,MACA,CAAA,CAAA;AAKRC,qBAAAA;AAGA,QAAMC,WAAW;IACb;MAAErB,MAAM;MAA0BkB,KAAK;IAAK;IAC5C;MAAElB,MAAM;MAA6BkB,KAAK;IAAM;IAChD;MAAElB,MAAM;MAA0BkB,KAAK;IAAM;IAC7C;MAAElB,MAAM;MAAkBkB,KAAK;IAAM;IACrC;MAAElB,MAAM;MAAyBkB,KAAK;IAAK;IAC3C;MAAElB,MAAM;MAAckB,KAAK;IAAK;IAChC;MAAElB,MAAM;MAAOkB,KAAK;IAAK;IACzB;MAAElB,MAAM;MAAekB,KAAK;IAAK;;AAErC,aAAWI,OAAOD,UAAU;AACxBE,mBAAeD,GAAAA;EACnB;AAGArB,KAAGU,cACC,iBACAC,KAAKC,UACD;IACIW,iBAAiB;MACbC,QAAQ;MACRC,QAAQ;MACRC,kBAAkB;MAClBC,WAAW;MACXC,QAAQ;MACRC,QAAQ;MACRC,cAAc;MACdC,iBAAiB;IACrB;EACJ,GACA,MACA,CAAA,CAAA;AAKR/B,KAAGO,UAAU,UAAA;AACbP,KAAGU,cAAc,0BAA0BsB,cAAAA;AAG3ChC,KAAGU,cAAc,WAAWuB,eAAAA;AAG5BC,aAAW,GAAG9C,SAAAA,iBAA0B,wBAAA;AAGxC8C,aAAW,GAAG9C,SAAAA,gBAAyB,uBAAA;AAGvCc,UAAQC,IAAI,aAAahB,KAAAA,YAAiB;AAC1CgD,WAAS,GAAGhD,KAAAA,YAAiB;IAAEiD,OAAO;EAAU,CAAA;AAChDlC,UAAQC,IAAIC,OAAOiC,MAAM,0BAAA,CAAA;AAC7B;AAtFSzC;AAwFT,SAAS0B,eAAeD,KAAmC;AACvDa,aAAW,GAAG/C,KAAAA,YAAiBkC,IAAItB,IAAI,IAAIsB,IAAIJ,MAAM5B,UAAU,EAAA,IAAM,eAAegC,IAAItB,IAAI,GAAG;AACnG;AAFSuB;AAIT,SAASY,WAAWI,KAAaC,QAAgBH,QAAsB,UAAQ;AAC3E,QAAMI,UAAUC,IAAIF,MAAAA,EAAQG,MAAK;AACjC,MAAI;AACAP,aAASG,KAAK;MAAEF;IAAM,CAAA;AACtBI,YAAQG,QAAO;EACnB,SAASC,GAAG;AACRJ,YAAQK,KAAI;AACZ,UAAMD;EACV;AACJ;AATSV;AAWT,SAASf,qBAAAA;AACLnB,KAAGO,UAAU,WAAW;IAAEuC,WAAW;EAAK,CAAA;AAC1C9C,KAAGU,cACC,yBACAC,KAAKC,UACD;IACI,sBAAsB;MAClB,YAAY;IAChB;EACJ,GACA,MACA,CAAA,CAAA;AAGRZ,KAAGU,cAAc,2BAA2BC,KAAKC,UAAU;IAAEmC,iBAAiB;MAAC;;EAAwB,GAAG,MAAM,CAAA,CAAA;AACpH;AAfS5B;","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"]}