orchid-orm 1.5.12 → 1.5.14
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 +12 -0
- package/dist/bin.js +26 -4
- package/dist/bin.js.map +1 -1
- package/package.json +1 -1
- package/rollup.config.js +1 -0
- package/src/bin/bin.ts +2 -2
- package/src/bin/init.test.ts +35 -4
- package/src/bin/init.ts +25 -3
package/CHANGELOG.md
CHANGED
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
|
|
17
|
+
const askOrchidORMConfig = async () => {
|
|
17
18
|
const response = await prompts__default["default"]([
|
|
18
19
|
{
|
|
19
20
|
type: "select",
|
|
@@ -68,6 +69,7 @@ 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([
|
|
@@ -342,10 +344,16 @@ rakeDb(${config.testDatabase ? "config.allDatabases" : "config.database"}, {
|
|
|
342
344
|
migrationsPath: 'src/db/migrations',
|
|
343
345
|
appCodeUpdater: appCodeUpdater({
|
|
344
346
|
tablePath: (tableName) => \`src/db/tables/\${tableName}.ts\`,
|
|
345
|
-
baseTablePath: 'src/
|
|
347
|
+
baseTablePath: 'src/db/baseTable.ts',
|
|
346
348
|
baseTableName: 'BaseTable',
|
|
347
|
-
mainFilePath: 'src/db.ts',
|
|
349
|
+
mainFilePath: 'src/db/db.ts',
|
|
348
350
|
}),
|
|
351
|
+
commands: {
|
|
352
|
+
async seed() {
|
|
353
|
+
const { run } = await import('./seed');
|
|
354
|
+
await run();
|
|
355
|
+
},
|
|
356
|
+
},
|
|
349
357
|
});
|
|
350
358
|
`
|
|
351
359
|
);
|
|
@@ -403,6 +411,20 @@ const makeFileTimeStamp = () => {
|
|
|
403
411
|
now.getUTCSeconds()
|
|
404
412
|
].map((value) => value < 10 ? `0${value}` : value).join("");
|
|
405
413
|
};
|
|
414
|
+
const createSeed = async () => {
|
|
415
|
+
const filePath = path__default["default"].join(dirPath, "seed.ts");
|
|
416
|
+
await fs__default["default"].writeFile(
|
|
417
|
+
filePath,
|
|
418
|
+
`import { db } from './db';
|
|
419
|
+
|
|
420
|
+
export const seed = async () => {
|
|
421
|
+
// create records here
|
|
422
|
+
|
|
423
|
+
await db.close();
|
|
424
|
+
}
|
|
425
|
+
`
|
|
426
|
+
);
|
|
427
|
+
};
|
|
406
428
|
|
|
407
|
-
|
|
429
|
+
askOrchidORMConfig().then(initOrchidORM);
|
|
408
430
|
//# 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 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/db/baseTable.ts',\n baseTableName: 'BaseTable',\n mainFilePath: 'src/db/db.ts',\n }),\n commands: {\n async seed() {\n const { run } = await import('./seed');\n await run();\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 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\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/package.json
CHANGED
package/rollup.config.js
CHANGED
package/src/bin/bin.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { askOrchidORMConfig, initOrchidORM } from './init';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
askOrchidORMConfig().then(initOrchidORM);
|
package/src/bin/init.test.ts
CHANGED
|
@@ -46,6 +46,7 @@ const configPath = path.join(dbDirPath, 'config.ts');
|
|
|
46
46
|
const dbPath = path.join(dbDirPath, 'db.ts');
|
|
47
47
|
const migrationScriptPath = path.join(dbDirPath, 'dbScripts.ts');
|
|
48
48
|
const migrationsPath = path.join(dbDirPath, 'migrations');
|
|
49
|
+
const seedPath = path.join(dbDirPath, 'seed.ts');
|
|
49
50
|
|
|
50
51
|
describe('initOrchidORM', () => {
|
|
51
52
|
beforeEach(jest.clearAllMocks);
|
|
@@ -657,10 +658,16 @@ rakeDb(config.database, {
|
|
|
657
658
|
migrationsPath: 'src/db/migrations',
|
|
658
659
|
appCodeUpdater: appCodeUpdater({
|
|
659
660
|
tablePath: (tableName) => \`src/db/tables/\${tableName}.ts\`,
|
|
660
|
-
baseTablePath: 'src/
|
|
661
|
+
baseTablePath: 'src/db/baseTable.ts',
|
|
661
662
|
baseTableName: 'BaseTable',
|
|
662
|
-
mainFilePath: 'src/db.ts',
|
|
663
|
+
mainFilePath: 'src/db/db.ts',
|
|
663
664
|
}),
|
|
665
|
+
commands: {
|
|
666
|
+
async seed() {
|
|
667
|
+
const { run } = await import('./seed');
|
|
668
|
+
await run();
|
|
669
|
+
},
|
|
670
|
+
},
|
|
664
671
|
});
|
|
665
672
|
`);
|
|
666
673
|
});
|
|
@@ -681,10 +688,16 @@ rakeDb(config.allDatabases, {
|
|
|
681
688
|
migrationsPath: 'src/db/migrations',
|
|
682
689
|
appCodeUpdater: appCodeUpdater({
|
|
683
690
|
tablePath: (tableName) => \`src/db/tables/\${tableName}.ts\`,
|
|
684
|
-
baseTablePath: 'src/
|
|
691
|
+
baseTablePath: 'src/db/baseTable.ts',
|
|
685
692
|
baseTableName: 'BaseTable',
|
|
686
|
-
mainFilePath: 'src/db.ts',
|
|
693
|
+
mainFilePath: 'src/db/db.ts',
|
|
687
694
|
}),
|
|
695
|
+
commands: {
|
|
696
|
+
async seed() {
|
|
697
|
+
const { run } = await import('./seed');
|
|
698
|
+
await run();
|
|
699
|
+
},
|
|
700
|
+
},
|
|
688
701
|
});
|
|
689
702
|
`);
|
|
690
703
|
});
|
|
@@ -730,6 +743,24 @@ change(async (db) => {
|
|
|
730
743
|
...t.timestamps(),
|
|
731
744
|
}));
|
|
732
745
|
});
|
|
746
|
+
`);
|
|
747
|
+
});
|
|
748
|
+
});
|
|
749
|
+
|
|
750
|
+
describe('seed', () => {
|
|
751
|
+
it('should create seed file', async () => {
|
|
752
|
+
await initOrchidORM({});
|
|
753
|
+
|
|
754
|
+
const [, content] = asMock(fs.writeFile).mock.calls.find(
|
|
755
|
+
([to]) => to === seedPath,
|
|
756
|
+
);
|
|
757
|
+
expect(content).toBe(`import { db } from './db';
|
|
758
|
+
|
|
759
|
+
export const seed = async () => {
|
|
760
|
+
// create records here
|
|
761
|
+
|
|
762
|
+
await db.close();
|
|
763
|
+
}
|
|
733
764
|
`);
|
|
734
765
|
});
|
|
735
766
|
});
|
package/src/bin/init.ts
CHANGED
|
@@ -15,7 +15,7 @@ type DependencyKind = 'dependencies' | 'devDependencies';
|
|
|
15
15
|
|
|
16
16
|
const dirPath = path.resolve(process.cwd(), 'src', 'db');
|
|
17
17
|
|
|
18
|
-
export const
|
|
18
|
+
export const askOrchidORMConfig = async () => {
|
|
19
19
|
const response = await prompts([
|
|
20
20
|
{
|
|
21
21
|
type: 'select',
|
|
@@ -73,6 +73,7 @@ export const initOrchidORM = async (config: InitConfig) => {
|
|
|
73
73
|
await setupMainDb(config);
|
|
74
74
|
await setupMigrationScript(config);
|
|
75
75
|
await createMigrations(config);
|
|
76
|
+
await createSeed();
|
|
76
77
|
};
|
|
77
78
|
|
|
78
79
|
const setupPackageJson = async (config: InitConfig) => {
|
|
@@ -389,10 +390,16 @@ rakeDb(${config.testDatabase ? 'config.allDatabases' : 'config.database'}, {
|
|
|
389
390
|
migrationsPath: 'src/db/migrations',
|
|
390
391
|
appCodeUpdater: appCodeUpdater({
|
|
391
392
|
tablePath: (tableName) => \`src/db/tables/\${tableName}.ts\`,
|
|
392
|
-
baseTablePath: 'src/
|
|
393
|
+
baseTablePath: 'src/db/baseTable.ts',
|
|
393
394
|
baseTableName: 'BaseTable',
|
|
394
|
-
mainFilePath: 'src/db.ts',
|
|
395
|
+
mainFilePath: 'src/db/db.ts',
|
|
395
396
|
}),
|
|
397
|
+
commands: {
|
|
398
|
+
async seed() {
|
|
399
|
+
const { run } = await import('./seed');
|
|
400
|
+
await run();
|
|
401
|
+
},
|
|
402
|
+
},
|
|
396
403
|
});
|
|
397
404
|
`,
|
|
398
405
|
);
|
|
@@ -456,3 +463,18 @@ const makeFileTimeStamp = () => {
|
|
|
456
463
|
.map((value) => (value < 10 ? `0${value}` : value))
|
|
457
464
|
.join('');
|
|
458
465
|
};
|
|
466
|
+
|
|
467
|
+
const createSeed = async () => {
|
|
468
|
+
const filePath = path.join(dirPath, 'seed.ts');
|
|
469
|
+
await fs.writeFile(
|
|
470
|
+
filePath,
|
|
471
|
+
`import { db } from './db';
|
|
472
|
+
|
|
473
|
+
export const seed = async () => {
|
|
474
|
+
// create records here
|
|
475
|
+
|
|
476
|
+
await db.close();
|
|
477
|
+
}
|
|
478
|
+
`,
|
|
479
|
+
);
|
|
480
|
+
};
|