orchid-orm 1.5.12 → 1.5.15

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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # orchid-orm
2
2
 
3
+ ## 1.5.15
4
+
5
+ ### Patch Changes
6
+
7
+ - Improve init script
8
+
9
+ ## 1.5.14
10
+
11
+ ### Patch Changes
12
+
13
+ - Improve init script
14
+
15
+ ## 1.5.13
16
+
17
+ ### Patch Changes
18
+
19
+ - Fix init script
20
+
3
21
  ## 1.5.12
4
22
 
5
23
  ### Patch Changes
package/dist/bin.js CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  'use strict';
2
3
 
3
4
  var fs = require('fs/promises');
@@ -13,7 +14,7 @@ var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
13
14
  var prompts__default = /*#__PURE__*/_interopDefaultLegacy(prompts);
14
15
 
15
16
  const dirPath = path__default["default"].resolve(process.cwd(), "src", "db");
16
- const astOrchidORMConfig = async () => {
17
+ const askOrchidORMConfig = async () => {
17
18
  const response = await prompts__default["default"]([
18
19
  {
19
20
  type: "select",
@@ -68,12 +69,14 @@ const initOrchidORM = async (config) => {
68
69
  await setupMainDb(config);
69
70
  await setupMigrationScript(config);
70
71
  await createMigrations(config);
72
+ await createSeed();
71
73
  };
72
74
  const setupPackageJson = async (config) => {
73
75
  const pairs = await Promise.all([
74
76
  getLatestPackageVersion("dotenv", "dependencies"),
75
77
  getLatestPackageVersion("orchid-orm", "dependencies"),
76
78
  getLatestPackageVersion("pqb", "dependencies"),
79
+ getLatestPackageVersion("pg", "dependencies"),
77
80
  config.addSchemaToZod && getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies"),
78
81
  getLatestPackageVersion("rake-db", "devDependencies"),
79
82
  config.addTestFactory && getLatestPackageVersion("orchid-orm-test-factory", "devDependencies"),
@@ -193,11 +196,13 @@ const setupBaseTable = async (config) => {
193
196
 
194
197
  export const BaseTable = createBaseTable({
195
198
  columnTypes: (t) => ({
196
- text: (min: 0, max: Infinity) => t.text(min, max),`;
199
+ ...t,
200
+ text: (min = 0, max = Infinity) => t.text(min, max),`;
197
201
  const { timestamp } = config;
198
202
  if (timestamp) {
199
203
  content += `
200
- timestamp: <P extends number>(precision?: P) => t.timestamp<P>(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
204
+ timestamp: <P extends number>(precision?: P) =>
205
+ t.timestamp<P>(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
201
206
  }
202
207
  content += `
203
208
  }),
@@ -217,7 +222,7 @@ import { CommentTable } from './comment.table';
217
222
  ${config.addSchemaToZod ? `import { tableToZod } from 'orchid-orm-schema-to-zod';
218
223
  ` : ""}
219
224
  export type Post = PostTable['columns']['type'];
220
- class PostTable extends BaseTable {
225
+ export class PostTable extends BaseTable {
221
226
  table = 'post';
222
227
  columns = this.setColumns((t) => ({
223
228
  id: t.serial().primaryKey(),
@@ -225,13 +230,13 @@ class PostTable extends BaseTable {
225
230
  text: t.text(20, 10000),
226
231
  ...t.timestamps(),
227
232
  }));
228
-
233
+
229
234
  relations = {
230
235
  comments: this.hasMany(() => CommentTable, {
231
236
  primaryKey: 'id',
232
237
  foreignKey: 'postId',
233
238
  }),
234
- }
239
+ };
235
240
  }
236
241
  ${config.addSchemaToZod ? `
237
242
  export const postSchema = tableToZod(PostTable);
@@ -244,21 +249,24 @@ import { PostTable } from './post.table';
244
249
  ${config.addSchemaToZod ? `import { tableToZod } from 'orchid-orm-schema-to-zod';
245
250
  ` : ""}
246
251
  export type Comment = CommentTable['columns']['type'];
247
- class CommentTable extends BaseTable {
252
+ export class CommentTable extends BaseTable {
248
253
  table = 'comment';
249
254
  columns = this.setColumns((t) => ({
250
255
  id: t.serial().primaryKey(),
251
- postId: t.integer().foreignKey(() => PostTable, 'id').index(),
256
+ postId: t
257
+ .integer()
258
+ .foreignKey(() => PostTable, 'id')
259
+ .index(),
252
260
  text: t.text(5, 1000),
253
261
  ...t.timestamps(),
254
262
  }));
255
-
263
+
256
264
  relations = {
257
265
  post: this.belongsTo(() => PostTable, {
258
266
  primaryKey: 'id',
259
267
  foreignKey: 'postId',
260
268
  }),
261
- }
269
+ };
262
270
  }
263
271
  ${config.addSchemaToZod ? `
264
272
  export const commentSchema = tableToZod(CommentTable);
@@ -301,7 +309,7 @@ export const config = {`;
301
309
  database,`;
302
310
  }
303
311
  content += `
304
- }
312
+ };
305
313
  `;
306
314
  await fs__default["default"].writeFile(configPath, content);
307
315
  };
@@ -310,11 +318,11 @@ const setupMainDb = async (config) => {
310
318
  let tables = "";
311
319
  if (config.demoTables) {
312
320
  imports += `
313
- import { Post } from './tables/post.table';
314
- import { Comment } from './tables/comment.table';`;
321
+ import { PostTable } from './tables/post.table';
322
+ import { CommentTable } from './tables/comment.table';`;
315
323
  tables += `
316
- post: Post,
317
- comment: Comment,`;
324
+ post: PostTable,
325
+ comment: CommentTable,`;
318
326
  }
319
327
  const dbPath = path__default["default"].join(dirPath, "db.ts");
320
328
  await fs__default["default"].writeFile(
@@ -322,11 +330,8 @@ import { Comment } from './tables/comment.table';`;
322
330
  `import { orchidORM } from 'orchid-orm';
323
331
  import { config } from './config';${imports}
324
332
 
325
- export const db = orchidORM(
326
- config.database,
327
- {${tables}
328
- }
329
- );
333
+ export const db = orchidORM(config.database, {${tables}
334
+ });
330
335
  `
331
336
  );
332
337
  };
@@ -341,11 +346,18 @@ import { appCodeUpdater } from 'orchid-orm';
341
346
  rakeDb(${config.testDatabase ? "config.allDatabases" : "config.database"}, {
342
347
  migrationsPath: 'src/db/migrations',
343
348
  appCodeUpdater: appCodeUpdater({
344
- tablePath: (tableName) => \`src/db/tables/\${tableName}.ts\`,
345
- baseTablePath: 'src/lib/baseTable.ts',
349
+ tablePath: (tableName) => \`src/db/tables/\${tableName}.table.ts\`,
350
+ baseTablePath: 'src/db/baseTable.ts',
346
351
  baseTableName: 'BaseTable',
347
- mainFilePath: 'src/db.ts',
352
+ mainFilePath: 'src/db/db.ts',
348
353
  }),
354
+ useCodeUpdater: true, // set to false to disable code updater
355
+ commands: {
356
+ async seed() {
357
+ const { seed } = await import('./seed');
358
+ await seed();
359
+ },
360
+ },
349
361
  });
350
362
  `
351
363
  );
@@ -355,9 +367,10 @@ const createMigrations = async (config) => {
355
367
  await fs__default["default"].mkdir(migrationsPath);
356
368
  if (!config.demoTables)
357
369
  return;
370
+ const now = new Date();
358
371
  const postPath = path__default["default"].join(
359
372
  migrationsPath,
360
- `${makeFileTimeStamp()}_createPost.ts`
373
+ `${makeFileTimeStamp(now)}_createPost.ts`
361
374
  );
362
375
  await fs__default["default"].writeFile(
363
376
  postPath,
@@ -373,9 +386,10 @@ change(async (db) => {
373
386
  });
374
387
  `
375
388
  );
389
+ now.setTime(now.getTime() + 1e3);
376
390
  const commentPath = path__default["default"].join(
377
391
  migrationsPath,
378
- `${makeFileTimeStamp()}_createComment.ts`
392
+ `${makeFileTimeStamp(now)}_createComment.ts`
379
393
  );
380
394
  await fs__default["default"].writeFile(
381
395
  commentPath,
@@ -392,8 +406,7 @@ change(async (db) => {
392
406
  `
393
407
  );
394
408
  };
395
- const makeFileTimeStamp = () => {
396
- const now = new Date();
409
+ const makeFileTimeStamp = (now) => {
397
410
  return [
398
411
  now.getUTCFullYear(),
399
412
  now.getUTCMonth() + 1,
@@ -403,6 +416,20 @@ const makeFileTimeStamp = () => {
403
416
  now.getUTCSeconds()
404
417
  ].map((value) => value < 10 ? `0${value}` : value).join("");
405
418
  };
419
+ const createSeed = async () => {
420
+ const filePath = path__default["default"].join(dirPath, "seed.ts");
421
+ await fs__default["default"].writeFile(
422
+ filePath,
423
+ `import { db } from './db';
424
+
425
+ export const seed = async () => {
426
+ // create records here
427
+
428
+ await db.$close();
429
+ };
430
+ `
431
+ );
432
+ };
406
433
 
407
- astOrchidORMConfig().then(initOrchidORM);
434
+ askOrchidORMConfig().then(initOrchidORM);
408
435
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sources":["../src/bin/init.ts","../src/bin/bin.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport path from 'path';\nimport https from 'https';\nimport prompts from 'prompts';\n\nexport type InitConfig = {\n testDatabase?: boolean;\n addSchemaToZod?: boolean;\n addTestFactory?: boolean;\n demoTables?: boolean;\n timestamp?: 'date' | 'number';\n};\n\ntype DependencyKind = 'dependencies' | 'devDependencies';\n\nconst dirPath = path.resolve(process.cwd(), 'src', 'db');\n\nexport const astOrchidORMConfig = async () => {\n const response = await prompts([\n {\n type: 'select',\n name: 'timestamp',\n message: 'Preferred type of returned timestamps:',\n choices: [\n {\n title: 'string (as returned from db)',\n },\n {\n title: 'number (epoch)',\n value: 'number',\n },\n {\n title: 'Date object',\n value: 'date',\n },\n ],\n },\n {\n type: 'confirm',\n name: 'testDatabase',\n message: 'Should I add a separate database for tests?',\n },\n {\n type: 'confirm',\n name: 'addSchemaToZod',\n message: 'Are you going to use Zod for validation?',\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Do you want object factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Should I add demo tables?',\n },\n ]);\n\n return response as InitConfig;\n};\n\nexport const initOrchidORM = async (config: InitConfig) => {\n await fs.mkdir(dirPath, { recursive: true });\n\n await setupPackageJson(config);\n await setupTSConfig();\n await setupEnv(config);\n await setupGitIgnore();\n await setupBaseTable(config);\n await setupTables(config);\n await setupConfig(config);\n await setupMainDb(config);\n await setupMigrationScript(config);\n await createMigrations(config);\n};\n\nconst setupPackageJson = async (config: InitConfig) => {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', 'dependencies'),\n getLatestPackageVersion('pqb', 'dependencies'),\n config.addSchemaToZod &&\n getLatestPackageVersion('orchid-orm-schema-to-zod', 'dependencies'),\n getLatestPackageVersion('rake-db', 'devDependencies'),\n config.addTestFactory &&\n getLatestPackageVersion('orchid-orm-test-factory', 'devDependencies'),\n getLatestPackageVersion('@swc/core', 'devDependencies'),\n getLatestPackageVersion('@types/node', 'devDependencies'),\n getLatestPackageVersion('ts-node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n ]);\n\n const deps: Record<string, string> = {};\n const devDeps: Record<string, string> = {};\n for (const item of pairs) {\n if (!item) continue;\n const [key, { version, kind }] = item;\n (kind === 'dependencies' ? deps : devDeps)[key] = version;\n }\n\n const packageJsonPath = path.resolve(process.cwd(), 'package.json');\n const content = await readFileSafe(packageJsonPath);\n const json = content ? JSON.parse(content) : {};\n\n if (!json.scripts) json.scripts = {};\n json.scripts.db = 'ts-node src/db/dbScripts.ts';\n\n if (!json.dependencies) json.dependencies = {};\n\n for (const key in deps) {\n json.dependencies[key] = deps[key];\n }\n\n if (!json.devDependencies) json.devDependencies = {};\n for (const key in devDeps) {\n json.devDependencies[key] = devDeps[key];\n }\n\n await fs.writeFile(packageJsonPath, JSON.stringify(json, null, ' ') + '\\n');\n};\n\nconst getLatestPackageVersion = (\n name: string,\n kind: DependencyKind,\n): Promise<[string, { version: string; kind: DependencyKind }]> => {\n return new Promise((resolve, reject) => {\n https\n .get(`https://registry.npmjs.org/${name}/latest`, (res) => {\n let data = '';\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () =>\n resolve([name, { version: `^${JSON.parse(data).version}`, kind }]),\n );\n })\n .on('error', reject);\n });\n};\n\nconst readFileSafe = async (path: string) => {\n try {\n return await fs.readFile(path, 'utf-8');\n } catch (err) {\n if ((err as unknown as { code: string }).code === 'ENOENT') {\n return undefined;\n }\n throw err;\n }\n};\n\nconst setupTSConfig = async () => {\n const tsConfigPath = path.resolve(process.cwd(), 'tsconfig.json');\n const content = await readFileSafe(tsConfigPath);\n const json = content ? JSON.parse(content) : {};\n if (!json['ts-node']) {\n json['ts-node'] = {};\n }\n if (!json['ts-node'].swc) {\n json['ts-node'].swc = true;\n }\n if (!json.compilerOptions?.strict) {\n if (!json.compilerOptions) json.compilerOptions = {};\n json.compilerOptions.strict = true;\n await fs.writeFile(tsConfigPath, `${JSON.stringify(json, null, ' ')}\\n`);\n }\n};\n\nconst setupEnv = async (config: InitConfig) => {\n const envPath = path.resolve(process.cwd(), '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://user:password@localhost:5432/dbname?ssl=false`;\n changed = true;\n }\n\n if (config.testDatabase && !content.match(/^DATABASE_TEST_URL=/m)) {\n content += `\\nDATABASE_TEST_URL=postgres://user:password@localhost:5432/dbname-test?ssl=false`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(envPath, `${content.trim()}\\n`);\n }\n};\n\nconst setupGitIgnore = async () => {\n const gitignorePath = path.resolve(process.cwd(), '.gitignore');\n let content = ((await readFileSafe(gitignorePath)) || '').trim();\n let changed = false;\n\n if (!content.match(/^node_modules\\b/m)) {\n content += `\\nnode_modules`;\n changed = true;\n }\n\n if (!content.match(/^.env\\b/m)) {\n content += `\\n.env`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n};\n\nconst setupBaseTable = async (config: InitConfig) => {\n const filePath = path.join(dirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';\n\nexport const BaseTable = createBaseTable({\n columnTypes: (t) => ({\n text: (min: 0, max: Infinity) => t.text(min, max),`;\n\n const { timestamp } = config;\n if (timestamp) {\n content += `\n timestamp: <P extends number>(precision?: P) => t.timestamp<P>(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),\n});\n`;\n\n await fs.writeFile(filePath, content);\n};\n\nconst setupTables = async (config: InitConfig) => {\n if (!config.demoTables) return;\n\n const tablesDir = path.join(dirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n path.join(tablesDir, 'post.table.ts'),\n `import { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n${\n config.addSchemaToZod\n ? `import { tableToZod } from 'orchid-orm-schema-to-zod';\\n`\n : ''\n}\nexport type Post = PostTable['columns']['type'];\nclass PostTable extends BaseTable {\n table = 'post';\n columns = this.setColumns((t) => ({\n id: t.serial().primaryKey(),\n title: t.text(3, 100),\n text: t.text(20, 10000),\n ...t.timestamps(),\n }));\n \n relations = {\n comments: this.hasMany(() => CommentTable, {\n primaryKey: 'id',\n foreignKey: 'postId',\n }),\n }\n}\n${\n config.addSchemaToZod\n ? `\\nexport const postSchema = tableToZod(PostTable);\\n`\n : ''\n}`,\n );\n\n await fs.writeFile(\n path.join(tablesDir, 'comment.table.ts'),\n `import { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n${\n config.addSchemaToZod\n ? `import { tableToZod } from 'orchid-orm-schema-to-zod';\\n`\n : ''\n}\nexport type Comment = CommentTable['columns']['type'];\nclass CommentTable extends BaseTable {\n table = 'comment';\n columns = this.setColumns((t) => ({\n id: t.serial().primaryKey(),\n postId: t.integer().foreignKey(() => PostTable, 'id').index(),\n text: t.text(5, 1000),\n ...t.timestamps(),\n }));\n \n relations = {\n post: this.belongsTo(() => PostTable, {\n primaryKey: 'id',\n foreignKey: 'postId',\n }),\n }\n}\n${\n config.addSchemaToZod\n ? `\\nexport const commentSchema = tableToZod(CommentTable);\\n`\n : ''\n}`,\n );\n};\n\nconst setupConfig = async (config: InitConfig) => {\n const configPath = path.join(dirPath, 'config.ts');\n\n let content = `import 'dotenv/config';\n\nconst database = {\n databaseURL: process.env.DATABASE_URL,\n};\nif (!database.databaseURL) throw new Error('DATABASE_URL is missing in .env');`;\n\n if (config.testDatabase) {\n content += `\n\nconst testDatabase = {\n databaseURL: process.env.DATABASE_TEST_URL,\n};\n\nconst allDatabases = [database];\n\nif (testDatabase.databaseURL) {\n allDatabases.push(testDatabase);\n}`;\n }\n\n content += `\n\nexport const config = {`;\n\n if (config.testDatabase) {\n content += `\n allDatabases,`;\n }\n\n if (config.testDatabase) {\n content += `\n database: process.env.NODE_ENV === 'test' ? testDatabase : database,`;\n } else {\n content += `\n database,`;\n }\n content += `\n}\n`;\n\n await fs.writeFile(configPath, content);\n};\n\nconst setupMainDb = async (config: InitConfig) => {\n let imports = '';\n let tables = '';\n if (config.demoTables) {\n imports += `\nimport { Post } from './tables/post.table';\nimport { Comment } from './tables/comment.table';`;\n tables += `\n post: Post,\n comment: Comment,`;\n }\n\n const dbPath = path.join(dirPath, 'db.ts');\n await fs.writeFile(\n dbPath,\n `import { orchidORM } from 'orchid-orm';\nimport { config } from './config';${imports}\n\nexport const db = orchidORM(\n config.database,\n {${tables}\n }\n);\n`,\n );\n};\n\nconst setupMigrationScript = async (config: InitConfig) => {\n const filePath = path.join(dirPath, 'dbScripts.ts');\n await fs.writeFile(\n filePath,\n `import { rakeDb } from 'rake-db';\nimport { config } from './config';\nimport { appCodeUpdater } from 'orchid-orm';\n\nrakeDb(${config.testDatabase ? 'config.allDatabases' : 'config.database'}, {\n migrationsPath: 'src/db/migrations',\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`src/db/tables/\\${tableName}.ts\\`,\n baseTablePath: 'src/lib/baseTable.ts',\n baseTableName: 'BaseTable',\n mainFilePath: 'src/db.ts',\n }),\n});\n`,\n );\n};\n\nconst createMigrations = async (config: InitConfig) => {\n const migrationsPath = path.join(dirPath, 'migrations');\n await fs.mkdir(migrationsPath);\n\n if (!config.demoTables) return;\n\n const postPath = path.join(\n migrationsPath,\n `${makeFileTimeStamp()}_createPost.ts`,\n );\n await fs.writeFile(\n postPath,\n `import { change } from 'rake-db';\n\nchange(async (db) => {\n await db.createTable('post', (t) => ({\n id: t.serial().primaryKey(),\n title: t.text(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n\n const commentPath = path.join(\n migrationsPath,\n `${makeFileTimeStamp()}_createComment.ts`,\n );\n await fs.writeFile(\n commentPath,\n `import { change } from 'rake-db';\n\nchange(async (db) => {\n await db.createTable('comment', (t) => ({\n id: t.serial().primaryKey(),\n postId: t.integer().foreignKey('post', 'id').index(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n};\n\nconst makeFileTimeStamp = () => {\n const now = new Date();\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n","import { astOrchidORMConfig, initOrchidORM } from './init';\n\nastOrchidORMConfig().then(initOrchidORM);\n"],"names":["path","prompts","fs","https"],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sources":["../src/bin/init.ts","../src/bin/bin.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport path from 'path';\nimport https from 'https';\nimport prompts from 'prompts';\n\nexport type InitConfig = {\n testDatabase?: boolean;\n addSchemaToZod?: boolean;\n addTestFactory?: boolean;\n demoTables?: boolean;\n timestamp?: 'date' | 'number';\n};\n\ntype DependencyKind = 'dependencies' | 'devDependencies';\n\nconst dirPath = path.resolve(process.cwd(), 'src', 'db');\n\nexport const askOrchidORMConfig = async () => {\n const response = await prompts([\n {\n type: 'select',\n name: 'timestamp',\n message: 'Preferred type of returned timestamps:',\n choices: [\n {\n title: 'string (as returned from db)',\n },\n {\n title: 'number (epoch)',\n value: 'number',\n },\n {\n title: 'Date object',\n value: 'date',\n },\n ],\n },\n {\n type: 'confirm',\n name: 'testDatabase',\n message: 'Should I add a separate database for tests?',\n },\n {\n type: 'confirm',\n name: 'addSchemaToZod',\n message: 'Are you going to use Zod for validation?',\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Do you want object factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Should I add demo tables?',\n },\n ]);\n\n return response as InitConfig;\n};\n\nexport const initOrchidORM = async (config: InitConfig) => {\n await fs.mkdir(dirPath, { recursive: true });\n\n await setupPackageJson(config);\n await setupTSConfig();\n await setupEnv(config);\n await setupGitIgnore();\n await setupBaseTable(config);\n await setupTables(config);\n await setupConfig(config);\n await setupMainDb(config);\n await setupMigrationScript(config);\n await createMigrations(config);\n await createSeed();\n};\n\nconst setupPackageJson = async (config: InitConfig) => {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', 'dependencies'),\n getLatestPackageVersion('pqb', 'dependencies'),\n getLatestPackageVersion('pg', 'dependencies'),\n config.addSchemaToZod &&\n getLatestPackageVersion('orchid-orm-schema-to-zod', 'dependencies'),\n getLatestPackageVersion('rake-db', 'devDependencies'),\n config.addTestFactory &&\n getLatestPackageVersion('orchid-orm-test-factory', 'devDependencies'),\n getLatestPackageVersion('@swc/core', 'devDependencies'),\n getLatestPackageVersion('@types/node', 'devDependencies'),\n getLatestPackageVersion('ts-node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n ]);\n\n const deps: Record<string, string> = {};\n const devDeps: Record<string, string> = {};\n for (const item of pairs) {\n if (!item) continue;\n const [key, { version, kind }] = item;\n (kind === 'dependencies' ? deps : devDeps)[key] = version;\n }\n\n const packageJsonPath = path.resolve(process.cwd(), 'package.json');\n const content = await readFileSafe(packageJsonPath);\n const json = content ? JSON.parse(content) : {};\n\n if (!json.scripts) json.scripts = {};\n json.scripts.db = 'ts-node src/db/dbScripts.ts';\n\n if (!json.dependencies) json.dependencies = {};\n\n for (const key in deps) {\n json.dependencies[key] = deps[key];\n }\n\n if (!json.devDependencies) json.devDependencies = {};\n for (const key in devDeps) {\n json.devDependencies[key] = devDeps[key];\n }\n\n await fs.writeFile(packageJsonPath, JSON.stringify(json, null, ' ') + '\\n');\n};\n\nconst getLatestPackageVersion = (\n name: string,\n kind: DependencyKind,\n): Promise<[string, { version: string; kind: DependencyKind }]> => {\n return new Promise((resolve, reject) => {\n https\n .get(`https://registry.npmjs.org/${name}/latest`, (res) => {\n let data = '';\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () =>\n resolve([name, { version: `^${JSON.parse(data).version}`, kind }]),\n );\n })\n .on('error', reject);\n });\n};\n\nconst readFileSafe = async (path: string) => {\n try {\n return await fs.readFile(path, 'utf-8');\n } catch (err) {\n if ((err as unknown as { code: string }).code === 'ENOENT') {\n return undefined;\n }\n throw err;\n }\n};\n\nconst setupTSConfig = async () => {\n const tsConfigPath = path.resolve(process.cwd(), 'tsconfig.json');\n const content = await readFileSafe(tsConfigPath);\n const json = content ? JSON.parse(content) : {};\n if (!json['ts-node']) {\n json['ts-node'] = {};\n }\n if (!json['ts-node'].swc) {\n json['ts-node'].swc = true;\n }\n if (!json.compilerOptions?.strict) {\n if (!json.compilerOptions) json.compilerOptions = {};\n json.compilerOptions.strict = true;\n await fs.writeFile(tsConfigPath, `${JSON.stringify(json, null, ' ')}\\n`);\n }\n};\n\nconst setupEnv = async (config: InitConfig) => {\n const envPath = path.resolve(process.cwd(), '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://user:password@localhost:5432/dbname?ssl=false`;\n changed = true;\n }\n\n if (config.testDatabase && !content.match(/^DATABASE_TEST_URL=/m)) {\n content += `\\nDATABASE_TEST_URL=postgres://user:password@localhost:5432/dbname-test?ssl=false`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(envPath, `${content.trim()}\\n`);\n }\n};\n\nconst setupGitIgnore = async () => {\n const gitignorePath = path.resolve(process.cwd(), '.gitignore');\n let content = ((await readFileSafe(gitignorePath)) || '').trim();\n let changed = false;\n\n if (!content.match(/^node_modules\\b/m)) {\n content += `\\nnode_modules`;\n changed = true;\n }\n\n if (!content.match(/^.env\\b/m)) {\n content += `\\n.env`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n};\n\nconst setupBaseTable = async (config: InitConfig) => {\n const filePath = path.join(dirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';\n\nexport const BaseTable = createBaseTable({\n columnTypes: (t) => ({\n ...t,\n text: (min = 0, max = Infinity) => t.text(min, max),`;\n\n const { timestamp } = config;\n if (timestamp) {\n content += `\n timestamp: <P extends number>(precision?: P) =>\n t.timestamp<P>(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),\n});\n`;\n\n await fs.writeFile(filePath, content);\n};\n\nconst setupTables = async (config: InitConfig) => {\n if (!config.demoTables) return;\n\n const tablesDir = path.join(dirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n path.join(tablesDir, 'post.table.ts'),\n `import { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n${\n config.addSchemaToZod\n ? `import { tableToZod } from 'orchid-orm-schema-to-zod';\\n`\n : ''\n}\nexport type Post = PostTable['columns']['type'];\nexport class PostTable extends BaseTable {\n table = 'post';\n columns = this.setColumns((t) => ({\n id: t.serial().primaryKey(),\n title: t.text(3, 100),\n text: t.text(20, 10000),\n ...t.timestamps(),\n }));\n\n relations = {\n comments: this.hasMany(() => CommentTable, {\n primaryKey: 'id',\n foreignKey: 'postId',\n }),\n };\n}\n${\n config.addSchemaToZod\n ? `\\nexport const postSchema = tableToZod(PostTable);\\n`\n : ''\n}`,\n );\n\n await fs.writeFile(\n path.join(tablesDir, 'comment.table.ts'),\n `import { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n${\n config.addSchemaToZod\n ? `import { tableToZod } from 'orchid-orm-schema-to-zod';\\n`\n : ''\n}\nexport type Comment = CommentTable['columns']['type'];\nexport class CommentTable extends BaseTable {\n table = 'comment';\n columns = this.setColumns((t) => ({\n id: t.serial().primaryKey(),\n postId: t\n .integer()\n .foreignKey(() => PostTable, 'id')\n .index(),\n text: t.text(5, 1000),\n ...t.timestamps(),\n }));\n\n relations = {\n post: this.belongsTo(() => PostTable, {\n primaryKey: 'id',\n foreignKey: 'postId',\n }),\n };\n}\n${\n config.addSchemaToZod\n ? `\\nexport const commentSchema = tableToZod(CommentTable);\\n`\n : ''\n}`,\n );\n};\n\nconst setupConfig = async (config: InitConfig) => {\n const configPath = path.join(dirPath, 'config.ts');\n\n let content = `import 'dotenv/config';\n\nconst database = {\n databaseURL: process.env.DATABASE_URL,\n};\nif (!database.databaseURL) throw new Error('DATABASE_URL is missing in .env');`;\n\n if (config.testDatabase) {\n content += `\n\nconst testDatabase = {\n databaseURL: process.env.DATABASE_TEST_URL,\n};\n\nconst allDatabases = [database];\n\nif (testDatabase.databaseURL) {\n allDatabases.push(testDatabase);\n}`;\n }\n\n content += `\n\nexport const config = {`;\n\n if (config.testDatabase) {\n content += `\n allDatabases,`;\n }\n\n if (config.testDatabase) {\n content += `\n database: process.env.NODE_ENV === 'test' ? testDatabase : database,`;\n } else {\n content += `\n database,`;\n }\n content += `\n};\n`;\n\n await fs.writeFile(configPath, content);\n};\n\nconst setupMainDb = async (config: InitConfig) => {\n let imports = '';\n let tables = '';\n if (config.demoTables) {\n imports += `\nimport { PostTable } from './tables/post.table';\nimport { CommentTable } from './tables/comment.table';`;\n tables += `\n post: PostTable,\n comment: CommentTable,`;\n }\n\n const dbPath = path.join(dirPath, 'db.ts');\n await fs.writeFile(\n dbPath,\n `import { orchidORM } from 'orchid-orm';\nimport { config } from './config';${imports}\n\nexport const db = orchidORM(config.database, {${tables}\n});\n`,\n );\n};\n\nconst setupMigrationScript = async (config: InitConfig) => {\n const filePath = path.join(dirPath, 'dbScripts.ts');\n await fs.writeFile(\n filePath,\n `import { rakeDb } from 'rake-db';\nimport { config } from './config';\nimport { appCodeUpdater } from 'orchid-orm';\n\nrakeDb(${config.testDatabase ? 'config.allDatabases' : 'config.database'}, {\n migrationsPath: 'src/db/migrations',\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`src/db/tables/\\${tableName}.table.ts\\`,\n baseTablePath: 'src/db/baseTable.ts',\n baseTableName: 'BaseTable',\n mainFilePath: 'src/db/db.ts',\n }),\n useCodeUpdater: true, // set to false to disable code updater\n commands: {\n async seed() {\n const { seed } = await import('./seed');\n await seed();\n },\n },\n});\n`,\n );\n};\n\nconst createMigrations = async (config: InitConfig) => {\n const migrationsPath = path.join(dirPath, 'migrations');\n await fs.mkdir(migrationsPath);\n\n if (!config.demoTables) return;\n\n const now = new Date();\n\n const postPath = path.join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createPost.ts`,\n );\n await fs.writeFile(\n postPath,\n `import { change } from 'rake-db';\n\nchange(async (db) => {\n await db.createTable('post', (t) => ({\n id: t.serial().primaryKey(),\n title: t.text(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n\n now.setTime(now.getTime() + 1000);\n\n const commentPath = path.join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createComment.ts`,\n );\n await fs.writeFile(\n commentPath,\n `import { change } from 'rake-db';\n\nchange(async (db) => {\n await db.createTable('comment', (t) => ({\n id: t.serial().primaryKey(),\n postId: t.integer().foreignKey('post', 'id').index(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n};\n\nconst makeFileTimeStamp = (now: Date) => {\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst createSeed = async () => {\n const filePath = path.join(dirPath, 'seed.ts');\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n // create records here\n\n await db.$close();\n};\n`,\n );\n};\n","import { askOrchidORMConfig, initOrchidORM } from './init';\n\naskOrchidORMConfig().then(initOrchidORM);\n"],"names":["path","prompts","fs","https"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1774,12 +1774,18 @@ const createTable = async (_a) => {
1774
1774
  const code = [
1775
1775
  `import { ${params.baseTableName} } from '${baseTablePath}';
1776
1776
  `,
1777
- `export class ${toPascalCase(ast.name)} extends ${params.baseTableName} {`,
1777
+ `export class ${toPascalCase(ast.name)}Table extends ${params.baseTableName} {`,
1778
1778
  props,
1779
1779
  "}\n"
1780
1780
  ];
1781
1781
  await fs__default["default"].mkdir(path__default["default"].dirname(tablePath), { recursive: true });
1782
- await fs__default["default"].writeFile(tablePath, pqb.codeToString(code, "", " "));
1782
+ try {
1783
+ await fs__default["default"].writeFile(tablePath, pqb.codeToString(code, "", " "), { flag: "wx" });
1784
+ } catch (err) {
1785
+ if (err.code !== "EEXIST") {
1786
+ throw err;
1787
+ }
1788
+ }
1783
1789
  };
1784
1790
 
1785
1791
  var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
@@ -1809,7 +1815,7 @@ const changeTable = async (_a) => {
1809
1815
  return;
1810
1816
  const changes = new FileChanges(content);
1811
1817
  const statements = ts.getStatements(content);
1812
- const className = toPascalCase(ast.name);
1818
+ const className = toPascalCase(ast.name) + "Table";
1813
1819
  for (const { t, object } of iterateColumnsShapes(statements, className)) {
1814
1820
  const context = makeChangeContext(changes, ast, content, object, t);
1815
1821
  prependSpaces(context);
@@ -2220,7 +2226,7 @@ const renameTable = async (_a) => {
2220
2226
  return;
2221
2227
  const changes = new FileChanges(content);
2222
2228
  const statements = ts.getStatements(content);
2223
- const className = toPascalCase(ast.from);
2229
+ const className = toPascalCase(ast.from) + "Table";
2224
2230
  const changeSchema = ast.fromSchema !== ast.toSchema;
2225
2231
  for (const node of ts.class.iterate(statements)) {
2226
2232
  if (((_a2 = node.name) == null ? void 0 : _a2.escapedText) !== className)