create-orchid-orm 0.0.4 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.js CHANGED
@@ -132,9 +132,23 @@ async function getConfig(logger = console) {
132
132
  message: "Add a separate database for tests?"
133
133
  },
134
134
  {
135
- type: "confirm",
136
- name: "addSchemaToZod",
137
- message: "Add Zod for validations?"
135
+ type: "select",
136
+ name: "validation",
137
+ message: "Integrate with a validation library?",
138
+ choices: [
139
+ {
140
+ title: "no",
141
+ value: "no"
142
+ },
143
+ {
144
+ title: "zod",
145
+ value: "zod"
146
+ },
147
+ {
148
+ title: "valibot",
149
+ value: "valibot"
150
+ }
151
+ ]
138
152
  },
139
153
  {
140
154
  type: "confirm",
@@ -191,7 +205,7 @@ async function setupPackageJSON(config) {
191
205
  const pairs = await Promise.all([
192
206
  getLatestPackageVersion("dotenv", "dependencies"),
193
207
  getLatestPackageVersion("orchid-orm", "dependencies"),
194
- config.addSchemaToZod && getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies"),
208
+ config.validation === "zod" ? getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies") : config.validation === "valibot" ? getLatestPackageVersion("orchid-orm-valibot", "dependencies") : void 0,
195
209
  getLatestPackageVersion("rake-db", "devDependencies"),
196
210
  config.addTestFactory && getLatestPackageVersion("orchid-orm-test-factory", "devDependencies"),
197
211
  getLatestPackageVersion("@types/node", "devDependencies"),
@@ -319,29 +333,30 @@ node_modules`;
319
333
 
320
334
  async function setupBaseTable(config) {
321
335
  const filePath = path.join(config.dbDirPath, "baseTable.ts");
322
- let content = `import { createBaseTable } from 'orchid-orm';${config.addSchemaToZod ? `
323
- import { zodSchemaProvider } from 'orchid-orm-schema-to-zod';` : ""}
336
+ let content = `import { createBaseTable } from 'orchid-orm';${config.validation === "zod" ? `
337
+ import { zodSchemaConfig } from 'orchid-orm-schema-to-zod';` : config.validation === "valibot" ? `
338
+ import { valibotSchemaConfig } from 'orchid-orm-valibot';` : ""}
324
339
 
325
340
  export const BaseTable = createBaseTable({
326
341
  // Set \`snakeCase\` to \`true\` if columns in your database are in snake_case.
327
- // snakeCase: true,
342
+ // snakeCase: true,${config.validation !== "no" ? `
343
+
344
+ schemaConfig: ${config.validation === "zod" ? "zodSchemaConfig" : "valibotSchemaConfig"},` : ""}
328
345
 
329
346
  // Customize column types for all tables.
330
347
  columnTypes: (t) => ({
331
- ...t,${config.addSchemaToZod ? `
348
+ ...t,${config.validation === "no" ? "" : `
332
349
  // Set min and max validations for all text columns,
333
- // it is only checked when validating with Zod schemas derived from the table.
334
- text: (min = 0, max = Infinity) => t.text(min, max),` : ""}`;
350
+ // it is only checked when validating with ${config.validation} schemas derived from the table.
351
+ text: (min = 0, max = Infinity) => t.text(min, max),`}`;
335
352
  const { timestamp } = config;
336
353
  if (timestamp && timestamp !== "string") {
337
354
  content += `
338
355
  // Parse timestamps to ${timestamp === "number" ? "number" : "Date object"}.
339
- timestamp: <P extends number>(precision?: P) =>
340
- t.timestamp<P>(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
356
+ timestamp: (precision?: number) => t.timestamp(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
341
357
  }
342
358
  content += `
343
- }),${config.addSchemaToZod ? `
344
- schemaProvider: zodSchemaProvider,` : ""}
359
+ }),
345
360
  });
346
361
  `;
347
362
  await fs.writeFile(filePath, content);
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sources":["../src/lib/utils.ts","../src/lib/getConfig.ts","../src/lib/init/setupPackageJSON.ts","../src/lib/init/setupTSConfig.ts","../src/lib/init/setupEnv.ts","../src/lib/init/setupGitIgnore.ts","../src/lib/init/setupBaseTable.ts","../src/lib/init/setupDemoTables.ts","../src/lib/init/setupConfig.ts","../src/lib/init/setupMainDb.ts","../src/lib/init/setupMigrationScript.ts","../src/lib/init/createDemoMigrations.ts","../src/lib/init/createDemoSeed.ts","../src/lib/init/setupRunner.ts","../src/lib/init.ts","../src/lib/greetAfterInstall.ts","../src/bin.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { basename, join } from 'path';\nimport https from 'https';\nimport { InitConfig } from '../lib';\n\nexport async function readFileSafe(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\nexport function makeFileTimeStamp(now: Date): string {\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\nexport async function createSeed(\n config: InitConfig,\n dirPath: string,\n): Promise<void> {\n const filePath = join(dirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n\nexport type DependencyKind = 'dependencies' | 'devDependencies';\nexport function 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\nexport function getPackageManagerName(): 'npm' | 'yarn' | 'pnpm' | 'bun' {\n const { npm_execpath } = process.env;\n if (npm_execpath) {\n const name = basename(npm_execpath);\n if (/npm/.test(name)) {\n return 'npm';\n }\n if (/yarn/.test(name)) {\n return 'yarn';\n }\n if (/bun/.test(name)) {\n return 'bun';\n }\n }\n\n return 'pnpm';\n}\n","import prompts from 'prompts';\nimport { join, resolve, basename } from 'path';\nimport { InitConfig, UserProvidedConfig } from '../lib';\nimport { getPackageManagerName, readFileSafe } from './utils';\n\nexport async function getConfig(\n logger: { log(message: string): void } = console,\n): Promise<InitConfig | undefined> {\n let cancelled = false;\n\n logger.log('Welcome to Orchid ORM installer!');\n\n const isBun = getPackageManagerName() === 'bun';\n\n const response = await prompts<keyof UserProvidedConfig>(\n [\n {\n type: 'text',\n name: 'path',\n message: 'Where to install Orchid ORM?',\n initial: process.cwd(),\n },\n ...(isBun\n ? []\n : [\n {\n type: 'select' as const,\n name: 'runner' as const,\n message: 'Choose a tool for executing TS files',\n choices: [\n {\n title: 'tsx',\n value: 'tsx',\n },\n {\n title: 'vite-node',\n value: 'vite-node',\n },\n {\n title: 'ts-node',\n value: 'ts-node',\n },\n ],\n },\n ]),\n {\n type: 'select',\n name: 'timestamp',\n message: 'Return timestamps as:',\n choices: [\n {\n title: 'string (as returned from db)',\n value: 'string',\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: 'Add a separate database for tests?',\n },\n {\n type: 'confirm',\n name: 'addSchemaToZod',\n message: 'Add Zod for validations?',\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Add record factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Add demo tables?',\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (isBun) response.runner = 'bun';\n\n if (cancelled) return;\n\n const path = resolve(response.path);\n const tsConfigPath = join(path, 'tsconfig.json');\n const hasTsConfig = await readFileSafe(tsConfigPath);\n const dbDirPath = join(path, 'src', 'db');\n\n return {\n ...response,\n hasTsConfig: !!hasTsConfig,\n path: resolve(response.path),\n dbDirPath,\n projectName: basename(path),\n esm: response.runner !== 'ts-node',\n };\n}\n","import { InitConfig } from '../../lib';\nimport { getLatestPackageVersion, readFileSafe } from '../utils';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupPackageJSON(config: InitConfig): Promise<void> {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', '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('@types/node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion('vite', 'devDependencies'),\n config.runner !== 'bun' &&\n getLatestPackageVersion(config.runner, 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion(\n 'rollup-plugin-node-externals',\n 'devDependencies',\n ),\n config.runner === 'tsx' &&\n getLatestPackageVersion('esbuild', 'devDependencies'),\n config.runner === 'tsx' &&\n getLatestPackageVersion('rimraf', '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 = join(config.path, 'package.json');\n const content = await readFileSafe(packageJsonPath);\n let json = content\n ? JSON.parse(content)\n : {\n name: config.projectName,\n };\n\n if (config.esm) json = { name: json.name, type: 'module', ...json };\n\n const scripts = (json.scripts ??= {});\n\n if (config.runner === 'vite-node') {\n scripts.db = 'vite-node src/db/dbScript.ts --';\n scripts['build:migrations'] = 'vite build --config vite.migrations.mts';\n scripts['db:compiled'] = 'node dist/db/dbScript.mjs';\n } else if (config.runner === 'tsx') {\n scripts.db = 'NODE_ENV=development tsx src/db/dbScript.ts';\n scripts['build:migrations'] =\n 'rimraf dist/db && node esbuild.migrations.mjs';\n scripts['db:compiled'] = 'NODE_ENV=production node dist/db/dbScript.mjs';\n } else {\n scripts.db = `${config.runner} src/db/dbScript.ts`;\n\n if (config.runner === 'ts-node') {\n scripts.build = 'tsc';\n scripts['db:compiled'] = 'node dist/dbScript.js';\n }\n }\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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupTSConfig(config: InitConfig): Promise<void> {\n if (config.hasTsConfig) return;\n\n const module = config.runner === 'ts-node' ? 'commonjs' : 'esnext';\n const moduleResolution =\n config.runner === 'ts-node'\n ? ''\n : `\n \"moduleResolution\": \"bundler\",`;\n\n const types = config.runner === 'vite-node' ? `[\"vite/client\"]` : undefined;\n\n const tsConfigPath = join(config.path, 'tsconfig.json');\n await fs.writeFile(\n tsConfigPath,\n `{\n \"compilerOptions\": {${\n config.runner === 'ts-node'\n ? `\n \"outDir\": \"dist\",`\n : ''\n }\n \"target\": \"es2017\",\n \"module\": \"${module}\",${moduleResolution}\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true${\n types\n ? `,\n \"types\": ${types}`\n : ''\n }\n }\n}\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupEnv(config: InitConfig): Promise<void> {\n const envPath = join(config.path, '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n // by default, on Mac it is a username, on Linux it's postgres, on Windows it's postgres as well\n const user = process.platform === 'darwin' ? process.env.USER : 'postgres';\n\n // TODO: guess user and pw\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://${user}:@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}:@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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupGitIgnore(config: InitConfig): Promise<void> {\n const gitignorePath = join(config.path, '.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!.env.example`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupBaseTable(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';${\n config.addSchemaToZod\n ? `\\nimport { zodSchemaProvider } from 'orchid-orm-schema-to-zod';`\n : ''\n }\n\nexport const BaseTable = createBaseTable({\n // Set \\`snakeCase\\` to \\`true\\` if columns in your database are in snake_case.\n // snakeCase: true,\n\n // Customize column types for all tables.\n columnTypes: (t) => ({\n ...t,${\n config.addSchemaToZod\n ? `\n // Set min and max validations for all text columns,\n // it is only checked when validating with Zod schemas derived from the table.\n text: (min = 0, max = Infinity) => t.text(min, max),`\n : ''\n }`;\n\n const { timestamp } = config;\n if (timestamp && timestamp !== 'string') {\n content += `\n // Parse timestamps to ${timestamp === 'number' ? 'number' : 'Date object'}.\n timestamp: <P extends number>(precision?: P) =>\n t.timestamp<P>(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),${\n config.addSchemaToZod\n ? `\n schemaProvider: zodSchemaProvider,`\n : ''\n }\n});\n`;\n\n await fs.writeFile(filePath, content);\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupDemoTables(config: InitConfig): Promise<void> {\n if (!config.demoTables) return;\n\n const tablesDir = join(config.dbDirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n join(tablesDir, 'post.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n\n// Post type returned from database.\nexport type Post = Selectable<PostTable>;\n// Post type for insertion.\nexport type PostNew = Insertable<PostTable>;\n// Post type for updates.\nexport type PostUpdate = Updateable<PostTable>;\n// Post type used by query methods such as \\`where\\`.\nexport type PostForQuery = Queryable<PostTable>;\n\nexport class PostTable extends BaseTable {\n readonly table = 'post';\n columns = this.setColumns((t) => ({\n id: t.identity().primaryKey(),\n title: t.text(3, 100).unique(),\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 );\n\n await fs.writeFile(\n join(tablesDir, 'comment.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n\n// Comment type returned from database.\nexport type Comment = Selectable<CommentTable>;\n// Comment type for insertion.\nexport type CommentNew = Insertable<CommentTable>;\n// Comment type for updates.\nexport type CommentUpdate = Updateable<CommentTable>;\n// Comment type used by query methods such as \\`where\\`.\nexport type CommentForQuery = Queryable<CommentTable>;\n\nexport class CommentTable extends BaseTable {\n readonly table = 'comment';\n columns = this.setColumns((t) => ({\n id: t.identity().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 );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupConfig(config: InitConfig): Promise<void> {\n const configPath = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMainDb(config: InitConfig): Promise<void> {\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 = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMigrationScript(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'dbScript.ts');\n\n const migrations =\n config.runner === 'vite-node'\n ? \"migrations: import.meta.glob('./migrations/*.ts')\"\n : \"migrationsPath: './migrations'\";\n\n const useCodeUpdater =\n config.runner === 'vite-node'\n ? 'import.meta.env.DEV'\n : `process.env.NODE_ENV === 'development'`;\n\n await fs.writeFile(\n filePath,\n `import { rakeDb } from 'rake-db';\nimport { appCodeUpdater } from 'orchid-orm/codegen';\nimport { config } from './config';\nimport { BaseTable } from './baseTable';\n\nexport const change = rakeDb(${\n config.testDatabase ? 'config.allDatabases' : 'config.database'\n }, {\n baseTable: BaseTable,\n ${migrations},\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`./tables/\\${tableName}.table.ts\\`,\n ormPath: './db.ts',\n }),\n // set to false to disable code updater\n useCodeUpdater: ${useCodeUpdater},\n commands: {\n async seed() {\n const { seed } = await import('./seed');\n await seed();\n },\n },\n import: (path) => import(path),\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\nimport { makeFileTimeStamp } from '../utils';\n\nexport async function createDemoMigrations(config: InitConfig): Promise<void> {\n const migrationsPath = join(config.dbDirPath, 'migrations');\n await fs.mkdir(migrationsPath, { recursive: true });\n\n if (!config.demoTables) return;\n\n const now = new Date();\n\n const postPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createPost.ts`,\n );\n await fs.writeFile(\n postPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('post', (t) => ({\n id: t.identity().primaryKey(),\n title: t.text().unique(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n\n now.setTime(now.getTime() + 1000);\n\n const commentPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createComment.ts`,\n );\n await fs.writeFile(\n commentPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('comment', (t) => ({\n id: t.identity().primaryKey(),\n postId: t.integer().foreignKey('post', 'id').index(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\n\nexport async function createDemoSeed(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport fs from 'fs/promises';\nimport { join } from 'path';\n\nexport async function setupRunner(config: InitConfig): Promise<void> {\n if (config.runner === 'vite-node') {\n await fs.writeFile(\n join(config.path, 'vite.migrations.mts'),\n `import { resolve } from \"path\";\nimport { defineConfig, PluginOption } from \"vite\";\nimport { nodeExternals } from \"rollup-plugin-node-externals\";\n\nexport default defineConfig({\n plugins: [\n {\n ...nodeExternals(),\n name: \"node-externals\",\n enforce: \"pre\",\n apply: \"build\",\n } as PluginOption\n ],\n build: {\n outDir: resolve(__dirname, \"dist\", \"db\"),\n lib: {\n entry: resolve(__dirname, \"src/db/dbScript.ts\"),\n formats: [\"es\"],\n fileName: \"dbScript\",\n },\n rollupOptions: {\n external: [\"orchid-orm\", \"rake-db\"],\n output: {\n entryFileNames: \"[name].mjs\",\n chunkFileNames: \"[name].[hash].mjs\",\n },\n },\n },\n})\n`,\n );\n } else if (config.runner === 'tsx') {\n await fs.writeFile(\n join(config.path, 'esbuild.migrations.mjs'),\n `import { build } from \"esbuild\";\n\nawait Promise.all([\n build({\n entryPoints: [\"src/db/dbScript.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db\",\n outExtension: { '.js': '.mjs' },\n banner: {\n js: \\`\n import __path from 'node:path';\n import { fileURLToPath as __fileURLToPath } from 'node:url';\n import { createRequire as __createRequire } from 'module';\n const require = __createRequire(import.meta.url);\n const __filename = __fileURLToPath(import.meta.url);\n const __dirname = __path.dirname(__filename);\n \\`,\n },\n }),\n build({\n entryPoints: [\"src/db/migrations/*.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db/migrations\",\n outExtension: { '.js': '.mjs' },\n external: ['../dbScript'],\n plugins: [{\n name: 'add-js-suffix',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n if (args.importer) {\n return { path: args.path + '.mjs', external: true }\n }\n })\n },\n }],\n }),\n]);\n`,\n );\n }\n}\n","import { InitConfig } from '../lib';\nimport fs from 'fs/promises';\nimport { setupPackageJSON } from './init/setupPackageJSON';\nimport { setupTSConfig } from './init/setupTSConfig';\nimport { setupEnv } from './init/setupEnv';\nimport { setupGitIgnore } from './init/setupGitIgnore';\nimport { setupBaseTable } from './init/setupBaseTable';\nimport { setupDemoTables } from './init/setupDemoTables';\nimport { setupConfig } from './init/setupConfig';\nimport { setupMainDb } from './init/setupMainDb';\nimport { setupMigrationScript } from './init/setupMigrationScript';\nimport { createDemoMigrations } from './init/createDemoMigrations';\nimport { createDemoSeed } from './init/createDemoSeed';\nimport { setupRunner } from './init/setupRunner';\n\nexport async function init(config: InitConfig): Promise<void> {\n await fs.mkdir(config.dbDirPath, { recursive: true });\n\n for (const key in initSteps) {\n await initSteps[key as keyof typeof initSteps](config);\n }\n}\n\nexport const initSteps = {\n setupPackageJSON,\n setupTSConfig,\n setupEnv,\n setupGitIgnore,\n setupBaseTable,\n setupDemoTables,\n setupConfig,\n setupMainDb,\n setupMigrationScript,\n createDemoMigrations,\n createDemoSeed,\n setupRunner,\n};\n","import { relative } from 'path';\nimport { InitConfig } from '../lib';\nimport { getPackageManagerName } from './utils';\n\nexport function greetAfterInstall(\n config: InitConfig,\n logger: { log(message: string): void } = console,\n) {\n const relativePath = relative(process.cwd(), config.path);\n const manager = getPackageManagerName();\n const run = manager === 'npm' ? `npm run` : manager;\n\n logger.log(`\nThank you for trying Orchid ORM!\n \nTo finish setup,${\n relativePath ? ` cd to the project and` : ''\n } install dependencies:\n${\n relativePath\n ? `\n> cd ${relativePath}`\n : ''\n}\n> ${manager} i\n\nEnter the correct database credentials to the .env file,\nthen create the database:\n\n> ${run} db create\n\nAnd run the migrations:\n\n> ${run} db migrate\n`);\n}\n","#!/usr/bin/env node\n\nimport { getConfig, init, greetAfterInstall } from './lib';\n\ngetConfig().then(\n (config) => config && init(config).then(() => greetAfterInstall(config)),\n);\n"],"names":["basename","path","resolve","join","relative"],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sources":["../src/lib/utils.ts","../src/lib/getConfig.ts","../src/lib/init/setupPackageJSON.ts","../src/lib/init/setupTSConfig.ts","../src/lib/init/setupEnv.ts","../src/lib/init/setupGitIgnore.ts","../src/lib/init/setupBaseTable.ts","../src/lib/init/setupDemoTables.ts","../src/lib/init/setupConfig.ts","../src/lib/init/setupMainDb.ts","../src/lib/init/setupMigrationScript.ts","../src/lib/init/createDemoMigrations.ts","../src/lib/init/createDemoSeed.ts","../src/lib/init/setupRunner.ts","../src/lib/init.ts","../src/lib/greetAfterInstall.ts","../src/bin.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { basename, join } from 'path';\nimport https from 'https';\nimport { InitConfig } from '../lib';\n\nexport async function readFileSafe(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\nexport function makeFileTimeStamp(now: Date): string {\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\nexport async function createSeed(\n config: InitConfig,\n dirPath: string,\n): Promise<void> {\n const filePath = join(dirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n\nexport type DependencyKind = 'dependencies' | 'devDependencies';\nexport function 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\nexport function getPackageManagerName(): 'npm' | 'yarn' | 'pnpm' | 'bun' {\n const { npm_execpath } = process.env;\n if (npm_execpath) {\n const name = basename(npm_execpath);\n if (/npm/.test(name)) {\n return 'npm';\n }\n if (/yarn/.test(name)) {\n return 'yarn';\n }\n if (/bun/.test(name)) {\n return 'bun';\n }\n }\n\n return 'pnpm';\n}\n","import prompts from 'prompts';\nimport { join, resolve, basename } from 'path';\nimport { InitConfig, UserProvidedConfig } from '../lib';\nimport { getPackageManagerName, readFileSafe } from './utils';\n\nexport async function getConfig(\n logger: { log(message: string): void } = console,\n): Promise<InitConfig | undefined> {\n let cancelled = false;\n\n logger.log('Welcome to Orchid ORM installer!');\n\n const isBun = getPackageManagerName() === 'bun';\n\n const response = await prompts<keyof UserProvidedConfig>(\n [\n {\n type: 'text',\n name: 'path',\n message: 'Where to install Orchid ORM?',\n initial: process.cwd(),\n },\n ...(isBun\n ? []\n : [\n {\n type: 'select' as const,\n name: 'runner' as const,\n message: 'Choose a tool for executing TS files',\n choices: [\n {\n title: 'tsx',\n value: 'tsx',\n },\n {\n title: 'vite-node',\n value: 'vite-node',\n },\n {\n title: 'ts-node',\n value: 'ts-node',\n },\n ],\n },\n ]),\n {\n type: 'select',\n name: 'timestamp',\n message: 'Return timestamps as:',\n choices: [\n {\n title: 'string (as returned from db)',\n value: 'string',\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: 'Add a separate database for tests?',\n },\n {\n type: 'select',\n name: 'validation',\n message: 'Integrate with a validation library?',\n choices: [\n {\n title: 'no',\n value: 'no',\n },\n {\n title: 'zod',\n value: 'zod',\n },\n {\n title: 'valibot',\n value: 'valibot',\n },\n ],\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Add record factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Add demo tables?',\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (isBun) response.runner = 'bun';\n\n if (cancelled) return;\n\n const path = resolve(response.path);\n const tsConfigPath = join(path, 'tsconfig.json');\n const hasTsConfig = await readFileSafe(tsConfigPath);\n const dbDirPath = join(path, 'src', 'db');\n\n return {\n ...response,\n hasTsConfig: !!hasTsConfig,\n path: resolve(response.path),\n dbDirPath,\n projectName: basename(path),\n esm: response.runner !== 'ts-node',\n };\n}\n","import { InitConfig } from '../../lib';\nimport { getLatestPackageVersion, readFileSafe } from '../utils';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupPackageJSON(config: InitConfig): Promise<void> {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', 'dependencies'),\n config.validation === 'zod'\n ? getLatestPackageVersion('orchid-orm-schema-to-zod', 'dependencies')\n : config.validation === 'valibot'\n ? getLatestPackageVersion('orchid-orm-valibot', 'dependencies')\n : undefined,\n getLatestPackageVersion('rake-db', 'devDependencies'),\n config.addTestFactory &&\n getLatestPackageVersion('orchid-orm-test-factory', 'devDependencies'),\n getLatestPackageVersion('@types/node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion('vite', 'devDependencies'),\n config.runner !== 'bun' &&\n getLatestPackageVersion(config.runner, 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion(\n 'rollup-plugin-node-externals',\n 'devDependencies',\n ),\n config.runner === 'tsx' &&\n getLatestPackageVersion('esbuild', 'devDependencies'),\n config.runner === 'tsx' &&\n getLatestPackageVersion('rimraf', '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 = join(config.path, 'package.json');\n const content = await readFileSafe(packageJsonPath);\n let json = content\n ? JSON.parse(content)\n : {\n name: config.projectName,\n };\n\n if (config.esm) json = { name: json.name, type: 'module', ...json };\n\n const scripts = (json.scripts ??= {});\n\n if (config.runner === 'vite-node') {\n scripts.db = 'vite-node src/db/dbScript.ts --';\n scripts['build:migrations'] = 'vite build --config vite.migrations.mts';\n scripts['db:compiled'] = 'node dist/db/dbScript.mjs';\n } else if (config.runner === 'tsx') {\n scripts.db = 'NODE_ENV=development tsx src/db/dbScript.ts';\n scripts['build:migrations'] =\n 'rimraf dist/db && node esbuild.migrations.mjs';\n scripts['db:compiled'] = 'NODE_ENV=production node dist/db/dbScript.mjs';\n } else {\n scripts.db = `${config.runner} src/db/dbScript.ts`;\n\n if (config.runner === 'ts-node') {\n scripts.build = 'tsc';\n scripts['db:compiled'] = 'node dist/dbScript.js';\n }\n }\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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupTSConfig(config: InitConfig): Promise<void> {\n if (config.hasTsConfig) return;\n\n const module = config.runner === 'ts-node' ? 'commonjs' : 'esnext';\n const moduleResolution =\n config.runner === 'ts-node'\n ? ''\n : `\n \"moduleResolution\": \"bundler\",`;\n\n const types = config.runner === 'vite-node' ? `[\"vite/client\"]` : undefined;\n\n const tsConfigPath = join(config.path, 'tsconfig.json');\n await fs.writeFile(\n tsConfigPath,\n `{\n \"compilerOptions\": {${\n config.runner === 'ts-node'\n ? `\n \"outDir\": \"dist\",`\n : ''\n }\n \"target\": \"es2017\",\n \"module\": \"${module}\",${moduleResolution}\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true${\n types\n ? `,\n \"types\": ${types}`\n : ''\n }\n }\n}\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupEnv(config: InitConfig): Promise<void> {\n const envPath = join(config.path, '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n // by default, on Mac it is a username, on Linux it's postgres, on Windows it's postgres as well\n const user = process.platform === 'darwin' ? process.env.USER : 'postgres';\n\n // TODO: guess user and pw\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://${user}:@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}:@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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupGitIgnore(config: InitConfig): Promise<void> {\n const gitignorePath = join(config.path, '.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!.env.example`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupBaseTable(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';${\n config.validation === 'zod'\n ? `\\nimport { zodSchemaConfig } from 'orchid-orm-schema-to-zod';`\n : config.validation === 'valibot'\n ? `\\nimport { valibotSchemaConfig } from 'orchid-orm-valibot';`\n : ''\n }\n\nexport const BaseTable = createBaseTable({\n // Set \\`snakeCase\\` to \\`true\\` if columns in your database are in snake_case.\n // snakeCase: true,${\n config.validation !== 'no'\n ? `\n\n schemaConfig: ${\n config.validation === 'zod' ? 'zodSchemaConfig' : 'valibotSchemaConfig'\n },`\n : ''\n }\n\n // Customize column types for all tables.\n columnTypes: (t) => ({\n ...t,${\n config.validation === 'no'\n ? ''\n : `\n // Set min and max validations for all text columns,\n // it is only checked when validating with ${config.validation} schemas derived from the table.\n text: (min = 0, max = Infinity) => t.text(min, max),`\n }`;\n\n const { timestamp } = config;\n if (timestamp && timestamp !== 'string') {\n content += `\n // Parse timestamps to ${timestamp === 'number' ? 'number' : 'Date object'}.\n timestamp: (precision?: number) => t.timestamp(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),\n});\n`;\n\n await fs.writeFile(filePath, content);\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupDemoTables(config: InitConfig): Promise<void> {\n if (!config.demoTables) return;\n\n const tablesDir = join(config.dbDirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n join(tablesDir, 'post.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n\n// Post type returned from database.\nexport type Post = Selectable<PostTable>;\n// Post type for insertion.\nexport type PostNew = Insertable<PostTable>;\n// Post type for updates.\nexport type PostUpdate = Updateable<PostTable>;\n// Post type used by query methods such as \\`where\\`.\nexport type PostForQuery = Queryable<PostTable>;\n\nexport class PostTable extends BaseTable {\n readonly table = 'post';\n columns = this.setColumns((t) => ({\n id: t.identity().primaryKey(),\n title: t.text(3, 100).unique(),\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 );\n\n await fs.writeFile(\n join(tablesDir, 'comment.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n\n// Comment type returned from database.\nexport type Comment = Selectable<CommentTable>;\n// Comment type for insertion.\nexport type CommentNew = Insertable<CommentTable>;\n// Comment type for updates.\nexport type CommentUpdate = Updateable<CommentTable>;\n// Comment type used by query methods such as \\`where\\`.\nexport type CommentForQuery = Queryable<CommentTable>;\n\nexport class CommentTable extends BaseTable {\n readonly table = 'comment';\n columns = this.setColumns((t) => ({\n id: t.identity().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 );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupConfig(config: InitConfig): Promise<void> {\n const configPath = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMainDb(config: InitConfig): Promise<void> {\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 = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMigrationScript(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'dbScript.ts');\n\n const migrations =\n config.runner === 'vite-node'\n ? \"migrations: import.meta.glob('./migrations/*.ts')\"\n : \"migrationsPath: './migrations'\";\n\n const useCodeUpdater =\n config.runner === 'vite-node'\n ? 'import.meta.env.DEV'\n : `process.env.NODE_ENV === 'development'`;\n\n await fs.writeFile(\n filePath,\n `import { rakeDb } from 'rake-db';\nimport { appCodeUpdater } from 'orchid-orm/codegen';\nimport { config } from './config';\nimport { BaseTable } from './baseTable';\n\nexport const change = rakeDb(${\n config.testDatabase ? 'config.allDatabases' : 'config.database'\n }, {\n baseTable: BaseTable,\n ${migrations},\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`./tables/\\${tableName}.table.ts\\`,\n ormPath: './db.ts',\n }),\n // set to false to disable code updater\n useCodeUpdater: ${useCodeUpdater},\n commands: {\n async seed() {\n const { seed } = await import('./seed');\n await seed();\n },\n },\n import: (path) => import(path),\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\nimport { makeFileTimeStamp } from '../utils';\n\nexport async function createDemoMigrations(config: InitConfig): Promise<void> {\n const migrationsPath = join(config.dbDirPath, 'migrations');\n await fs.mkdir(migrationsPath, { recursive: true });\n\n if (!config.demoTables) return;\n\n const now = new Date();\n\n const postPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createPost.ts`,\n );\n await fs.writeFile(\n postPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('post', (t) => ({\n id: t.identity().primaryKey(),\n title: t.text().unique(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n\n now.setTime(now.getTime() + 1000);\n\n const commentPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createComment.ts`,\n );\n await fs.writeFile(\n commentPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('comment', (t) => ({\n id: t.identity().primaryKey(),\n postId: t.integer().foreignKey('post', 'id').index(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\n\nexport async function createDemoSeed(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport fs from 'fs/promises';\nimport { join } from 'path';\n\nexport async function setupRunner(config: InitConfig): Promise<void> {\n if (config.runner === 'vite-node') {\n await fs.writeFile(\n join(config.path, 'vite.migrations.mts'),\n `import { resolve } from \"path\";\nimport { defineConfig, PluginOption } from \"vite\";\nimport { nodeExternals } from \"rollup-plugin-node-externals\";\n\nexport default defineConfig({\n plugins: [\n {\n ...nodeExternals(),\n name: \"node-externals\",\n enforce: \"pre\",\n apply: \"build\",\n } as PluginOption\n ],\n build: {\n outDir: resolve(__dirname, \"dist\", \"db\"),\n lib: {\n entry: resolve(__dirname, \"src/db/dbScript.ts\"),\n formats: [\"es\"],\n fileName: \"dbScript\",\n },\n rollupOptions: {\n external: [\"orchid-orm\", \"rake-db\"],\n output: {\n entryFileNames: \"[name].mjs\",\n chunkFileNames: \"[name].[hash].mjs\",\n },\n },\n },\n})\n`,\n );\n } else if (config.runner === 'tsx') {\n await fs.writeFile(\n join(config.path, 'esbuild.migrations.mjs'),\n `import { build } from \"esbuild\";\n\nawait Promise.all([\n build({\n entryPoints: [\"src/db/dbScript.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db\",\n outExtension: { '.js': '.mjs' },\n banner: {\n js: \\`\n import __path from 'node:path';\n import { fileURLToPath as __fileURLToPath } from 'node:url';\n import { createRequire as __createRequire } from 'module';\n const require = __createRequire(import.meta.url);\n const __filename = __fileURLToPath(import.meta.url);\n const __dirname = __path.dirname(__filename);\n \\`,\n },\n }),\n build({\n entryPoints: [\"src/db/migrations/*.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db/migrations\",\n outExtension: { '.js': '.mjs' },\n external: ['../dbScript'],\n plugins: [{\n name: 'add-js-suffix',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n if (args.importer) {\n return { path: args.path + '.mjs', external: true }\n }\n })\n },\n }],\n }),\n]);\n`,\n );\n }\n}\n","import { InitConfig } from '../lib';\nimport fs from 'fs/promises';\nimport { setupPackageJSON } from './init/setupPackageJSON';\nimport { setupTSConfig } from './init/setupTSConfig';\nimport { setupEnv } from './init/setupEnv';\nimport { setupGitIgnore } from './init/setupGitIgnore';\nimport { setupBaseTable } from './init/setupBaseTable';\nimport { setupDemoTables } from './init/setupDemoTables';\nimport { setupConfig } from './init/setupConfig';\nimport { setupMainDb } from './init/setupMainDb';\nimport { setupMigrationScript } from './init/setupMigrationScript';\nimport { createDemoMigrations } from './init/createDemoMigrations';\nimport { createDemoSeed } from './init/createDemoSeed';\nimport { setupRunner } from './init/setupRunner';\n\nexport async function init(config: InitConfig): Promise<void> {\n await fs.mkdir(config.dbDirPath, { recursive: true });\n\n for (const key in initSteps) {\n await initSteps[key as keyof typeof initSteps](config);\n }\n}\n\nexport const initSteps = {\n setupPackageJSON,\n setupTSConfig,\n setupEnv,\n setupGitIgnore,\n setupBaseTable,\n setupDemoTables,\n setupConfig,\n setupMainDb,\n setupMigrationScript,\n createDemoMigrations,\n createDemoSeed,\n setupRunner,\n};\n","import { relative } from 'path';\nimport { InitConfig } from '../lib';\nimport { getPackageManagerName } from './utils';\n\nexport function greetAfterInstall(\n config: InitConfig,\n logger: { log(message: string): void } = console,\n) {\n const relativePath = relative(process.cwd(), config.path);\n const manager = getPackageManagerName();\n const run = manager === 'npm' ? `npm run` : manager;\n\n logger.log(`\nThank you for trying Orchid ORM!\n \nTo finish setup,${\n relativePath ? ` cd to the project and` : ''\n } install dependencies:\n${\n relativePath\n ? `\n> cd ${relativePath}`\n : ''\n}\n> ${manager} i\n\nEnter the correct database credentials to the .env file,\nthen create the database:\n\n> ${run} db create\n\nAnd run the migrations:\n\n> ${run} db migrate\n`);\n}\n","#!/usr/bin/env node\n\nimport { getConfig, init, greetAfterInstall } from './lib';\n\ngetConfig().then(\n (config) => config && init(config).then(() => greetAfterInstall(config)),\n);\n"],"names":["basename","path","resolve","join","relative"],"mappings":"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"}
package/dist/lib.d.ts CHANGED
@@ -11,7 +11,7 @@ declare function greetAfterInstall(config: InitConfig, logger?: {
11
11
  type UserProvidedConfig = {
12
12
  path: string;
13
13
  testDatabase?: boolean;
14
- addSchemaToZod?: boolean;
14
+ validation: 'no' | 'zod' | 'valibot';
15
15
  addTestFactory?: boolean;
16
16
  demoTables?: boolean;
17
17
  timestamp?: 'string' | 'date' | 'number';
package/dist/lib.js CHANGED
@@ -131,9 +131,23 @@ async function getConfig(logger = console) {
131
131
  message: "Add a separate database for tests?"
132
132
  },
133
133
  {
134
- type: "confirm",
135
- name: "addSchemaToZod",
136
- message: "Add Zod for validations?"
134
+ type: "select",
135
+ name: "validation",
136
+ message: "Integrate with a validation library?",
137
+ choices: [
138
+ {
139
+ title: "no",
140
+ value: "no"
141
+ },
142
+ {
143
+ title: "zod",
144
+ value: "zod"
145
+ },
146
+ {
147
+ title: "valibot",
148
+ value: "valibot"
149
+ }
150
+ ]
137
151
  },
138
152
  {
139
153
  type: "confirm",
@@ -190,7 +204,7 @@ async function setupPackageJSON(config) {
190
204
  const pairs = await Promise.all([
191
205
  getLatestPackageVersion("dotenv", "dependencies"),
192
206
  getLatestPackageVersion("orchid-orm", "dependencies"),
193
- config.addSchemaToZod && getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies"),
207
+ config.validation === "zod" ? getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies") : config.validation === "valibot" ? getLatestPackageVersion("orchid-orm-valibot", "dependencies") : void 0,
194
208
  getLatestPackageVersion("rake-db", "devDependencies"),
195
209
  config.addTestFactory && getLatestPackageVersion("orchid-orm-test-factory", "devDependencies"),
196
210
  getLatestPackageVersion("@types/node", "devDependencies"),
@@ -318,29 +332,30 @@ node_modules`;
318
332
 
319
333
  async function setupBaseTable(config) {
320
334
  const filePath = path.join(config.dbDirPath, "baseTable.ts");
321
- let content = `import { createBaseTable } from 'orchid-orm';${config.addSchemaToZod ? `
322
- import { zodSchemaProvider } from 'orchid-orm-schema-to-zod';` : ""}
335
+ let content = `import { createBaseTable } from 'orchid-orm';${config.validation === "zod" ? `
336
+ import { zodSchemaConfig } from 'orchid-orm-schema-to-zod';` : config.validation === "valibot" ? `
337
+ import { valibotSchemaConfig } from 'orchid-orm-valibot';` : ""}
323
338
 
324
339
  export const BaseTable = createBaseTable({
325
340
  // Set \`snakeCase\` to \`true\` if columns in your database are in snake_case.
326
- // snakeCase: true,
341
+ // snakeCase: true,${config.validation !== "no" ? `
342
+
343
+ schemaConfig: ${config.validation === "zod" ? "zodSchemaConfig" : "valibotSchemaConfig"},` : ""}
327
344
 
328
345
  // Customize column types for all tables.
329
346
  columnTypes: (t) => ({
330
- ...t,${config.addSchemaToZod ? `
347
+ ...t,${config.validation === "no" ? "" : `
331
348
  // Set min and max validations for all text columns,
332
- // it is only checked when validating with Zod schemas derived from the table.
333
- text: (min = 0, max = Infinity) => t.text(min, max),` : ""}`;
349
+ // it is only checked when validating with ${config.validation} schemas derived from the table.
350
+ text: (min = 0, max = Infinity) => t.text(min, max),`}`;
334
351
  const { timestamp } = config;
335
352
  if (timestamp && timestamp !== "string") {
336
353
  content += `
337
354
  // Parse timestamps to ${timestamp === "number" ? "number" : "Date object"}.
338
- timestamp: <P extends number>(precision?: P) =>
339
- t.timestamp<P>(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
355
+ timestamp: (precision?: number) => t.timestamp(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
340
356
  }
341
357
  content += `
342
- }),${config.addSchemaToZod ? `
343
- schemaProvider: zodSchemaProvider,` : ""}
358
+ }),
344
359
  });
345
360
  `;
346
361
  await fs.writeFile(filePath, content);
package/dist/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sources":["../src/lib/utils.ts","../src/lib/getConfig.ts","../src/lib/init/setupPackageJSON.ts","../src/lib/init/setupTSConfig.ts","../src/lib/init/setupEnv.ts","../src/lib/init/setupGitIgnore.ts","../src/lib/init/setupBaseTable.ts","../src/lib/init/setupDemoTables.ts","../src/lib/init/setupConfig.ts","../src/lib/init/setupMainDb.ts","../src/lib/init/setupMigrationScript.ts","../src/lib/init/createDemoMigrations.ts","../src/lib/init/createDemoSeed.ts","../src/lib/init/setupRunner.ts","../src/lib/init.ts","../src/lib/greetAfterInstall.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { basename, join } from 'path';\nimport https from 'https';\nimport { InitConfig } from '../lib';\n\nexport async function readFileSafe(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\nexport function makeFileTimeStamp(now: Date): string {\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\nexport async function createSeed(\n config: InitConfig,\n dirPath: string,\n): Promise<void> {\n const filePath = join(dirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n\nexport type DependencyKind = 'dependencies' | 'devDependencies';\nexport function 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\nexport function getPackageManagerName(): 'npm' | 'yarn' | 'pnpm' | 'bun' {\n const { npm_execpath } = process.env;\n if (npm_execpath) {\n const name = basename(npm_execpath);\n if (/npm/.test(name)) {\n return 'npm';\n }\n if (/yarn/.test(name)) {\n return 'yarn';\n }\n if (/bun/.test(name)) {\n return 'bun';\n }\n }\n\n return 'pnpm';\n}\n","import prompts from 'prompts';\nimport { join, resolve, basename } from 'path';\nimport { InitConfig, UserProvidedConfig } from '../lib';\nimport { getPackageManagerName, readFileSafe } from './utils';\n\nexport async function getConfig(\n logger: { log(message: string): void } = console,\n): Promise<InitConfig | undefined> {\n let cancelled = false;\n\n logger.log('Welcome to Orchid ORM installer!');\n\n const isBun = getPackageManagerName() === 'bun';\n\n const response = await prompts<keyof UserProvidedConfig>(\n [\n {\n type: 'text',\n name: 'path',\n message: 'Where to install Orchid ORM?',\n initial: process.cwd(),\n },\n ...(isBun\n ? []\n : [\n {\n type: 'select' as const,\n name: 'runner' as const,\n message: 'Choose a tool for executing TS files',\n choices: [\n {\n title: 'tsx',\n value: 'tsx',\n },\n {\n title: 'vite-node',\n value: 'vite-node',\n },\n {\n title: 'ts-node',\n value: 'ts-node',\n },\n ],\n },\n ]),\n {\n type: 'select',\n name: 'timestamp',\n message: 'Return timestamps as:',\n choices: [\n {\n title: 'string (as returned from db)',\n value: 'string',\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: 'Add a separate database for tests?',\n },\n {\n type: 'confirm',\n name: 'addSchemaToZod',\n message: 'Add Zod for validations?',\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Add record factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Add demo tables?',\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (isBun) response.runner = 'bun';\n\n if (cancelled) return;\n\n const path = resolve(response.path);\n const tsConfigPath = join(path, 'tsconfig.json');\n const hasTsConfig = await readFileSafe(tsConfigPath);\n const dbDirPath = join(path, 'src', 'db');\n\n return {\n ...response,\n hasTsConfig: !!hasTsConfig,\n path: resolve(response.path),\n dbDirPath,\n projectName: basename(path),\n esm: response.runner !== 'ts-node',\n };\n}\n","import { InitConfig } from '../../lib';\nimport { getLatestPackageVersion, readFileSafe } from '../utils';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupPackageJSON(config: InitConfig): Promise<void> {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', '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('@types/node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion('vite', 'devDependencies'),\n config.runner !== 'bun' &&\n getLatestPackageVersion(config.runner, 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion(\n 'rollup-plugin-node-externals',\n 'devDependencies',\n ),\n config.runner === 'tsx' &&\n getLatestPackageVersion('esbuild', 'devDependencies'),\n config.runner === 'tsx' &&\n getLatestPackageVersion('rimraf', '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 = join(config.path, 'package.json');\n const content = await readFileSafe(packageJsonPath);\n let json = content\n ? JSON.parse(content)\n : {\n name: config.projectName,\n };\n\n if (config.esm) json = { name: json.name, type: 'module', ...json };\n\n const scripts = (json.scripts ??= {});\n\n if (config.runner === 'vite-node') {\n scripts.db = 'vite-node src/db/dbScript.ts --';\n scripts['build:migrations'] = 'vite build --config vite.migrations.mts';\n scripts['db:compiled'] = 'node dist/db/dbScript.mjs';\n } else if (config.runner === 'tsx') {\n scripts.db = 'NODE_ENV=development tsx src/db/dbScript.ts';\n scripts['build:migrations'] =\n 'rimraf dist/db && node esbuild.migrations.mjs';\n scripts['db:compiled'] = 'NODE_ENV=production node dist/db/dbScript.mjs';\n } else {\n scripts.db = `${config.runner} src/db/dbScript.ts`;\n\n if (config.runner === 'ts-node') {\n scripts.build = 'tsc';\n scripts['db:compiled'] = 'node dist/dbScript.js';\n }\n }\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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupTSConfig(config: InitConfig): Promise<void> {\n if (config.hasTsConfig) return;\n\n const module = config.runner === 'ts-node' ? 'commonjs' : 'esnext';\n const moduleResolution =\n config.runner === 'ts-node'\n ? ''\n : `\n \"moduleResolution\": \"bundler\",`;\n\n const types = config.runner === 'vite-node' ? `[\"vite/client\"]` : undefined;\n\n const tsConfigPath = join(config.path, 'tsconfig.json');\n await fs.writeFile(\n tsConfigPath,\n `{\n \"compilerOptions\": {${\n config.runner === 'ts-node'\n ? `\n \"outDir\": \"dist\",`\n : ''\n }\n \"target\": \"es2017\",\n \"module\": \"${module}\",${moduleResolution}\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true${\n types\n ? `,\n \"types\": ${types}`\n : ''\n }\n }\n}\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupEnv(config: InitConfig): Promise<void> {\n const envPath = join(config.path, '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n // by default, on Mac it is a username, on Linux it's postgres, on Windows it's postgres as well\n const user = process.platform === 'darwin' ? process.env.USER : 'postgres';\n\n // TODO: guess user and pw\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://${user}:@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}:@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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupGitIgnore(config: InitConfig): Promise<void> {\n const gitignorePath = join(config.path, '.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!.env.example`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupBaseTable(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';${\n config.addSchemaToZod\n ? `\\nimport { zodSchemaProvider } from 'orchid-orm-schema-to-zod';`\n : ''\n }\n\nexport const BaseTable = createBaseTable({\n // Set \\`snakeCase\\` to \\`true\\` if columns in your database are in snake_case.\n // snakeCase: true,\n\n // Customize column types for all tables.\n columnTypes: (t) => ({\n ...t,${\n config.addSchemaToZod\n ? `\n // Set min and max validations for all text columns,\n // it is only checked when validating with Zod schemas derived from the table.\n text: (min = 0, max = Infinity) => t.text(min, max),`\n : ''\n }`;\n\n const { timestamp } = config;\n if (timestamp && timestamp !== 'string') {\n content += `\n // Parse timestamps to ${timestamp === 'number' ? 'number' : 'Date object'}.\n timestamp: <P extends number>(precision?: P) =>\n t.timestamp<P>(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),${\n config.addSchemaToZod\n ? `\n schemaProvider: zodSchemaProvider,`\n : ''\n }\n});\n`;\n\n await fs.writeFile(filePath, content);\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupDemoTables(config: InitConfig): Promise<void> {\n if (!config.demoTables) return;\n\n const tablesDir = join(config.dbDirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n join(tablesDir, 'post.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n\n// Post type returned from database.\nexport type Post = Selectable<PostTable>;\n// Post type for insertion.\nexport type PostNew = Insertable<PostTable>;\n// Post type for updates.\nexport type PostUpdate = Updateable<PostTable>;\n// Post type used by query methods such as \\`where\\`.\nexport type PostForQuery = Queryable<PostTable>;\n\nexport class PostTable extends BaseTable {\n readonly table = 'post';\n columns = this.setColumns((t) => ({\n id: t.identity().primaryKey(),\n title: t.text(3, 100).unique(),\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 );\n\n await fs.writeFile(\n join(tablesDir, 'comment.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n\n// Comment type returned from database.\nexport type Comment = Selectable<CommentTable>;\n// Comment type for insertion.\nexport type CommentNew = Insertable<CommentTable>;\n// Comment type for updates.\nexport type CommentUpdate = Updateable<CommentTable>;\n// Comment type used by query methods such as \\`where\\`.\nexport type CommentForQuery = Queryable<CommentTable>;\n\nexport class CommentTable extends BaseTable {\n readonly table = 'comment';\n columns = this.setColumns((t) => ({\n id: t.identity().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 );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupConfig(config: InitConfig): Promise<void> {\n const configPath = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMainDb(config: InitConfig): Promise<void> {\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 = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMigrationScript(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'dbScript.ts');\n\n const migrations =\n config.runner === 'vite-node'\n ? \"migrations: import.meta.glob('./migrations/*.ts')\"\n : \"migrationsPath: './migrations'\";\n\n const useCodeUpdater =\n config.runner === 'vite-node'\n ? 'import.meta.env.DEV'\n : `process.env.NODE_ENV === 'development'`;\n\n await fs.writeFile(\n filePath,\n `import { rakeDb } from 'rake-db';\nimport { appCodeUpdater } from 'orchid-orm/codegen';\nimport { config } from './config';\nimport { BaseTable } from './baseTable';\n\nexport const change = rakeDb(${\n config.testDatabase ? 'config.allDatabases' : 'config.database'\n }, {\n baseTable: BaseTable,\n ${migrations},\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`./tables/\\${tableName}.table.ts\\`,\n ormPath: './db.ts',\n }),\n // set to false to disable code updater\n useCodeUpdater: ${useCodeUpdater},\n commands: {\n async seed() {\n const { seed } = await import('./seed');\n await seed();\n },\n },\n import: (path) => import(path),\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\nimport { makeFileTimeStamp } from '../utils';\n\nexport async function createDemoMigrations(config: InitConfig): Promise<void> {\n const migrationsPath = join(config.dbDirPath, 'migrations');\n await fs.mkdir(migrationsPath, { recursive: true });\n\n if (!config.demoTables) return;\n\n const now = new Date();\n\n const postPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createPost.ts`,\n );\n await fs.writeFile(\n postPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('post', (t) => ({\n id: t.identity().primaryKey(),\n title: t.text().unique(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n\n now.setTime(now.getTime() + 1000);\n\n const commentPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createComment.ts`,\n );\n await fs.writeFile(\n commentPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('comment', (t) => ({\n id: t.identity().primaryKey(),\n postId: t.integer().foreignKey('post', 'id').index(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\n\nexport async function createDemoSeed(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport fs from 'fs/promises';\nimport { join } from 'path';\n\nexport async function setupRunner(config: InitConfig): Promise<void> {\n if (config.runner === 'vite-node') {\n await fs.writeFile(\n join(config.path, 'vite.migrations.mts'),\n `import { resolve } from \"path\";\nimport { defineConfig, PluginOption } from \"vite\";\nimport { nodeExternals } from \"rollup-plugin-node-externals\";\n\nexport default defineConfig({\n plugins: [\n {\n ...nodeExternals(),\n name: \"node-externals\",\n enforce: \"pre\",\n apply: \"build\",\n } as PluginOption\n ],\n build: {\n outDir: resolve(__dirname, \"dist\", \"db\"),\n lib: {\n entry: resolve(__dirname, \"src/db/dbScript.ts\"),\n formats: [\"es\"],\n fileName: \"dbScript\",\n },\n rollupOptions: {\n external: [\"orchid-orm\", \"rake-db\"],\n output: {\n entryFileNames: \"[name].mjs\",\n chunkFileNames: \"[name].[hash].mjs\",\n },\n },\n },\n})\n`,\n );\n } else if (config.runner === 'tsx') {\n await fs.writeFile(\n join(config.path, 'esbuild.migrations.mjs'),\n `import { build } from \"esbuild\";\n\nawait Promise.all([\n build({\n entryPoints: [\"src/db/dbScript.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db\",\n outExtension: { '.js': '.mjs' },\n banner: {\n js: \\`\n import __path from 'node:path';\n import { fileURLToPath as __fileURLToPath } from 'node:url';\n import { createRequire as __createRequire } from 'module';\n const require = __createRequire(import.meta.url);\n const __filename = __fileURLToPath(import.meta.url);\n const __dirname = __path.dirname(__filename);\n \\`,\n },\n }),\n build({\n entryPoints: [\"src/db/migrations/*.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db/migrations\",\n outExtension: { '.js': '.mjs' },\n external: ['../dbScript'],\n plugins: [{\n name: 'add-js-suffix',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n if (args.importer) {\n return { path: args.path + '.mjs', external: true }\n }\n })\n },\n }],\n }),\n]);\n`,\n );\n }\n}\n","import { InitConfig } from '../lib';\nimport fs from 'fs/promises';\nimport { setupPackageJSON } from './init/setupPackageJSON';\nimport { setupTSConfig } from './init/setupTSConfig';\nimport { setupEnv } from './init/setupEnv';\nimport { setupGitIgnore } from './init/setupGitIgnore';\nimport { setupBaseTable } from './init/setupBaseTable';\nimport { setupDemoTables } from './init/setupDemoTables';\nimport { setupConfig } from './init/setupConfig';\nimport { setupMainDb } from './init/setupMainDb';\nimport { setupMigrationScript } from './init/setupMigrationScript';\nimport { createDemoMigrations } from './init/createDemoMigrations';\nimport { createDemoSeed } from './init/createDemoSeed';\nimport { setupRunner } from './init/setupRunner';\n\nexport async function init(config: InitConfig): Promise<void> {\n await fs.mkdir(config.dbDirPath, { recursive: true });\n\n for (const key in initSteps) {\n await initSteps[key as keyof typeof initSteps](config);\n }\n}\n\nexport const initSteps = {\n setupPackageJSON,\n setupTSConfig,\n setupEnv,\n setupGitIgnore,\n setupBaseTable,\n setupDemoTables,\n setupConfig,\n setupMainDb,\n setupMigrationScript,\n createDemoMigrations,\n createDemoSeed,\n setupRunner,\n};\n","import { relative } from 'path';\nimport { InitConfig } from '../lib';\nimport { getPackageManagerName } from './utils';\n\nexport function greetAfterInstall(\n config: InitConfig,\n logger: { log(message: string): void } = console,\n) {\n const relativePath = relative(process.cwd(), config.path);\n const manager = getPackageManagerName();\n const run = manager === 'npm' ? `npm run` : manager;\n\n logger.log(`\nThank you for trying Orchid ORM!\n \nTo finish setup,${\n relativePath ? ` cd to the project and` : ''\n } install dependencies:\n${\n relativePath\n ? `\n> cd ${relativePath}`\n : ''\n}\n> ${manager} i\n\nEnter the correct database credentials to the .env file,\nthen create the database:\n\n> ${run} db create\n\nAnd run the migrations:\n\n> ${run} db migrate\n`);\n}\n"],"names":["basename","path","resolve","join","relative"],"mappings":"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"}
1
+ {"version":3,"file":"lib.js","sources":["../src/lib/utils.ts","../src/lib/getConfig.ts","../src/lib/init/setupPackageJSON.ts","../src/lib/init/setupTSConfig.ts","../src/lib/init/setupEnv.ts","../src/lib/init/setupGitIgnore.ts","../src/lib/init/setupBaseTable.ts","../src/lib/init/setupDemoTables.ts","../src/lib/init/setupConfig.ts","../src/lib/init/setupMainDb.ts","../src/lib/init/setupMigrationScript.ts","../src/lib/init/createDemoMigrations.ts","../src/lib/init/createDemoSeed.ts","../src/lib/init/setupRunner.ts","../src/lib/init.ts","../src/lib/greetAfterInstall.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { basename, join } from 'path';\nimport https from 'https';\nimport { InitConfig } from '../lib';\n\nexport async function readFileSafe(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\nexport function makeFileTimeStamp(now: Date): string {\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\nexport async function createSeed(\n config: InitConfig,\n dirPath: string,\n): Promise<void> {\n const filePath = join(dirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n\nexport type DependencyKind = 'dependencies' | 'devDependencies';\nexport function 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\nexport function getPackageManagerName(): 'npm' | 'yarn' | 'pnpm' | 'bun' {\n const { npm_execpath } = process.env;\n if (npm_execpath) {\n const name = basename(npm_execpath);\n if (/npm/.test(name)) {\n return 'npm';\n }\n if (/yarn/.test(name)) {\n return 'yarn';\n }\n if (/bun/.test(name)) {\n return 'bun';\n }\n }\n\n return 'pnpm';\n}\n","import prompts from 'prompts';\nimport { join, resolve, basename } from 'path';\nimport { InitConfig, UserProvidedConfig } from '../lib';\nimport { getPackageManagerName, readFileSafe } from './utils';\n\nexport async function getConfig(\n logger: { log(message: string): void } = console,\n): Promise<InitConfig | undefined> {\n let cancelled = false;\n\n logger.log('Welcome to Orchid ORM installer!');\n\n const isBun = getPackageManagerName() === 'bun';\n\n const response = await prompts<keyof UserProvidedConfig>(\n [\n {\n type: 'text',\n name: 'path',\n message: 'Where to install Orchid ORM?',\n initial: process.cwd(),\n },\n ...(isBun\n ? []\n : [\n {\n type: 'select' as const,\n name: 'runner' as const,\n message: 'Choose a tool for executing TS files',\n choices: [\n {\n title: 'tsx',\n value: 'tsx',\n },\n {\n title: 'vite-node',\n value: 'vite-node',\n },\n {\n title: 'ts-node',\n value: 'ts-node',\n },\n ],\n },\n ]),\n {\n type: 'select',\n name: 'timestamp',\n message: 'Return timestamps as:',\n choices: [\n {\n title: 'string (as returned from db)',\n value: 'string',\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: 'Add a separate database for tests?',\n },\n {\n type: 'select',\n name: 'validation',\n message: 'Integrate with a validation library?',\n choices: [\n {\n title: 'no',\n value: 'no',\n },\n {\n title: 'zod',\n value: 'zod',\n },\n {\n title: 'valibot',\n value: 'valibot',\n },\n ],\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Add record factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Add demo tables?',\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (isBun) response.runner = 'bun';\n\n if (cancelled) return;\n\n const path = resolve(response.path);\n const tsConfigPath = join(path, 'tsconfig.json');\n const hasTsConfig = await readFileSafe(tsConfigPath);\n const dbDirPath = join(path, 'src', 'db');\n\n return {\n ...response,\n hasTsConfig: !!hasTsConfig,\n path: resolve(response.path),\n dbDirPath,\n projectName: basename(path),\n esm: response.runner !== 'ts-node',\n };\n}\n","import { InitConfig } from '../../lib';\nimport { getLatestPackageVersion, readFileSafe } from '../utils';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupPackageJSON(config: InitConfig): Promise<void> {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', 'dependencies'),\n config.validation === 'zod'\n ? getLatestPackageVersion('orchid-orm-schema-to-zod', 'dependencies')\n : config.validation === 'valibot'\n ? getLatestPackageVersion('orchid-orm-valibot', 'dependencies')\n : undefined,\n getLatestPackageVersion('rake-db', 'devDependencies'),\n config.addTestFactory &&\n getLatestPackageVersion('orchid-orm-test-factory', 'devDependencies'),\n getLatestPackageVersion('@types/node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion('vite', 'devDependencies'),\n config.runner !== 'bun' &&\n getLatestPackageVersion(config.runner, 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion(\n 'rollup-plugin-node-externals',\n 'devDependencies',\n ),\n config.runner === 'tsx' &&\n getLatestPackageVersion('esbuild', 'devDependencies'),\n config.runner === 'tsx' &&\n getLatestPackageVersion('rimraf', '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 = join(config.path, 'package.json');\n const content = await readFileSafe(packageJsonPath);\n let json = content\n ? JSON.parse(content)\n : {\n name: config.projectName,\n };\n\n if (config.esm) json = { name: json.name, type: 'module', ...json };\n\n const scripts = (json.scripts ??= {});\n\n if (config.runner === 'vite-node') {\n scripts.db = 'vite-node src/db/dbScript.ts --';\n scripts['build:migrations'] = 'vite build --config vite.migrations.mts';\n scripts['db:compiled'] = 'node dist/db/dbScript.mjs';\n } else if (config.runner === 'tsx') {\n scripts.db = 'NODE_ENV=development tsx src/db/dbScript.ts';\n scripts['build:migrations'] =\n 'rimraf dist/db && node esbuild.migrations.mjs';\n scripts['db:compiled'] = 'NODE_ENV=production node dist/db/dbScript.mjs';\n } else {\n scripts.db = `${config.runner} src/db/dbScript.ts`;\n\n if (config.runner === 'ts-node') {\n scripts.build = 'tsc';\n scripts['db:compiled'] = 'node dist/dbScript.js';\n }\n }\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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupTSConfig(config: InitConfig): Promise<void> {\n if (config.hasTsConfig) return;\n\n const module = config.runner === 'ts-node' ? 'commonjs' : 'esnext';\n const moduleResolution =\n config.runner === 'ts-node'\n ? ''\n : `\n \"moduleResolution\": \"bundler\",`;\n\n const types = config.runner === 'vite-node' ? `[\"vite/client\"]` : undefined;\n\n const tsConfigPath = join(config.path, 'tsconfig.json');\n await fs.writeFile(\n tsConfigPath,\n `{\n \"compilerOptions\": {${\n config.runner === 'ts-node'\n ? `\n \"outDir\": \"dist\",`\n : ''\n }\n \"target\": \"es2017\",\n \"module\": \"${module}\",${moduleResolution}\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true${\n types\n ? `,\n \"types\": ${types}`\n : ''\n }\n }\n}\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupEnv(config: InitConfig): Promise<void> {\n const envPath = join(config.path, '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n // by default, on Mac it is a username, on Linux it's postgres, on Windows it's postgres as well\n const user = process.platform === 'darwin' ? process.env.USER : 'postgres';\n\n // TODO: guess user and pw\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://${user}:@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}:@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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupGitIgnore(config: InitConfig): Promise<void> {\n const gitignorePath = join(config.path, '.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!.env.example`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupBaseTable(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';${\n config.validation === 'zod'\n ? `\\nimport { zodSchemaConfig } from 'orchid-orm-schema-to-zod';`\n : config.validation === 'valibot'\n ? `\\nimport { valibotSchemaConfig } from 'orchid-orm-valibot';`\n : ''\n }\n\nexport const BaseTable = createBaseTable({\n // Set \\`snakeCase\\` to \\`true\\` if columns in your database are in snake_case.\n // snakeCase: true,${\n config.validation !== 'no'\n ? `\n\n schemaConfig: ${\n config.validation === 'zod' ? 'zodSchemaConfig' : 'valibotSchemaConfig'\n },`\n : ''\n }\n\n // Customize column types for all tables.\n columnTypes: (t) => ({\n ...t,${\n config.validation === 'no'\n ? ''\n : `\n // Set min and max validations for all text columns,\n // it is only checked when validating with ${config.validation} schemas derived from the table.\n text: (min = 0, max = Infinity) => t.text(min, max),`\n }`;\n\n const { timestamp } = config;\n if (timestamp && timestamp !== 'string') {\n content += `\n // Parse timestamps to ${timestamp === 'number' ? 'number' : 'Date object'}.\n timestamp: (precision?: number) => t.timestamp(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),\n});\n`;\n\n await fs.writeFile(filePath, content);\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupDemoTables(config: InitConfig): Promise<void> {\n if (!config.demoTables) return;\n\n const tablesDir = join(config.dbDirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n join(tablesDir, 'post.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n\n// Post type returned from database.\nexport type Post = Selectable<PostTable>;\n// Post type for insertion.\nexport type PostNew = Insertable<PostTable>;\n// Post type for updates.\nexport type PostUpdate = Updateable<PostTable>;\n// Post type used by query methods such as \\`where\\`.\nexport type PostForQuery = Queryable<PostTable>;\n\nexport class PostTable extends BaseTable {\n readonly table = 'post';\n columns = this.setColumns((t) => ({\n id: t.identity().primaryKey(),\n title: t.text(3, 100).unique(),\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 );\n\n await fs.writeFile(\n join(tablesDir, 'comment.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n\n// Comment type returned from database.\nexport type Comment = Selectable<CommentTable>;\n// Comment type for insertion.\nexport type CommentNew = Insertable<CommentTable>;\n// Comment type for updates.\nexport type CommentUpdate = Updateable<CommentTable>;\n// Comment type used by query methods such as \\`where\\`.\nexport type CommentForQuery = Queryable<CommentTable>;\n\nexport class CommentTable extends BaseTable {\n readonly table = 'comment';\n columns = this.setColumns((t) => ({\n id: t.identity().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 );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupConfig(config: InitConfig): Promise<void> {\n const configPath = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMainDb(config: InitConfig): Promise<void> {\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 = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMigrationScript(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'dbScript.ts');\n\n const migrations =\n config.runner === 'vite-node'\n ? \"migrations: import.meta.glob('./migrations/*.ts')\"\n : \"migrationsPath: './migrations'\";\n\n const useCodeUpdater =\n config.runner === 'vite-node'\n ? 'import.meta.env.DEV'\n : `process.env.NODE_ENV === 'development'`;\n\n await fs.writeFile(\n filePath,\n `import { rakeDb } from 'rake-db';\nimport { appCodeUpdater } from 'orchid-orm/codegen';\nimport { config } from './config';\nimport { BaseTable } from './baseTable';\n\nexport const change = rakeDb(${\n config.testDatabase ? 'config.allDatabases' : 'config.database'\n }, {\n baseTable: BaseTable,\n ${migrations},\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`./tables/\\${tableName}.table.ts\\`,\n ormPath: './db.ts',\n }),\n // set to false to disable code updater\n useCodeUpdater: ${useCodeUpdater},\n commands: {\n async seed() {\n const { seed } = await import('./seed');\n await seed();\n },\n },\n import: (path) => import(path),\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\nimport { makeFileTimeStamp } from '../utils';\n\nexport async function createDemoMigrations(config: InitConfig): Promise<void> {\n const migrationsPath = join(config.dbDirPath, 'migrations');\n await fs.mkdir(migrationsPath, { recursive: true });\n\n if (!config.demoTables) return;\n\n const now = new Date();\n\n const postPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createPost.ts`,\n );\n await fs.writeFile(\n postPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('post', (t) => ({\n id: t.identity().primaryKey(),\n title: t.text().unique(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n\n now.setTime(now.getTime() + 1000);\n\n const commentPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createComment.ts`,\n );\n await fs.writeFile(\n commentPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('comment', (t) => ({\n id: t.identity().primaryKey(),\n postId: t.integer().foreignKey('post', 'id').index(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\n\nexport async function createDemoSeed(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport fs from 'fs/promises';\nimport { join } from 'path';\n\nexport async function setupRunner(config: InitConfig): Promise<void> {\n if (config.runner === 'vite-node') {\n await fs.writeFile(\n join(config.path, 'vite.migrations.mts'),\n `import { resolve } from \"path\";\nimport { defineConfig, PluginOption } from \"vite\";\nimport { nodeExternals } from \"rollup-plugin-node-externals\";\n\nexport default defineConfig({\n plugins: [\n {\n ...nodeExternals(),\n name: \"node-externals\",\n enforce: \"pre\",\n apply: \"build\",\n } as PluginOption\n ],\n build: {\n outDir: resolve(__dirname, \"dist\", \"db\"),\n lib: {\n entry: resolve(__dirname, \"src/db/dbScript.ts\"),\n formats: [\"es\"],\n fileName: \"dbScript\",\n },\n rollupOptions: {\n external: [\"orchid-orm\", \"rake-db\"],\n output: {\n entryFileNames: \"[name].mjs\",\n chunkFileNames: \"[name].[hash].mjs\",\n },\n },\n },\n})\n`,\n );\n } else if (config.runner === 'tsx') {\n await fs.writeFile(\n join(config.path, 'esbuild.migrations.mjs'),\n `import { build } from \"esbuild\";\n\nawait Promise.all([\n build({\n entryPoints: [\"src/db/dbScript.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db\",\n outExtension: { '.js': '.mjs' },\n banner: {\n js: \\`\n import __path from 'node:path';\n import { fileURLToPath as __fileURLToPath } from 'node:url';\n import { createRequire as __createRequire } from 'module';\n const require = __createRequire(import.meta.url);\n const __filename = __fileURLToPath(import.meta.url);\n const __dirname = __path.dirname(__filename);\n \\`,\n },\n }),\n build({\n entryPoints: [\"src/db/migrations/*.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db/migrations\",\n outExtension: { '.js': '.mjs' },\n external: ['../dbScript'],\n plugins: [{\n name: 'add-js-suffix',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n if (args.importer) {\n return { path: args.path + '.mjs', external: true }\n }\n })\n },\n }],\n }),\n]);\n`,\n );\n }\n}\n","import { InitConfig } from '../lib';\nimport fs from 'fs/promises';\nimport { setupPackageJSON } from './init/setupPackageJSON';\nimport { setupTSConfig } from './init/setupTSConfig';\nimport { setupEnv } from './init/setupEnv';\nimport { setupGitIgnore } from './init/setupGitIgnore';\nimport { setupBaseTable } from './init/setupBaseTable';\nimport { setupDemoTables } from './init/setupDemoTables';\nimport { setupConfig } from './init/setupConfig';\nimport { setupMainDb } from './init/setupMainDb';\nimport { setupMigrationScript } from './init/setupMigrationScript';\nimport { createDemoMigrations } from './init/createDemoMigrations';\nimport { createDemoSeed } from './init/createDemoSeed';\nimport { setupRunner } from './init/setupRunner';\n\nexport async function init(config: InitConfig): Promise<void> {\n await fs.mkdir(config.dbDirPath, { recursive: true });\n\n for (const key in initSteps) {\n await initSteps[key as keyof typeof initSteps](config);\n }\n}\n\nexport const initSteps = {\n setupPackageJSON,\n setupTSConfig,\n setupEnv,\n setupGitIgnore,\n setupBaseTable,\n setupDemoTables,\n setupConfig,\n setupMainDb,\n setupMigrationScript,\n createDemoMigrations,\n createDemoSeed,\n setupRunner,\n};\n","import { relative } from 'path';\nimport { InitConfig } from '../lib';\nimport { getPackageManagerName } from './utils';\n\nexport function greetAfterInstall(\n config: InitConfig,\n logger: { log(message: string): void } = console,\n) {\n const relativePath = relative(process.cwd(), config.path);\n const manager = getPackageManagerName();\n const run = manager === 'npm' ? `npm run` : manager;\n\n logger.log(`\nThank you for trying Orchid ORM!\n \nTo finish setup,${\n relativePath ? ` cd to the project and` : ''\n } install dependencies:\n${\n relativePath\n ? `\n> cd ${relativePath}`\n : ''\n}\n> ${manager} i\n\nEnter the correct database credentials to the .env file,\nthen create the database:\n\n> ${run} db create\n\nAnd run the migrations:\n\n> ${run} db migrate\n`);\n}\n"],"names":["basename","path","resolve","join","relative"],"mappings":"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"}
package/dist/lib.mjs CHANGED
@@ -129,9 +129,23 @@ async function getConfig(logger = console) {
129
129
  message: "Add a separate database for tests?"
130
130
  },
131
131
  {
132
- type: "confirm",
133
- name: "addSchemaToZod",
134
- message: "Add Zod for validations?"
132
+ type: "select",
133
+ name: "validation",
134
+ message: "Integrate with a validation library?",
135
+ choices: [
136
+ {
137
+ title: "no",
138
+ value: "no"
139
+ },
140
+ {
141
+ title: "zod",
142
+ value: "zod"
143
+ },
144
+ {
145
+ title: "valibot",
146
+ value: "valibot"
147
+ }
148
+ ]
135
149
  },
136
150
  {
137
151
  type: "confirm",
@@ -188,7 +202,7 @@ async function setupPackageJSON(config) {
188
202
  const pairs = await Promise.all([
189
203
  getLatestPackageVersion("dotenv", "dependencies"),
190
204
  getLatestPackageVersion("orchid-orm", "dependencies"),
191
- config.addSchemaToZod && getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies"),
205
+ config.validation === "zod" ? getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies") : config.validation === "valibot" ? getLatestPackageVersion("orchid-orm-valibot", "dependencies") : void 0,
192
206
  getLatestPackageVersion("rake-db", "devDependencies"),
193
207
  config.addTestFactory && getLatestPackageVersion("orchid-orm-test-factory", "devDependencies"),
194
208
  getLatestPackageVersion("@types/node", "devDependencies"),
@@ -316,29 +330,30 @@ node_modules`;
316
330
 
317
331
  async function setupBaseTable(config) {
318
332
  const filePath = join(config.dbDirPath, "baseTable.ts");
319
- let content = `import { createBaseTable } from 'orchid-orm';${config.addSchemaToZod ? `
320
- import { zodSchemaProvider } from 'orchid-orm-schema-to-zod';` : ""}
333
+ let content = `import { createBaseTable } from 'orchid-orm';${config.validation === "zod" ? `
334
+ import { zodSchemaConfig } from 'orchid-orm-schema-to-zod';` : config.validation === "valibot" ? `
335
+ import { valibotSchemaConfig } from 'orchid-orm-valibot';` : ""}
321
336
 
322
337
  export const BaseTable = createBaseTable({
323
338
  // Set \`snakeCase\` to \`true\` if columns in your database are in snake_case.
324
- // snakeCase: true,
339
+ // snakeCase: true,${config.validation !== "no" ? `
340
+
341
+ schemaConfig: ${config.validation === "zod" ? "zodSchemaConfig" : "valibotSchemaConfig"},` : ""}
325
342
 
326
343
  // Customize column types for all tables.
327
344
  columnTypes: (t) => ({
328
- ...t,${config.addSchemaToZod ? `
345
+ ...t,${config.validation === "no" ? "" : `
329
346
  // Set min and max validations for all text columns,
330
- // it is only checked when validating with Zod schemas derived from the table.
331
- text: (min = 0, max = Infinity) => t.text(min, max),` : ""}`;
347
+ // it is only checked when validating with ${config.validation} schemas derived from the table.
348
+ text: (min = 0, max = Infinity) => t.text(min, max),`}`;
332
349
  const { timestamp } = config;
333
350
  if (timestamp && timestamp !== "string") {
334
351
  content += `
335
352
  // Parse timestamps to ${timestamp === "number" ? "number" : "Date object"}.
336
- timestamp: <P extends number>(precision?: P) =>
337
- t.timestamp<P>(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
353
+ timestamp: (precision?: number) => t.timestamp(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
338
354
  }
339
355
  content += `
340
- }),${config.addSchemaToZod ? `
341
- schemaProvider: zodSchemaProvider,` : ""}
356
+ }),
342
357
  });
343
358
  `;
344
359
  await fs.writeFile(filePath, content);
package/dist/lib.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.mjs","sources":["../src/lib/utils.ts","../src/lib/getConfig.ts","../src/lib/init/setupPackageJSON.ts","../src/lib/init/setupTSConfig.ts","../src/lib/init/setupEnv.ts","../src/lib/init/setupGitIgnore.ts","../src/lib/init/setupBaseTable.ts","../src/lib/init/setupDemoTables.ts","../src/lib/init/setupConfig.ts","../src/lib/init/setupMainDb.ts","../src/lib/init/setupMigrationScript.ts","../src/lib/init/createDemoMigrations.ts","../src/lib/init/createDemoSeed.ts","../src/lib/init/setupRunner.ts","../src/lib/init.ts","../src/lib/greetAfterInstall.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { basename, join } from 'path';\nimport https from 'https';\nimport { InitConfig } from '../lib';\n\nexport async function readFileSafe(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\nexport function makeFileTimeStamp(now: Date): string {\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\nexport async function createSeed(\n config: InitConfig,\n dirPath: string,\n): Promise<void> {\n const filePath = join(dirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n\nexport type DependencyKind = 'dependencies' | 'devDependencies';\nexport function 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\nexport function getPackageManagerName(): 'npm' | 'yarn' | 'pnpm' | 'bun' {\n const { npm_execpath } = process.env;\n if (npm_execpath) {\n const name = basename(npm_execpath);\n if (/npm/.test(name)) {\n return 'npm';\n }\n if (/yarn/.test(name)) {\n return 'yarn';\n }\n if (/bun/.test(name)) {\n return 'bun';\n }\n }\n\n return 'pnpm';\n}\n","import prompts from 'prompts';\nimport { join, resolve, basename } from 'path';\nimport { InitConfig, UserProvidedConfig } from '../lib';\nimport { getPackageManagerName, readFileSafe } from './utils';\n\nexport async function getConfig(\n logger: { log(message: string): void } = console,\n): Promise<InitConfig | undefined> {\n let cancelled = false;\n\n logger.log('Welcome to Orchid ORM installer!');\n\n const isBun = getPackageManagerName() === 'bun';\n\n const response = await prompts<keyof UserProvidedConfig>(\n [\n {\n type: 'text',\n name: 'path',\n message: 'Where to install Orchid ORM?',\n initial: process.cwd(),\n },\n ...(isBun\n ? []\n : [\n {\n type: 'select' as const,\n name: 'runner' as const,\n message: 'Choose a tool for executing TS files',\n choices: [\n {\n title: 'tsx',\n value: 'tsx',\n },\n {\n title: 'vite-node',\n value: 'vite-node',\n },\n {\n title: 'ts-node',\n value: 'ts-node',\n },\n ],\n },\n ]),\n {\n type: 'select',\n name: 'timestamp',\n message: 'Return timestamps as:',\n choices: [\n {\n title: 'string (as returned from db)',\n value: 'string',\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: 'Add a separate database for tests?',\n },\n {\n type: 'confirm',\n name: 'addSchemaToZod',\n message: 'Add Zod for validations?',\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Add record factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Add demo tables?',\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (isBun) response.runner = 'bun';\n\n if (cancelled) return;\n\n const path = resolve(response.path);\n const tsConfigPath = join(path, 'tsconfig.json');\n const hasTsConfig = await readFileSafe(tsConfigPath);\n const dbDirPath = join(path, 'src', 'db');\n\n return {\n ...response,\n hasTsConfig: !!hasTsConfig,\n path: resolve(response.path),\n dbDirPath,\n projectName: basename(path),\n esm: response.runner !== 'ts-node',\n };\n}\n","import { InitConfig } from '../../lib';\nimport { getLatestPackageVersion, readFileSafe } from '../utils';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupPackageJSON(config: InitConfig): Promise<void> {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', '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('@types/node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion('vite', 'devDependencies'),\n config.runner !== 'bun' &&\n getLatestPackageVersion(config.runner, 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion(\n 'rollup-plugin-node-externals',\n 'devDependencies',\n ),\n config.runner === 'tsx' &&\n getLatestPackageVersion('esbuild', 'devDependencies'),\n config.runner === 'tsx' &&\n getLatestPackageVersion('rimraf', '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 = join(config.path, 'package.json');\n const content = await readFileSafe(packageJsonPath);\n let json = content\n ? JSON.parse(content)\n : {\n name: config.projectName,\n };\n\n if (config.esm) json = { name: json.name, type: 'module', ...json };\n\n const scripts = (json.scripts ??= {});\n\n if (config.runner === 'vite-node') {\n scripts.db = 'vite-node src/db/dbScript.ts --';\n scripts['build:migrations'] = 'vite build --config vite.migrations.mts';\n scripts['db:compiled'] = 'node dist/db/dbScript.mjs';\n } else if (config.runner === 'tsx') {\n scripts.db = 'NODE_ENV=development tsx src/db/dbScript.ts';\n scripts['build:migrations'] =\n 'rimraf dist/db && node esbuild.migrations.mjs';\n scripts['db:compiled'] = 'NODE_ENV=production node dist/db/dbScript.mjs';\n } else {\n scripts.db = `${config.runner} src/db/dbScript.ts`;\n\n if (config.runner === 'ts-node') {\n scripts.build = 'tsc';\n scripts['db:compiled'] = 'node dist/dbScript.js';\n }\n }\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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupTSConfig(config: InitConfig): Promise<void> {\n if (config.hasTsConfig) return;\n\n const module = config.runner === 'ts-node' ? 'commonjs' : 'esnext';\n const moduleResolution =\n config.runner === 'ts-node'\n ? ''\n : `\n \"moduleResolution\": \"bundler\",`;\n\n const types = config.runner === 'vite-node' ? `[\"vite/client\"]` : undefined;\n\n const tsConfigPath = join(config.path, 'tsconfig.json');\n await fs.writeFile(\n tsConfigPath,\n `{\n \"compilerOptions\": {${\n config.runner === 'ts-node'\n ? `\n \"outDir\": \"dist\",`\n : ''\n }\n \"target\": \"es2017\",\n \"module\": \"${module}\",${moduleResolution}\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true${\n types\n ? `,\n \"types\": ${types}`\n : ''\n }\n }\n}\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupEnv(config: InitConfig): Promise<void> {\n const envPath = join(config.path, '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n // by default, on Mac it is a username, on Linux it's postgres, on Windows it's postgres as well\n const user = process.platform === 'darwin' ? process.env.USER : 'postgres';\n\n // TODO: guess user and pw\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://${user}:@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}:@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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupGitIgnore(config: InitConfig): Promise<void> {\n const gitignorePath = join(config.path, '.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!.env.example`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupBaseTable(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';${\n config.addSchemaToZod\n ? `\\nimport { zodSchemaProvider } from 'orchid-orm-schema-to-zod';`\n : ''\n }\n\nexport const BaseTable = createBaseTable({\n // Set \\`snakeCase\\` to \\`true\\` if columns in your database are in snake_case.\n // snakeCase: true,\n\n // Customize column types for all tables.\n columnTypes: (t) => ({\n ...t,${\n config.addSchemaToZod\n ? `\n // Set min and max validations for all text columns,\n // it is only checked when validating with Zod schemas derived from the table.\n text: (min = 0, max = Infinity) => t.text(min, max),`\n : ''\n }`;\n\n const { timestamp } = config;\n if (timestamp && timestamp !== 'string') {\n content += `\n // Parse timestamps to ${timestamp === 'number' ? 'number' : 'Date object'}.\n timestamp: <P extends number>(precision?: P) =>\n t.timestamp<P>(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),${\n config.addSchemaToZod\n ? `\n schemaProvider: zodSchemaProvider,`\n : ''\n }\n});\n`;\n\n await fs.writeFile(filePath, content);\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupDemoTables(config: InitConfig): Promise<void> {\n if (!config.demoTables) return;\n\n const tablesDir = join(config.dbDirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n join(tablesDir, 'post.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n\n// Post type returned from database.\nexport type Post = Selectable<PostTable>;\n// Post type for insertion.\nexport type PostNew = Insertable<PostTable>;\n// Post type for updates.\nexport type PostUpdate = Updateable<PostTable>;\n// Post type used by query methods such as \\`where\\`.\nexport type PostForQuery = Queryable<PostTable>;\n\nexport class PostTable extends BaseTable {\n readonly table = 'post';\n columns = this.setColumns((t) => ({\n id: t.identity().primaryKey(),\n title: t.text(3, 100).unique(),\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 );\n\n await fs.writeFile(\n join(tablesDir, 'comment.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n\n// Comment type returned from database.\nexport type Comment = Selectable<CommentTable>;\n// Comment type for insertion.\nexport type CommentNew = Insertable<CommentTable>;\n// Comment type for updates.\nexport type CommentUpdate = Updateable<CommentTable>;\n// Comment type used by query methods such as \\`where\\`.\nexport type CommentForQuery = Queryable<CommentTable>;\n\nexport class CommentTable extends BaseTable {\n readonly table = 'comment';\n columns = this.setColumns((t) => ({\n id: t.identity().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 );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupConfig(config: InitConfig): Promise<void> {\n const configPath = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMainDb(config: InitConfig): Promise<void> {\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 = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMigrationScript(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'dbScript.ts');\n\n const migrations =\n config.runner === 'vite-node'\n ? \"migrations: import.meta.glob('./migrations/*.ts')\"\n : \"migrationsPath: './migrations'\";\n\n const useCodeUpdater =\n config.runner === 'vite-node'\n ? 'import.meta.env.DEV'\n : `process.env.NODE_ENV === 'development'`;\n\n await fs.writeFile(\n filePath,\n `import { rakeDb } from 'rake-db';\nimport { appCodeUpdater } from 'orchid-orm/codegen';\nimport { config } from './config';\nimport { BaseTable } from './baseTable';\n\nexport const change = rakeDb(${\n config.testDatabase ? 'config.allDatabases' : 'config.database'\n }, {\n baseTable: BaseTable,\n ${migrations},\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`./tables/\\${tableName}.table.ts\\`,\n ormPath: './db.ts',\n }),\n // set to false to disable code updater\n useCodeUpdater: ${useCodeUpdater},\n commands: {\n async seed() {\n const { seed } = await import('./seed');\n await seed();\n },\n },\n import: (path) => import(path),\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\nimport { makeFileTimeStamp } from '../utils';\n\nexport async function createDemoMigrations(config: InitConfig): Promise<void> {\n const migrationsPath = join(config.dbDirPath, 'migrations');\n await fs.mkdir(migrationsPath, { recursive: true });\n\n if (!config.demoTables) return;\n\n const now = new Date();\n\n const postPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createPost.ts`,\n );\n await fs.writeFile(\n postPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('post', (t) => ({\n id: t.identity().primaryKey(),\n title: t.text().unique(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n\n now.setTime(now.getTime() + 1000);\n\n const commentPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createComment.ts`,\n );\n await fs.writeFile(\n commentPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('comment', (t) => ({\n id: t.identity().primaryKey(),\n postId: t.integer().foreignKey('post', 'id').index(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\n\nexport async function createDemoSeed(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport fs from 'fs/promises';\nimport { join } from 'path';\n\nexport async function setupRunner(config: InitConfig): Promise<void> {\n if (config.runner === 'vite-node') {\n await fs.writeFile(\n join(config.path, 'vite.migrations.mts'),\n `import { resolve } from \"path\";\nimport { defineConfig, PluginOption } from \"vite\";\nimport { nodeExternals } from \"rollup-plugin-node-externals\";\n\nexport default defineConfig({\n plugins: [\n {\n ...nodeExternals(),\n name: \"node-externals\",\n enforce: \"pre\",\n apply: \"build\",\n } as PluginOption\n ],\n build: {\n outDir: resolve(__dirname, \"dist\", \"db\"),\n lib: {\n entry: resolve(__dirname, \"src/db/dbScript.ts\"),\n formats: [\"es\"],\n fileName: \"dbScript\",\n },\n rollupOptions: {\n external: [\"orchid-orm\", \"rake-db\"],\n output: {\n entryFileNames: \"[name].mjs\",\n chunkFileNames: \"[name].[hash].mjs\",\n },\n },\n },\n})\n`,\n );\n } else if (config.runner === 'tsx') {\n await fs.writeFile(\n join(config.path, 'esbuild.migrations.mjs'),\n `import { build } from \"esbuild\";\n\nawait Promise.all([\n build({\n entryPoints: [\"src/db/dbScript.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db\",\n outExtension: { '.js': '.mjs' },\n banner: {\n js: \\`\n import __path from 'node:path';\n import { fileURLToPath as __fileURLToPath } from 'node:url';\n import { createRequire as __createRequire } from 'module';\n const require = __createRequire(import.meta.url);\n const __filename = __fileURLToPath(import.meta.url);\n const __dirname = __path.dirname(__filename);\n \\`,\n },\n }),\n build({\n entryPoints: [\"src/db/migrations/*.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db/migrations\",\n outExtension: { '.js': '.mjs' },\n external: ['../dbScript'],\n plugins: [{\n name: 'add-js-suffix',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n if (args.importer) {\n return { path: args.path + '.mjs', external: true }\n }\n })\n },\n }],\n }),\n]);\n`,\n );\n }\n}\n","import { InitConfig } from '../lib';\nimport fs from 'fs/promises';\nimport { setupPackageJSON } from './init/setupPackageJSON';\nimport { setupTSConfig } from './init/setupTSConfig';\nimport { setupEnv } from './init/setupEnv';\nimport { setupGitIgnore } from './init/setupGitIgnore';\nimport { setupBaseTable } from './init/setupBaseTable';\nimport { setupDemoTables } from './init/setupDemoTables';\nimport { setupConfig } from './init/setupConfig';\nimport { setupMainDb } from './init/setupMainDb';\nimport { setupMigrationScript } from './init/setupMigrationScript';\nimport { createDemoMigrations } from './init/createDemoMigrations';\nimport { createDemoSeed } from './init/createDemoSeed';\nimport { setupRunner } from './init/setupRunner';\n\nexport async function init(config: InitConfig): Promise<void> {\n await fs.mkdir(config.dbDirPath, { recursive: true });\n\n for (const key in initSteps) {\n await initSteps[key as keyof typeof initSteps](config);\n }\n}\n\nexport const initSteps = {\n setupPackageJSON,\n setupTSConfig,\n setupEnv,\n setupGitIgnore,\n setupBaseTable,\n setupDemoTables,\n setupConfig,\n setupMainDb,\n setupMigrationScript,\n createDemoMigrations,\n createDemoSeed,\n setupRunner,\n};\n","import { relative } from 'path';\nimport { InitConfig } from '../lib';\nimport { getPackageManagerName } from './utils';\n\nexport function greetAfterInstall(\n config: InitConfig,\n logger: { log(message: string): void } = console,\n) {\n const relativePath = relative(process.cwd(), config.path);\n const manager = getPackageManagerName();\n const run = manager === 'npm' ? `npm run` : manager;\n\n logger.log(`\nThank you for trying Orchid ORM!\n \nTo finish setup,${\n relativePath ? ` cd to the project and` : ''\n } install dependencies:\n${\n relativePath\n ? `\n> cd ${relativePath}`\n : ''\n}\n> ${manager} i\n\nEnter the correct database credentials to the .env file,\nthen create the database:\n\n> ${run} db create\n\nAnd run the migrations:\n\n> ${run} db migrate\n`);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lib.mjs","sources":["../src/lib/utils.ts","../src/lib/getConfig.ts","../src/lib/init/setupPackageJSON.ts","../src/lib/init/setupTSConfig.ts","../src/lib/init/setupEnv.ts","../src/lib/init/setupGitIgnore.ts","../src/lib/init/setupBaseTable.ts","../src/lib/init/setupDemoTables.ts","../src/lib/init/setupConfig.ts","../src/lib/init/setupMainDb.ts","../src/lib/init/setupMigrationScript.ts","../src/lib/init/createDemoMigrations.ts","../src/lib/init/createDemoSeed.ts","../src/lib/init/setupRunner.ts","../src/lib/init.ts","../src/lib/greetAfterInstall.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { basename, join } from 'path';\nimport https from 'https';\nimport { InitConfig } from '../lib';\n\nexport async function readFileSafe(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\nexport function makeFileTimeStamp(now: Date): string {\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\nexport async function createSeed(\n config: InitConfig,\n dirPath: string,\n): Promise<void> {\n const filePath = join(dirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n\nexport type DependencyKind = 'dependencies' | 'devDependencies';\nexport function 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\nexport function getPackageManagerName(): 'npm' | 'yarn' | 'pnpm' | 'bun' {\n const { npm_execpath } = process.env;\n if (npm_execpath) {\n const name = basename(npm_execpath);\n if (/npm/.test(name)) {\n return 'npm';\n }\n if (/yarn/.test(name)) {\n return 'yarn';\n }\n if (/bun/.test(name)) {\n return 'bun';\n }\n }\n\n return 'pnpm';\n}\n","import prompts from 'prompts';\nimport { join, resolve, basename } from 'path';\nimport { InitConfig, UserProvidedConfig } from '../lib';\nimport { getPackageManagerName, readFileSafe } from './utils';\n\nexport async function getConfig(\n logger: { log(message: string): void } = console,\n): Promise<InitConfig | undefined> {\n let cancelled = false;\n\n logger.log('Welcome to Orchid ORM installer!');\n\n const isBun = getPackageManagerName() === 'bun';\n\n const response = await prompts<keyof UserProvidedConfig>(\n [\n {\n type: 'text',\n name: 'path',\n message: 'Where to install Orchid ORM?',\n initial: process.cwd(),\n },\n ...(isBun\n ? []\n : [\n {\n type: 'select' as const,\n name: 'runner' as const,\n message: 'Choose a tool for executing TS files',\n choices: [\n {\n title: 'tsx',\n value: 'tsx',\n },\n {\n title: 'vite-node',\n value: 'vite-node',\n },\n {\n title: 'ts-node',\n value: 'ts-node',\n },\n ],\n },\n ]),\n {\n type: 'select',\n name: 'timestamp',\n message: 'Return timestamps as:',\n choices: [\n {\n title: 'string (as returned from db)',\n value: 'string',\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: 'Add a separate database for tests?',\n },\n {\n type: 'select',\n name: 'validation',\n message: 'Integrate with a validation library?',\n choices: [\n {\n title: 'no',\n value: 'no',\n },\n {\n title: 'zod',\n value: 'zod',\n },\n {\n title: 'valibot',\n value: 'valibot',\n },\n ],\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Add record factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Add demo tables?',\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (isBun) response.runner = 'bun';\n\n if (cancelled) return;\n\n const path = resolve(response.path);\n const tsConfigPath = join(path, 'tsconfig.json');\n const hasTsConfig = await readFileSafe(tsConfigPath);\n const dbDirPath = join(path, 'src', 'db');\n\n return {\n ...response,\n hasTsConfig: !!hasTsConfig,\n path: resolve(response.path),\n dbDirPath,\n projectName: basename(path),\n esm: response.runner !== 'ts-node',\n };\n}\n","import { InitConfig } from '../../lib';\nimport { getLatestPackageVersion, readFileSafe } from '../utils';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupPackageJSON(config: InitConfig): Promise<void> {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', 'dependencies'),\n config.validation === 'zod'\n ? getLatestPackageVersion('orchid-orm-schema-to-zod', 'dependencies')\n : config.validation === 'valibot'\n ? getLatestPackageVersion('orchid-orm-valibot', 'dependencies')\n : undefined,\n getLatestPackageVersion('rake-db', 'devDependencies'),\n config.addTestFactory &&\n getLatestPackageVersion('orchid-orm-test-factory', 'devDependencies'),\n getLatestPackageVersion('@types/node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion('vite', 'devDependencies'),\n config.runner !== 'bun' &&\n getLatestPackageVersion(config.runner, 'devDependencies'),\n config.runner === 'vite-node' &&\n getLatestPackageVersion(\n 'rollup-plugin-node-externals',\n 'devDependencies',\n ),\n config.runner === 'tsx' &&\n getLatestPackageVersion('esbuild', 'devDependencies'),\n config.runner === 'tsx' &&\n getLatestPackageVersion('rimraf', '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 = join(config.path, 'package.json');\n const content = await readFileSafe(packageJsonPath);\n let json = content\n ? JSON.parse(content)\n : {\n name: config.projectName,\n };\n\n if (config.esm) json = { name: json.name, type: 'module', ...json };\n\n const scripts = (json.scripts ??= {});\n\n if (config.runner === 'vite-node') {\n scripts.db = 'vite-node src/db/dbScript.ts --';\n scripts['build:migrations'] = 'vite build --config vite.migrations.mts';\n scripts['db:compiled'] = 'node dist/db/dbScript.mjs';\n } else if (config.runner === 'tsx') {\n scripts.db = 'NODE_ENV=development tsx src/db/dbScript.ts';\n scripts['build:migrations'] =\n 'rimraf dist/db && node esbuild.migrations.mjs';\n scripts['db:compiled'] = 'NODE_ENV=production node dist/db/dbScript.mjs';\n } else {\n scripts.db = `${config.runner} src/db/dbScript.ts`;\n\n if (config.runner === 'ts-node') {\n scripts.build = 'tsc';\n scripts['db:compiled'] = 'node dist/dbScript.js';\n }\n }\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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupTSConfig(config: InitConfig): Promise<void> {\n if (config.hasTsConfig) return;\n\n const module = config.runner === 'ts-node' ? 'commonjs' : 'esnext';\n const moduleResolution =\n config.runner === 'ts-node'\n ? ''\n : `\n \"moduleResolution\": \"bundler\",`;\n\n const types = config.runner === 'vite-node' ? `[\"vite/client\"]` : undefined;\n\n const tsConfigPath = join(config.path, 'tsconfig.json');\n await fs.writeFile(\n tsConfigPath,\n `{\n \"compilerOptions\": {${\n config.runner === 'ts-node'\n ? `\n \"outDir\": \"dist\",`\n : ''\n }\n \"target\": \"es2017\",\n \"module\": \"${module}\",${moduleResolution}\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true${\n types\n ? `,\n \"types\": ${types}`\n : ''\n }\n }\n}\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupEnv(config: InitConfig): Promise<void> {\n const envPath = join(config.path, '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n // by default, on Mac it is a username, on Linux it's postgres, on Windows it's postgres as well\n const user = process.platform === 'darwin' ? process.env.USER : 'postgres';\n\n // TODO: guess user and pw\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://${user}:@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}:@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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport { readFileSafe } from '../utils';\nimport fs from 'fs/promises';\n\nexport async function setupGitIgnore(config: InitConfig): Promise<void> {\n const gitignorePath = join(config.path, '.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!.env.example`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupBaseTable(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';${\n config.validation === 'zod'\n ? `\\nimport { zodSchemaConfig } from 'orchid-orm-schema-to-zod';`\n : config.validation === 'valibot'\n ? `\\nimport { valibotSchemaConfig } from 'orchid-orm-valibot';`\n : ''\n }\n\nexport const BaseTable = createBaseTable({\n // Set \\`snakeCase\\` to \\`true\\` if columns in your database are in snake_case.\n // snakeCase: true,${\n config.validation !== 'no'\n ? `\n\n schemaConfig: ${\n config.validation === 'zod' ? 'zodSchemaConfig' : 'valibotSchemaConfig'\n },`\n : ''\n }\n\n // Customize column types for all tables.\n columnTypes: (t) => ({\n ...t,${\n config.validation === 'no'\n ? ''\n : `\n // Set min and max validations for all text columns,\n // it is only checked when validating with ${config.validation} schemas derived from the table.\n text: (min = 0, max = Infinity) => t.text(min, max),`\n }`;\n\n const { timestamp } = config;\n if (timestamp && timestamp !== 'string') {\n content += `\n // Parse timestamps to ${timestamp === 'number' ? 'number' : 'Date object'}.\n timestamp: (precision?: number) => t.timestamp(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),\n});\n`;\n\n await fs.writeFile(filePath, content);\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupDemoTables(config: InitConfig): Promise<void> {\n if (!config.demoTables) return;\n\n const tablesDir = join(config.dbDirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n join(tablesDir, 'post.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n\n// Post type returned from database.\nexport type Post = Selectable<PostTable>;\n// Post type for insertion.\nexport type PostNew = Insertable<PostTable>;\n// Post type for updates.\nexport type PostUpdate = Updateable<PostTable>;\n// Post type used by query methods such as \\`where\\`.\nexport type PostForQuery = Queryable<PostTable>;\n\nexport class PostTable extends BaseTable {\n readonly table = 'post';\n columns = this.setColumns((t) => ({\n id: t.identity().primaryKey(),\n title: t.text(3, 100).unique(),\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 );\n\n await fs.writeFile(\n join(tablesDir, 'comment.table.ts'),\n `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n\n// Comment type returned from database.\nexport type Comment = Selectable<CommentTable>;\n// Comment type for insertion.\nexport type CommentNew = Insertable<CommentTable>;\n// Comment type for updates.\nexport type CommentUpdate = Updateable<CommentTable>;\n// Comment type used by query methods such as \\`where\\`.\nexport type CommentForQuery = Queryable<CommentTable>;\n\nexport class CommentTable extends BaseTable {\n readonly table = 'comment';\n columns = this.setColumns((t) => ({\n id: t.identity().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 );\n}\n","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupConfig(config: InitConfig): Promise<void> {\n const configPath = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMainDb(config: InitConfig): Promise<void> {\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 = join(config.dbDirPath, '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","import { InitConfig } from '../../lib';\nimport { join } from 'path';\nimport fs from 'fs/promises';\n\nexport async function setupMigrationScript(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'dbScript.ts');\n\n const migrations =\n config.runner === 'vite-node'\n ? \"migrations: import.meta.glob('./migrations/*.ts')\"\n : \"migrationsPath: './migrations'\";\n\n const useCodeUpdater =\n config.runner === 'vite-node'\n ? 'import.meta.env.DEV'\n : `process.env.NODE_ENV === 'development'`;\n\n await fs.writeFile(\n filePath,\n `import { rakeDb } from 'rake-db';\nimport { appCodeUpdater } from 'orchid-orm/codegen';\nimport { config } from './config';\nimport { BaseTable } from './baseTable';\n\nexport const change = rakeDb(${\n config.testDatabase ? 'config.allDatabases' : 'config.database'\n }, {\n baseTable: BaseTable,\n ${migrations},\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`./tables/\\${tableName}.table.ts\\`,\n ormPath: './db.ts',\n }),\n // set to false to disable code updater\n useCodeUpdater: ${useCodeUpdater},\n commands: {\n async seed() {\n const { seed } = await import('./seed');\n await seed();\n },\n },\n import: (path) => import(path),\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\nimport { makeFileTimeStamp } from '../utils';\n\nexport async function createDemoMigrations(config: InitConfig): Promise<void> {\n const migrationsPath = join(config.dbDirPath, 'migrations');\n await fs.mkdir(migrationsPath, { recursive: true });\n\n if (!config.demoTables) return;\n\n const now = new Date();\n\n const postPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createPost.ts`,\n );\n await fs.writeFile(\n postPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('post', (t) => ({\n id: t.identity().primaryKey(),\n title: t.text().unique(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n\n now.setTime(now.getTime() + 1000);\n\n const commentPath = join(\n migrationsPath,\n `${makeFileTimeStamp(now)}_createComment.ts`,\n );\n await fs.writeFile(\n commentPath,\n `import { change } from '../dbScript';\n\nchange(async (db) => {\n await db.createTable('comment', (t) => ({\n id: t.identity().primaryKey(),\n postId: t.integer().foreignKey('post', 'id').index(),\n text: t.text(),\n ...t.timestamps(),\n }));\n});\n`,\n );\n}\n","import { join } from 'path';\nimport fs from 'fs/promises';\nimport { InitConfig } from '../../lib';\n\nexport async function createDemoSeed(config: InitConfig): Promise<void> {\n const filePath = join(config.dbDirPath, 'seed.ts');\n\n let content;\n if (config.demoTables) {\n content = `await db.post.findBy({ title: 'Sample post' }).orCreate({\n title: 'Post',\n text: 'This is a text for a sample post. It contains words, spaces, and punctuation.',\n comments: {\n create: [\n {\n text: 'Nice post!',\n },\n {\n text: \\`Too long, didn't read\\`,\n },\n ],\n },\n });`;\n } else {\n content = `// create records here`;\n }\n\n await fs.writeFile(\n filePath,\n `import { db } from './db';\n\nexport const seed = async () => {\n ${content}\n\n await db.$close();\n};\n`,\n );\n}\n","import { InitConfig } from '../../lib';\nimport fs from 'fs/promises';\nimport { join } from 'path';\n\nexport async function setupRunner(config: InitConfig): Promise<void> {\n if (config.runner === 'vite-node') {\n await fs.writeFile(\n join(config.path, 'vite.migrations.mts'),\n `import { resolve } from \"path\";\nimport { defineConfig, PluginOption } from \"vite\";\nimport { nodeExternals } from \"rollup-plugin-node-externals\";\n\nexport default defineConfig({\n plugins: [\n {\n ...nodeExternals(),\n name: \"node-externals\",\n enforce: \"pre\",\n apply: \"build\",\n } as PluginOption\n ],\n build: {\n outDir: resolve(__dirname, \"dist\", \"db\"),\n lib: {\n entry: resolve(__dirname, \"src/db/dbScript.ts\"),\n formats: [\"es\"],\n fileName: \"dbScript\",\n },\n rollupOptions: {\n external: [\"orchid-orm\", \"rake-db\"],\n output: {\n entryFileNames: \"[name].mjs\",\n chunkFileNames: \"[name].[hash].mjs\",\n },\n },\n },\n})\n`,\n );\n } else if (config.runner === 'tsx') {\n await fs.writeFile(\n join(config.path, 'esbuild.migrations.mjs'),\n `import { build } from \"esbuild\";\n\nawait Promise.all([\n build({\n entryPoints: [\"src/db/dbScript.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db\",\n outExtension: { '.js': '.mjs' },\n banner: {\n js: \\`\n import __path from 'node:path';\n import { fileURLToPath as __fileURLToPath } from 'node:url';\n import { createRequire as __createRequire } from 'module';\n const require = __createRequire(import.meta.url);\n const __filename = __fileURLToPath(import.meta.url);\n const __dirname = __path.dirname(__filename);\n \\`,\n },\n }),\n build({\n entryPoints: [\"src/db/migrations/*.ts\"],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n outdir: \"dist/db/migrations\",\n outExtension: { '.js': '.mjs' },\n external: ['../dbScript'],\n plugins: [{\n name: 'add-js-suffix',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n if (args.importer) {\n return { path: args.path + '.mjs', external: true }\n }\n })\n },\n }],\n }),\n]);\n`,\n );\n }\n}\n","import { InitConfig } from '../lib';\nimport fs from 'fs/promises';\nimport { setupPackageJSON } from './init/setupPackageJSON';\nimport { setupTSConfig } from './init/setupTSConfig';\nimport { setupEnv } from './init/setupEnv';\nimport { setupGitIgnore } from './init/setupGitIgnore';\nimport { setupBaseTable } from './init/setupBaseTable';\nimport { setupDemoTables } from './init/setupDemoTables';\nimport { setupConfig } from './init/setupConfig';\nimport { setupMainDb } from './init/setupMainDb';\nimport { setupMigrationScript } from './init/setupMigrationScript';\nimport { createDemoMigrations } from './init/createDemoMigrations';\nimport { createDemoSeed } from './init/createDemoSeed';\nimport { setupRunner } from './init/setupRunner';\n\nexport async function init(config: InitConfig): Promise<void> {\n await fs.mkdir(config.dbDirPath, { recursive: true });\n\n for (const key in initSteps) {\n await initSteps[key as keyof typeof initSteps](config);\n }\n}\n\nexport const initSteps = {\n setupPackageJSON,\n setupTSConfig,\n setupEnv,\n setupGitIgnore,\n setupBaseTable,\n setupDemoTables,\n setupConfig,\n setupMainDb,\n setupMigrationScript,\n createDemoMigrations,\n createDemoSeed,\n setupRunner,\n};\n","import { relative } from 'path';\nimport { InitConfig } from '../lib';\nimport { getPackageManagerName } from './utils';\n\nexport function greetAfterInstall(\n config: InitConfig,\n logger: { log(message: string): void } = console,\n) {\n const relativePath = relative(process.cwd(), config.path);\n const manager = getPackageManagerName();\n const run = manager === 'npm' ? `npm run` : manager;\n\n logger.log(`\nThank you for trying Orchid ORM!\n \nTo finish setup,${\n relativePath ? ` cd to the project and` : ''\n } install dependencies:\n${\n relativePath\n ? `\n> cd ${relativePath}`\n : ''\n}\n> ${manager} i\n\nEnter the correct database credentials to the .env file,\nthen create the database:\n\n> ${run} db create\n\nAnd run the migrations:\n\n> ${run} db migrate\n`);\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-orchid-orm",
3
- "version": "0.0.4",
3
+ "version": "0.1.1",
4
4
  "description": "Initialize Orchid ORM",
5
5
  "license": "ISC",
6
6
  "author": "Roman Kushyn",