orchid-orm 1.5.10 → 1.5.12

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,21 @@
1
1
  # orchid-orm
2
2
 
3
+ ## 1.5.12
4
+
5
+ ### Patch Changes
6
+
7
+ - Add init script
8
+ - Updated dependencies
9
+ - pqb@0.9.10
10
+
11
+ ## 1.5.11
12
+
13
+ ### Patch Changes
14
+
15
+ - Override column types via callback
16
+ - Updated dependencies
17
+ - pqb@0.9.9
18
+
3
19
  ## 1.5.10
4
20
 
5
21
  ### Patch Changes
package/dist/bin.js ADDED
@@ -0,0 +1,408 @@
1
+ 'use strict';
2
+
3
+ var fs = require('fs/promises');
4
+ var path = require('path');
5
+ var https = require('https');
6
+ var prompts = require('prompts');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
11
+ var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
12
+ var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
13
+ var prompts__default = /*#__PURE__*/_interopDefaultLegacy(prompts);
14
+
15
+ const dirPath = path__default["default"].resolve(process.cwd(), "src", "db");
16
+ const astOrchidORMConfig = async () => {
17
+ const response = await prompts__default["default"]([
18
+ {
19
+ type: "select",
20
+ name: "timestamp",
21
+ message: "Preferred type of returned timestamps:",
22
+ choices: [
23
+ {
24
+ title: "string (as returned from db)"
25
+ },
26
+ {
27
+ title: "number (epoch)",
28
+ value: "number"
29
+ },
30
+ {
31
+ title: "Date object",
32
+ value: "date"
33
+ }
34
+ ]
35
+ },
36
+ {
37
+ type: "confirm",
38
+ name: "testDatabase",
39
+ message: "Should I add a separate database for tests?"
40
+ },
41
+ {
42
+ type: "confirm",
43
+ name: "addSchemaToZod",
44
+ message: "Are you going to use Zod for validation?"
45
+ },
46
+ {
47
+ type: "confirm",
48
+ name: "addTestFactory",
49
+ message: "Do you want object factories for writing tests?"
50
+ },
51
+ {
52
+ type: "confirm",
53
+ name: "demoTables",
54
+ message: "Should I add demo tables?"
55
+ }
56
+ ]);
57
+ return response;
58
+ };
59
+ const initOrchidORM = async (config) => {
60
+ await fs__default["default"].mkdir(dirPath, { recursive: true });
61
+ await setupPackageJson(config);
62
+ await setupTSConfig();
63
+ await setupEnv(config);
64
+ await setupGitIgnore();
65
+ await setupBaseTable(config);
66
+ await setupTables(config);
67
+ await setupConfig(config);
68
+ await setupMainDb(config);
69
+ await setupMigrationScript(config);
70
+ await createMigrations(config);
71
+ };
72
+ const setupPackageJson = async (config) => {
73
+ const pairs = await Promise.all([
74
+ getLatestPackageVersion("dotenv", "dependencies"),
75
+ getLatestPackageVersion("orchid-orm", "dependencies"),
76
+ getLatestPackageVersion("pqb", "dependencies"),
77
+ config.addSchemaToZod && getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies"),
78
+ getLatestPackageVersion("rake-db", "devDependencies"),
79
+ config.addTestFactory && getLatestPackageVersion("orchid-orm-test-factory", "devDependencies"),
80
+ getLatestPackageVersion("@swc/core", "devDependencies"),
81
+ getLatestPackageVersion("@types/node", "devDependencies"),
82
+ getLatestPackageVersion("ts-node", "devDependencies"),
83
+ getLatestPackageVersion("typescript", "devDependencies")
84
+ ]);
85
+ const deps = {};
86
+ const devDeps = {};
87
+ for (const item of pairs) {
88
+ if (!item)
89
+ continue;
90
+ const [key, { version, kind }] = item;
91
+ (kind === "dependencies" ? deps : devDeps)[key] = version;
92
+ }
93
+ const packageJsonPath = path__default["default"].resolve(process.cwd(), "package.json");
94
+ const content = await readFileSafe(packageJsonPath);
95
+ const json = content ? JSON.parse(content) : {};
96
+ if (!json.scripts)
97
+ json.scripts = {};
98
+ json.scripts.db = "ts-node src/db/dbScripts.ts";
99
+ if (!json.dependencies)
100
+ json.dependencies = {};
101
+ for (const key in deps) {
102
+ json.dependencies[key] = deps[key];
103
+ }
104
+ if (!json.devDependencies)
105
+ json.devDependencies = {};
106
+ for (const key in devDeps) {
107
+ json.devDependencies[key] = devDeps[key];
108
+ }
109
+ await fs__default["default"].writeFile(packageJsonPath, JSON.stringify(json, null, " ") + "\n");
110
+ };
111
+ const getLatestPackageVersion = (name, kind) => {
112
+ return new Promise((resolve, reject) => {
113
+ https__default["default"].get(`https://registry.npmjs.org/${name}/latest`, (res) => {
114
+ let data = "";
115
+ res.on("data", (chunk) => data += chunk);
116
+ res.on(
117
+ "end",
118
+ () => resolve([name, { version: `^${JSON.parse(data).version}`, kind }])
119
+ );
120
+ }).on("error", reject);
121
+ });
122
+ };
123
+ const readFileSafe = async (path2) => {
124
+ try {
125
+ return await fs__default["default"].readFile(path2, "utf-8");
126
+ } catch (err) {
127
+ if (err.code === "ENOENT") {
128
+ return void 0;
129
+ }
130
+ throw err;
131
+ }
132
+ };
133
+ const setupTSConfig = async () => {
134
+ var _a;
135
+ const tsConfigPath = path__default["default"].resolve(process.cwd(), "tsconfig.json");
136
+ const content = await readFileSafe(tsConfigPath);
137
+ const json = content ? JSON.parse(content) : {};
138
+ if (!json["ts-node"]) {
139
+ json["ts-node"] = {};
140
+ }
141
+ if (!json["ts-node"].swc) {
142
+ json["ts-node"].swc = true;
143
+ }
144
+ if (!((_a = json.compilerOptions) == null ? void 0 : _a.strict)) {
145
+ if (!json.compilerOptions)
146
+ json.compilerOptions = {};
147
+ json.compilerOptions.strict = true;
148
+ await fs__default["default"].writeFile(tsConfigPath, `${JSON.stringify(json, null, " ")}
149
+ `);
150
+ }
151
+ };
152
+ const setupEnv = async (config) => {
153
+ const envPath = path__default["default"].resolve(process.cwd(), ".env");
154
+ let content = (await readFileSafe(envPath) || "").trim();
155
+ let changed = false;
156
+ if (!content.match(/^DATABASE_URL=/m)) {
157
+ content += `
158
+ DATABASE_URL=postgres://user:password@localhost:5432/dbname?ssl=false`;
159
+ changed = true;
160
+ }
161
+ if (config.testDatabase && !content.match(/^DATABASE_TEST_URL=/m)) {
162
+ content += `
163
+ DATABASE_TEST_URL=postgres://user:password@localhost:5432/dbname-test?ssl=false`;
164
+ changed = true;
165
+ }
166
+ if (changed) {
167
+ await fs__default["default"].writeFile(envPath, `${content.trim()}
168
+ `);
169
+ }
170
+ };
171
+ const setupGitIgnore = async () => {
172
+ const gitignorePath = path__default["default"].resolve(process.cwd(), ".gitignore");
173
+ let content = (await readFileSafe(gitignorePath) || "").trim();
174
+ let changed = false;
175
+ if (!content.match(/^node_modules\b/m)) {
176
+ content += `
177
+ node_modules`;
178
+ changed = true;
179
+ }
180
+ if (!content.match(/^.env\b/m)) {
181
+ content += `
182
+ .env`;
183
+ changed = true;
184
+ }
185
+ if (changed) {
186
+ await fs__default["default"].writeFile(gitignorePath, `${content.trim()}
187
+ `);
188
+ }
189
+ };
190
+ const setupBaseTable = async (config) => {
191
+ const filePath = path__default["default"].join(dirPath, "baseTable.ts");
192
+ let content = `import { createBaseTable } from 'orchid-orm';
193
+
194
+ export const BaseTable = createBaseTable({
195
+ columnTypes: (t) => ({
196
+ text: (min: 0, max: Infinity) => t.text(min, max),`;
197
+ const { timestamp } = config;
198
+ if (timestamp) {
199
+ content += `
200
+ timestamp: <P extends number>(precision?: P) => t.timestamp<P>(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
201
+ }
202
+ content += `
203
+ }),
204
+ });
205
+ `;
206
+ await fs__default["default"].writeFile(filePath, content);
207
+ };
208
+ const setupTables = async (config) => {
209
+ if (!config.demoTables)
210
+ return;
211
+ const tablesDir = path__default["default"].join(dirPath, "tables");
212
+ await fs__default["default"].mkdir(tablesDir, { recursive: true });
213
+ await fs__default["default"].writeFile(
214
+ path__default["default"].join(tablesDir, "post.table.ts"),
215
+ `import { BaseTable } from '../baseTable';
216
+ import { CommentTable } from './comment.table';
217
+ ${config.addSchemaToZod ? `import { tableToZod } from 'orchid-orm-schema-to-zod';
218
+ ` : ""}
219
+ export type Post = PostTable['columns']['type'];
220
+ class PostTable extends BaseTable {
221
+ table = 'post';
222
+ columns = this.setColumns((t) => ({
223
+ id: t.serial().primaryKey(),
224
+ title: t.text(3, 100),
225
+ text: t.text(20, 10000),
226
+ ...t.timestamps(),
227
+ }));
228
+
229
+ relations = {
230
+ comments: this.hasMany(() => CommentTable, {
231
+ primaryKey: 'id',
232
+ foreignKey: 'postId',
233
+ }),
234
+ }
235
+ }
236
+ ${config.addSchemaToZod ? `
237
+ export const postSchema = tableToZod(PostTable);
238
+ ` : ""}`
239
+ );
240
+ await fs__default["default"].writeFile(
241
+ path__default["default"].join(tablesDir, "comment.table.ts"),
242
+ `import { BaseTable } from '../baseTable';
243
+ import { PostTable } from './post.table';
244
+ ${config.addSchemaToZod ? `import { tableToZod } from 'orchid-orm-schema-to-zod';
245
+ ` : ""}
246
+ export type Comment = CommentTable['columns']['type'];
247
+ class CommentTable extends BaseTable {
248
+ table = 'comment';
249
+ columns = this.setColumns((t) => ({
250
+ id: t.serial().primaryKey(),
251
+ postId: t.integer().foreignKey(() => PostTable, 'id').index(),
252
+ text: t.text(5, 1000),
253
+ ...t.timestamps(),
254
+ }));
255
+
256
+ relations = {
257
+ post: this.belongsTo(() => PostTable, {
258
+ primaryKey: 'id',
259
+ foreignKey: 'postId',
260
+ }),
261
+ }
262
+ }
263
+ ${config.addSchemaToZod ? `
264
+ export const commentSchema = tableToZod(CommentTable);
265
+ ` : ""}`
266
+ );
267
+ };
268
+ const setupConfig = async (config) => {
269
+ const configPath = path__default["default"].join(dirPath, "config.ts");
270
+ let content = `import 'dotenv/config';
271
+
272
+ const database = {
273
+ databaseURL: process.env.DATABASE_URL,
274
+ };
275
+ if (!database.databaseURL) throw new Error('DATABASE_URL is missing in .env');`;
276
+ if (config.testDatabase) {
277
+ content += `
278
+
279
+ const testDatabase = {
280
+ databaseURL: process.env.DATABASE_TEST_URL,
281
+ };
282
+
283
+ const allDatabases = [database];
284
+
285
+ if (testDatabase.databaseURL) {
286
+ allDatabases.push(testDatabase);
287
+ }`;
288
+ }
289
+ content += `
290
+
291
+ export const config = {`;
292
+ if (config.testDatabase) {
293
+ content += `
294
+ allDatabases,`;
295
+ }
296
+ if (config.testDatabase) {
297
+ content += `
298
+ database: process.env.NODE_ENV === 'test' ? testDatabase : database,`;
299
+ } else {
300
+ content += `
301
+ database,`;
302
+ }
303
+ content += `
304
+ }
305
+ `;
306
+ await fs__default["default"].writeFile(configPath, content);
307
+ };
308
+ const setupMainDb = async (config) => {
309
+ let imports = "";
310
+ let tables = "";
311
+ if (config.demoTables) {
312
+ imports += `
313
+ import { Post } from './tables/post.table';
314
+ import { Comment } from './tables/comment.table';`;
315
+ tables += `
316
+ post: Post,
317
+ comment: Comment,`;
318
+ }
319
+ const dbPath = path__default["default"].join(dirPath, "db.ts");
320
+ await fs__default["default"].writeFile(
321
+ dbPath,
322
+ `import { orchidORM } from 'orchid-orm';
323
+ import { config } from './config';${imports}
324
+
325
+ export const db = orchidORM(
326
+ config.database,
327
+ {${tables}
328
+ }
329
+ );
330
+ `
331
+ );
332
+ };
333
+ const setupMigrationScript = async (config) => {
334
+ const filePath = path__default["default"].join(dirPath, "dbScripts.ts");
335
+ await fs__default["default"].writeFile(
336
+ filePath,
337
+ `import { rakeDb } from 'rake-db';
338
+ import { config } from './config';
339
+ import { appCodeUpdater } from 'orchid-orm';
340
+
341
+ rakeDb(${config.testDatabase ? "config.allDatabases" : "config.database"}, {
342
+ migrationsPath: 'src/db/migrations',
343
+ appCodeUpdater: appCodeUpdater({
344
+ tablePath: (tableName) => \`src/db/tables/\${tableName}.ts\`,
345
+ baseTablePath: 'src/lib/baseTable.ts',
346
+ baseTableName: 'BaseTable',
347
+ mainFilePath: 'src/db.ts',
348
+ }),
349
+ });
350
+ `
351
+ );
352
+ };
353
+ const createMigrations = async (config) => {
354
+ const migrationsPath = path__default["default"].join(dirPath, "migrations");
355
+ await fs__default["default"].mkdir(migrationsPath);
356
+ if (!config.demoTables)
357
+ return;
358
+ const postPath = path__default["default"].join(
359
+ migrationsPath,
360
+ `${makeFileTimeStamp()}_createPost.ts`
361
+ );
362
+ await fs__default["default"].writeFile(
363
+ postPath,
364
+ `import { change } from 'rake-db';
365
+
366
+ change(async (db) => {
367
+ await db.createTable('post', (t) => ({
368
+ id: t.serial().primaryKey(),
369
+ title: t.text(),
370
+ text: t.text(),
371
+ ...t.timestamps(),
372
+ }));
373
+ });
374
+ `
375
+ );
376
+ const commentPath = path__default["default"].join(
377
+ migrationsPath,
378
+ `${makeFileTimeStamp()}_createComment.ts`
379
+ );
380
+ await fs__default["default"].writeFile(
381
+ commentPath,
382
+ `import { change } from 'rake-db';
383
+
384
+ change(async (db) => {
385
+ await db.createTable('comment', (t) => ({
386
+ id: t.serial().primaryKey(),
387
+ postId: t.integer().foreignKey('post', 'id').index(),
388
+ text: t.text(),
389
+ ...t.timestamps(),
390
+ }));
391
+ });
392
+ `
393
+ );
394
+ };
395
+ const makeFileTimeStamp = () => {
396
+ const now = new Date();
397
+ return [
398
+ now.getUTCFullYear(),
399
+ now.getUTCMonth() + 1,
400
+ now.getUTCDate(),
401
+ now.getUTCHours(),
402
+ now.getUTCMinutes(),
403
+ now.getUTCSeconds()
404
+ ].map((value) => value < 10 ? `0${value}` : value).join("");
405
+ };
406
+
407
+ astOrchidORMConfig().then(initOrchidORM);
408
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +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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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as pqb from 'pqb';
2
- import { BelongsToRelation, HasManyRelation, HasOneRelation, Db, Adapter, AdapterOptions, QueryLogOptions, NoPrimaryKeyOption, HasAndBelongsToManyRelation, Query, defaultsKey, EmptyObject, BaseRelation, RelationQuery, SetQueryReturnsOne, SetQueryReturnsOneOptional, SetQueryReturnsAll, ColumnTypesBase, ColumnsShape, ColumnShapeOutput, WhereResult, MergeQuery, SetQueryReturns, QueryReturnType } from 'pqb';
2
+ import { BelongsToRelation, HasManyRelation, HasOneRelation, Db, Adapter, AdapterOptions, QueryLogOptions, NoPrimaryKeyOption, HasAndBelongsToManyRelation, Query, defaultsKey, EmptyObject, BaseRelation, RelationQuery, SetQueryReturnsOne, SetQueryReturnsOneOptional, SetQueryReturnsAll, ColumnTypesBase, DefaultColumnTypes, ColumnsShape, ColumnShapeOutput, WhereResult, MergeQuery, SetQueryReturns, QueryReturnType } from 'pqb';
3
3
  export { columnTypes } from 'pqb';
4
4
  import { AppCodeUpdater } from 'rake-db';
5
5
 
@@ -142,7 +142,7 @@ declare type Table = {
142
142
  noPrimaryKey?: boolean;
143
143
  };
144
144
  declare const createBaseTable: <CT extends ColumnTypesBase>(options?: {
145
- columnTypes?: CT | undefined;
145
+ columnTypes?: CT | ((t: DefaultColumnTypes) => CT) | undefined;
146
146
  }) => {
147
147
  new (): {
148
148
  table: string;
@@ -166,8 +166,8 @@ declare const createBaseTable: <CT extends ColumnTypesBase>(options?: {
166
166
  string: (min: number, max: number) => pqb.TextColumn;
167
167
  bytea: () => pqb.ByteaColumn;
168
168
  date: () => pqb.DateColumn;
169
- timestamp: <Precision_2 extends number | undefined = undefined>(precision?: Precision_2 | undefined) => pqb.TimestampColumn<Precision_2>;
170
- timestampWithTimeZone: <Precision_3 extends number | undefined = undefined>(precision?: Precision_3 | undefined) => pqb.TimestampWithTimeZoneColumn<Precision_3>;
169
+ timestamp: <Precision_2 extends number>(precision?: Precision_2 | undefined) => pqb.TimestampColumn<Precision_2>;
170
+ timestampWithTimeZone: <Precision_3 extends number | undefined = undefined>(precision?: Precision_3 | undefined) => pqb.TimestampWithTimeZoneColumn<number>;
171
171
  time: <Precision_4 extends number | undefined = undefined>(precision?: Precision_4 | undefined) => pqb.TimeColumn<Precision_4>;
172
172
  timeWithTimeZone: <Precision_5 extends number | undefined = undefined>(precision?: Precision_5 | undefined) => pqb.TimeWithTimeZoneColumn<Precision_5>;
173
173
  interval: <Fields extends string | undefined = undefined, Precision_6 extends number | undefined = undefined>(fields?: Fields | undefined, precision?: Precision_6 | undefined) => pqb.IntervalColumn<Fields, Precision_6>;
@@ -266,8 +266,8 @@ declare const createBaseTable: <CT extends ColumnTypesBase>(options?: {
266
266
  string: (min: number, max: number) => pqb.TextColumn;
267
267
  bytea: () => pqb.ByteaColumn;
268
268
  date: () => pqb.DateColumn;
269
- timestamp: <Precision_2 extends number | undefined = undefined>(precision?: Precision_2 | undefined) => pqb.TimestampColumn<Precision_2>;
270
- timestampWithTimeZone: <Precision_3 extends number | undefined = undefined>(precision?: Precision_3 | undefined) => pqb.TimestampWithTimeZoneColumn<Precision_3>;
269
+ timestamp: <Precision_2 extends number>(precision?: Precision_2 | undefined) => pqb.TimestampColumn<Precision_2>;
270
+ timestampWithTimeZone: <Precision_3 extends number | undefined = undefined>(precision?: Precision_3 | undefined) => pqb.TimestampWithTimeZoneColumn<number>;
271
271
  time: <Precision_4 extends number | undefined = undefined>(precision?: Precision_4 | undefined) => pqb.TimeColumn<Precision_4>;
272
272
  timeWithTimeZone: <Precision_5 extends number | undefined = undefined>(precision?: Precision_5 | undefined) => pqb.TimeWithTimeZoneColumn<Precision_5>;
273
273
  interval: <Fields extends string | undefined = undefined, Precision_6 extends number | undefined = undefined>(fields?: Fields | undefined, precision?: Precision_6 | undefined) => pqb.IntervalColumn<Fields, Precision_6>;
package/dist/index.js CHANGED
@@ -33,9 +33,8 @@ var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
33
33
  var typescript__default = /*#__PURE__*/_interopDefaultLegacy(typescript);
34
34
 
35
35
  const createBaseTable = (options = { columnTypes: pqb.columnTypes }) => {
36
- return create(
37
- options.columnTypes
38
- );
36
+ const ct = typeof options.columnTypes === "function" ? options.columnTypes(pqb.columnTypes) : options.columnTypes;
37
+ return create(ct);
39
38
  };
40
39
  const create = (columnTypes2) => {
41
40
  return class BaseTable {