create-orchid-orm 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.js CHANGED
@@ -16,16 +16,6 @@ async function readFileSafe(path) {
16
16
  throw err;
17
17
  }
18
18
  }
19
- function makeFileTimeStamp(now) {
20
- return [
21
- now.getUTCFullYear(),
22
- now.getUTCMonth() + 1,
23
- now.getUTCDate(),
24
- now.getUTCHours(),
25
- now.getUTCMinutes(),
26
- now.getUTCSeconds()
27
- ].map((value) => value < 10 ? `0${value}` : value).join("");
28
- }
29
19
  function getLatestPackageVersion(name, kind) {
30
20
  return new Promise((resolve, reject) => {
31
21
  https.get(`https://registry.npmjs.org/${name}/latest`, (res) => {
@@ -207,7 +197,6 @@ async function setupPackageJSON(config) {
207
197
  getLatestPackageVersion("orchid-orm", "dependencies"),
208
198
  config.validation === "zod" ? getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies") : config.validation === "valibot" ? getLatestPackageVersion("orchid-orm-valibot", "dependencies") : void 0,
209
199
  config.validation === "valibot" && getLatestPackageVersion("valibot", "dependencies"),
210
- getLatestPackageVersion("rake-db", "devDependencies"),
211
200
  config.addTestFactory && getLatestPackageVersion("orchid-orm-test-factory", "devDependencies"),
212
201
  getLatestPackageVersion("@types/node", "devDependencies"),
213
202
  getLatestPackageVersion("typescript", "devDependencies"),
@@ -370,7 +359,7 @@ async function setupDemoTables(config) {
370
359
  await fs.mkdir(tablesDir, { recursive: true });
371
360
  await fs.writeFile(
372
361
  path.join(tablesDir, "post.table.ts"),
373
- `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';
362
+ `import { Selectable, Updatable, Insertable, Queryable } from 'orchid-orm';
374
363
  import { BaseTable } from '../baseTable';
375
364
  import { CommentTable } from './comment.table';
376
365
 
@@ -379,7 +368,7 @@ export type Post = Selectable<PostTable>;
379
368
  // Post type for insertion.
380
369
  export type PostNew = Insertable<PostTable>;
381
370
  // Post type for updates.
382
- export type PostUpdate = Updateable<PostTable>;
371
+ export type PostUpdate = Updatable<PostTable>;
383
372
  // Post type used by query methods such as \`where\`.
384
373
  export type PostForQuery = Queryable<PostTable>;
385
374
 
@@ -403,7 +392,7 @@ export class PostTable extends BaseTable {
403
392
  );
404
393
  await fs.writeFile(
405
394
  path.join(tablesDir, "comment.table.ts"),
406
- `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';
395
+ `import { Selectable, Updatable, Insertable, Queryable } from 'orchid-orm';
407
396
  import { BaseTable } from '../baseTable';
408
397
  import { PostTable } from './post.table';
409
398
 
@@ -412,7 +401,7 @@ export type Comment = Selectable<CommentTable>;
412
401
  // Comment type for insertion.
413
402
  export type CommentNew = Insertable<CommentTable>;
414
403
  // Comment type for updates.
415
- export type CommentUpdate = Updateable<CommentTable>;
404
+ export type CommentUpdate = Updatable<CommentTable>;
416
405
  // Comment type used by query methods such as \`where\`.
417
406
  export type CommentForQuery = Queryable<CommentTable>;
418
407
 
@@ -506,23 +495,16 @@ export const db = orchidORM(config.database, {${tables}
506
495
  async function setupMigrationScript(config) {
507
496
  const filePath = path.join(config.dbDirPath, "dbScript.ts");
508
497
  const migrations = config.runner === "vite-node" ? "migrations: import.meta.glob('./migrations/*.ts')" : "migrationsPath: './migrations'";
509
- const useCodeUpdater = config.runner === "vite-node" ? "import.meta.env.DEV" : `process.env.NODE_ENV === 'development'`;
510
498
  await fs.writeFile(
511
499
  filePath,
512
- `import { rakeDb } from 'rake-db';
513
- import { appCodeUpdater } from 'orchid-orm/codegen';
500
+ `import { rakeDb } from 'orchid-orm/migrations';
514
501
  import { config } from './config';
515
502
  import { BaseTable } from './baseTable';
516
503
 
517
504
  export const change = rakeDb(${config.testDatabase ? "config.allDatabases" : "config.database"}, {
518
505
  baseTable: BaseTable,
506
+ dbPath: './db',
519
507
  ${migrations},
520
- appCodeUpdater: appCodeUpdater({
521
- tablePath: (tableName) => \`./tables/\${tableName}.table.ts\`,
522
- ormPath: './db.ts',
523
- }),
524
- // set to false to disable code updater
525
- useCodeUpdater: ${useCodeUpdater},
526
508
  commands: {
527
509
  async seed() {
528
510
  const { seed } = await import('./seed');
@@ -541,10 +523,7 @@ async function createDemoMigrations(config) {
541
523
  if (!config.demoTables)
542
524
  return;
543
525
  const now = /* @__PURE__ */ new Date();
544
- const postPath = path.join(
545
- migrationsPath,
546
- `${makeFileTimeStamp(now)}_createPost.ts`
547
- );
526
+ const postPath = path.join(migrationsPath, `0001_createPost.ts`);
548
527
  await fs.writeFile(
549
528
  postPath,
550
529
  `import { change } from '../dbScript';
@@ -560,10 +539,7 @@ change(async (db) => {
560
539
  `
561
540
  );
562
541
  now.setTime(now.getTime() + 1e3);
563
- const commentPath = path.join(
564
- migrationsPath,
565
- `${makeFileTimeStamp(now)}_createComment.ts`
566
- );
542
+ const commentPath = path.join(migrationsPath, `0002_createComment.ts`);
567
543
  await fs.writeFile(
568
544
  commentPath,
569
545
  `import { change } from '../dbScript';
@@ -639,7 +615,7 @@ export default defineConfig({
639
615
  fileName: "dbScript",
640
616
  },
641
617
  rollupOptions: {
642
- external: ["orchid-orm", "rake-db"],
618
+ external: ["orchid-orm"],
643
619
  output: {
644
620
  entryFileNames: "[name].mjs",
645
621
  chunkFileNames: "[name].[hash].mjs",
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: '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 config.validation === 'valibot' &&\n getLatestPackageVersion('valibot', '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.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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"}
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 } from 'path';\nimport https from 'https';\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 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 config.validation === 'valibot' &&\n getLatestPackageVersion('valibot', 'dependencies'),\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, Updatable, 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 = Updatable<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, Updatable, 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 = Updatable<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 await fs.writeFile(\n filePath,\n `import { rakeDb } from 'orchid-orm/migrations';\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 dbPath: './db',\n ${migrations},\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';\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(migrationsPath, `0001_createPost.ts`);\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(migrationsPath, `0002_createComment.ts`);\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\"],\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.js CHANGED
@@ -15,16 +15,6 @@ async function readFileSafe(path) {
15
15
  throw err;
16
16
  }
17
17
  }
18
- function makeFileTimeStamp(now) {
19
- return [
20
- now.getUTCFullYear(),
21
- now.getUTCMonth() + 1,
22
- now.getUTCDate(),
23
- now.getUTCHours(),
24
- now.getUTCMinutes(),
25
- now.getUTCSeconds()
26
- ].map((value) => value < 10 ? `0${value}` : value).join("");
27
- }
28
18
  function getLatestPackageVersion(name, kind) {
29
19
  return new Promise((resolve, reject) => {
30
20
  https.get(`https://registry.npmjs.org/${name}/latest`, (res) => {
@@ -206,7 +196,6 @@ async function setupPackageJSON(config) {
206
196
  getLatestPackageVersion("orchid-orm", "dependencies"),
207
197
  config.validation === "zod" ? getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies") : config.validation === "valibot" ? getLatestPackageVersion("orchid-orm-valibot", "dependencies") : void 0,
208
198
  config.validation === "valibot" && getLatestPackageVersion("valibot", "dependencies"),
209
- getLatestPackageVersion("rake-db", "devDependencies"),
210
199
  config.addTestFactory && getLatestPackageVersion("orchid-orm-test-factory", "devDependencies"),
211
200
  getLatestPackageVersion("@types/node", "devDependencies"),
212
201
  getLatestPackageVersion("typescript", "devDependencies"),
@@ -369,7 +358,7 @@ async function setupDemoTables(config) {
369
358
  await fs.mkdir(tablesDir, { recursive: true });
370
359
  await fs.writeFile(
371
360
  path.join(tablesDir, "post.table.ts"),
372
- `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';
361
+ `import { Selectable, Updatable, Insertable, Queryable } from 'orchid-orm';
373
362
  import { BaseTable } from '../baseTable';
374
363
  import { CommentTable } from './comment.table';
375
364
 
@@ -378,7 +367,7 @@ export type Post = Selectable<PostTable>;
378
367
  // Post type for insertion.
379
368
  export type PostNew = Insertable<PostTable>;
380
369
  // Post type for updates.
381
- export type PostUpdate = Updateable<PostTable>;
370
+ export type PostUpdate = Updatable<PostTable>;
382
371
  // Post type used by query methods such as \`where\`.
383
372
  export type PostForQuery = Queryable<PostTable>;
384
373
 
@@ -402,7 +391,7 @@ export class PostTable extends BaseTable {
402
391
  );
403
392
  await fs.writeFile(
404
393
  path.join(tablesDir, "comment.table.ts"),
405
- `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';
394
+ `import { Selectable, Updatable, Insertable, Queryable } from 'orchid-orm';
406
395
  import { BaseTable } from '../baseTable';
407
396
  import { PostTable } from './post.table';
408
397
 
@@ -411,7 +400,7 @@ export type Comment = Selectable<CommentTable>;
411
400
  // Comment type for insertion.
412
401
  export type CommentNew = Insertable<CommentTable>;
413
402
  // Comment type for updates.
414
- export type CommentUpdate = Updateable<CommentTable>;
403
+ export type CommentUpdate = Updatable<CommentTable>;
415
404
  // Comment type used by query methods such as \`where\`.
416
405
  export type CommentForQuery = Queryable<CommentTable>;
417
406
 
@@ -505,23 +494,16 @@ export const db = orchidORM(config.database, {${tables}
505
494
  async function setupMigrationScript(config) {
506
495
  const filePath = path.join(config.dbDirPath, "dbScript.ts");
507
496
  const migrations = config.runner === "vite-node" ? "migrations: import.meta.glob('./migrations/*.ts')" : "migrationsPath: './migrations'";
508
- const useCodeUpdater = config.runner === "vite-node" ? "import.meta.env.DEV" : `process.env.NODE_ENV === 'development'`;
509
497
  await fs.writeFile(
510
498
  filePath,
511
- `import { rakeDb } from 'rake-db';
512
- import { appCodeUpdater } from 'orchid-orm/codegen';
499
+ `import { rakeDb } from 'orchid-orm/migrations';
513
500
  import { config } from './config';
514
501
  import { BaseTable } from './baseTable';
515
502
 
516
503
  export const change = rakeDb(${config.testDatabase ? "config.allDatabases" : "config.database"}, {
517
504
  baseTable: BaseTable,
505
+ dbPath: './db',
518
506
  ${migrations},
519
- appCodeUpdater: appCodeUpdater({
520
- tablePath: (tableName) => \`./tables/\${tableName}.table.ts\`,
521
- ormPath: './db.ts',
522
- }),
523
- // set to false to disable code updater
524
- useCodeUpdater: ${useCodeUpdater},
525
507
  commands: {
526
508
  async seed() {
527
509
  const { seed } = await import('./seed');
@@ -540,10 +522,7 @@ async function createDemoMigrations(config) {
540
522
  if (!config.demoTables)
541
523
  return;
542
524
  const now = /* @__PURE__ */ new Date();
543
- const postPath = path.join(
544
- migrationsPath,
545
- `${makeFileTimeStamp(now)}_createPost.ts`
546
- );
525
+ const postPath = path.join(migrationsPath, `0001_createPost.ts`);
547
526
  await fs.writeFile(
548
527
  postPath,
549
528
  `import { change } from '../dbScript';
@@ -559,10 +538,7 @@ change(async (db) => {
559
538
  `
560
539
  );
561
540
  now.setTime(now.getTime() + 1e3);
562
- const commentPath = path.join(
563
- migrationsPath,
564
- `${makeFileTimeStamp(now)}_createComment.ts`
565
- );
541
+ const commentPath = path.join(migrationsPath, `0002_createComment.ts`);
566
542
  await fs.writeFile(
567
543
  commentPath,
568
544
  `import { change } from '../dbScript';
@@ -638,7 +614,7 @@ export default defineConfig({
638
614
  fileName: "dbScript",
639
615
  },
640
616
  rollupOptions: {
641
- external: ["orchid-orm", "rake-db"],
617
+ external: ["orchid-orm"],
642
618
  output: {
643
619
  entryFileNames: "[name].mjs",
644
620
  chunkFileNames: "[name].[hash].mjs",
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: '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 config.validation === 'valibot' &&\n getLatestPackageVersion('valibot', '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.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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"}
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 } from 'path';\nimport https from 'https';\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 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 config.validation === 'valibot' &&\n getLatestPackageVersion('valibot', 'dependencies'),\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, Updatable, 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 = Updatable<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, Updatable, 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 = Updatable<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 await fs.writeFile(\n filePath,\n `import { rakeDb } from 'orchid-orm/migrations';\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 dbPath: './db',\n ${migrations},\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';\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(migrationsPath, `0001_createPost.ts`);\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(migrationsPath, `0002_createComment.ts`);\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\"],\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
@@ -13,16 +13,6 @@ async function readFileSafe(path) {
13
13
  throw err;
14
14
  }
15
15
  }
16
- function makeFileTimeStamp(now) {
17
- return [
18
- now.getUTCFullYear(),
19
- now.getUTCMonth() + 1,
20
- now.getUTCDate(),
21
- now.getUTCHours(),
22
- now.getUTCMinutes(),
23
- now.getUTCSeconds()
24
- ].map((value) => value < 10 ? `0${value}` : value).join("");
25
- }
26
16
  function getLatestPackageVersion(name, kind) {
27
17
  return new Promise((resolve, reject) => {
28
18
  https.get(`https://registry.npmjs.org/${name}/latest`, (res) => {
@@ -204,7 +194,6 @@ async function setupPackageJSON(config) {
204
194
  getLatestPackageVersion("orchid-orm", "dependencies"),
205
195
  config.validation === "zod" ? getLatestPackageVersion("orchid-orm-schema-to-zod", "dependencies") : config.validation === "valibot" ? getLatestPackageVersion("orchid-orm-valibot", "dependencies") : void 0,
206
196
  config.validation === "valibot" && getLatestPackageVersion("valibot", "dependencies"),
207
- getLatestPackageVersion("rake-db", "devDependencies"),
208
197
  config.addTestFactory && getLatestPackageVersion("orchid-orm-test-factory", "devDependencies"),
209
198
  getLatestPackageVersion("@types/node", "devDependencies"),
210
199
  getLatestPackageVersion("typescript", "devDependencies"),
@@ -367,7 +356,7 @@ async function setupDemoTables(config) {
367
356
  await fs.mkdir(tablesDir, { recursive: true });
368
357
  await fs.writeFile(
369
358
  join(tablesDir, "post.table.ts"),
370
- `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';
359
+ `import { Selectable, Updatable, Insertable, Queryable } from 'orchid-orm';
371
360
  import { BaseTable } from '../baseTable';
372
361
  import { CommentTable } from './comment.table';
373
362
 
@@ -376,7 +365,7 @@ export type Post = Selectable<PostTable>;
376
365
  // Post type for insertion.
377
366
  export type PostNew = Insertable<PostTable>;
378
367
  // Post type for updates.
379
- export type PostUpdate = Updateable<PostTable>;
368
+ export type PostUpdate = Updatable<PostTable>;
380
369
  // Post type used by query methods such as \`where\`.
381
370
  export type PostForQuery = Queryable<PostTable>;
382
371
 
@@ -400,7 +389,7 @@ export class PostTable extends BaseTable {
400
389
  );
401
390
  await fs.writeFile(
402
391
  join(tablesDir, "comment.table.ts"),
403
- `import { Selectable, Updateable, Insertable, Queryable } from 'orchid-orm';
392
+ `import { Selectable, Updatable, Insertable, Queryable } from 'orchid-orm';
404
393
  import { BaseTable } from '../baseTable';
405
394
  import { PostTable } from './post.table';
406
395
 
@@ -409,7 +398,7 @@ export type Comment = Selectable<CommentTable>;
409
398
  // Comment type for insertion.
410
399
  export type CommentNew = Insertable<CommentTable>;
411
400
  // Comment type for updates.
412
- export type CommentUpdate = Updateable<CommentTable>;
401
+ export type CommentUpdate = Updatable<CommentTable>;
413
402
  // Comment type used by query methods such as \`where\`.
414
403
  export type CommentForQuery = Queryable<CommentTable>;
415
404
 
@@ -503,23 +492,16 @@ export const db = orchidORM(config.database, {${tables}
503
492
  async function setupMigrationScript(config) {
504
493
  const filePath = join(config.dbDirPath, "dbScript.ts");
505
494
  const migrations = config.runner === "vite-node" ? "migrations: import.meta.glob('./migrations/*.ts')" : "migrationsPath: './migrations'";
506
- const useCodeUpdater = config.runner === "vite-node" ? "import.meta.env.DEV" : `process.env.NODE_ENV === 'development'`;
507
495
  await fs.writeFile(
508
496
  filePath,
509
- `import { rakeDb } from 'rake-db';
510
- import { appCodeUpdater } from 'orchid-orm/codegen';
497
+ `import { rakeDb } from 'orchid-orm/migrations';
511
498
  import { config } from './config';
512
499
  import { BaseTable } from './baseTable';
513
500
 
514
501
  export const change = rakeDb(${config.testDatabase ? "config.allDatabases" : "config.database"}, {
515
502
  baseTable: BaseTable,
503
+ dbPath: './db',
516
504
  ${migrations},
517
- appCodeUpdater: appCodeUpdater({
518
- tablePath: (tableName) => \`./tables/\${tableName}.table.ts\`,
519
- ormPath: './db.ts',
520
- }),
521
- // set to false to disable code updater
522
- useCodeUpdater: ${useCodeUpdater},
523
505
  commands: {
524
506
  async seed() {
525
507
  const { seed } = await import('./seed');
@@ -538,10 +520,7 @@ async function createDemoMigrations(config) {
538
520
  if (!config.demoTables)
539
521
  return;
540
522
  const now = /* @__PURE__ */ new Date();
541
- const postPath = join(
542
- migrationsPath,
543
- `${makeFileTimeStamp(now)}_createPost.ts`
544
- );
523
+ const postPath = join(migrationsPath, `0001_createPost.ts`);
545
524
  await fs.writeFile(
546
525
  postPath,
547
526
  `import { change } from '../dbScript';
@@ -557,10 +536,7 @@ change(async (db) => {
557
536
  `
558
537
  );
559
538
  now.setTime(now.getTime() + 1e3);
560
- const commentPath = join(
561
- migrationsPath,
562
- `${makeFileTimeStamp(now)}_createComment.ts`
563
- );
539
+ const commentPath = join(migrationsPath, `0002_createComment.ts`);
564
540
  await fs.writeFile(
565
541
  commentPath,
566
542
  `import { change } from '../dbScript';
@@ -636,7 +612,7 @@ export default defineConfig({
636
612
  fileName: "dbScript",
637
613
  },
638
614
  rollupOptions: {
639
- external: ["orchid-orm", "rake-db"],
615
+ external: ["orchid-orm"],
640
616
  output: {
641
617
  entryFileNames: "[name].mjs",
642
618
  chunkFileNames: "[name].[hash].mjs",
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: '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 config.validation === 'valibot' &&\n getLatestPackageVersion('valibot', '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.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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"}
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 } from 'path';\nimport https from 'https';\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 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 config.validation === 'valibot' &&\n getLatestPackageVersion('valibot', 'dependencies'),\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, Updatable, 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 = Updatable<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, Updatable, 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 = Updatable<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 await fs.writeFile(\n filePath,\n `import { rakeDb } from 'orchid-orm/migrations';\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 dbPath: './db',\n ${migrations},\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';\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(migrationsPath, `0001_createPost.ts`);\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(migrationsPath, `0002_createComment.ts`);\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\"],\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.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Initialize Orchid ORM",
5
5
  "license": "ISC",
6
6
  "author": "Roman Kushyn",