orchid-orm 1.15.2 → 1.16.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 +8 -12
- package/dist/bin.js.map +1 -1
- package/dist/index.d.ts +34 -36
- package/dist/index.js +18 -24
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +22 -28
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/bin.js
CHANGED
|
@@ -223,7 +223,8 @@ node_modules`;
|
|
|
223
223
|
};
|
|
224
224
|
const setupBaseTable = async (config, dirPath) => {
|
|
225
225
|
const filePath = path.join(dirPath, "baseTable.ts");
|
|
226
|
-
let content = `import { createBaseTable } from 'orchid-orm'
|
|
226
|
+
let content = `import { createBaseTable } from 'orchid-orm';${config.addSchemaToZod ? `
|
|
227
|
+
import { zodSchemaProvider } from 'orchid-orm-schema-to-zod';` : ""}
|
|
227
228
|
|
|
228
229
|
export const BaseTable = createBaseTable({
|
|
229
230
|
columnTypes: (t) => ({
|
|
@@ -236,7 +237,8 @@ export const BaseTable = createBaseTable({
|
|
|
236
237
|
t.timestamp<P>(precision).${timestamp === "date" ? "asDate" : "asNumber"}(),`;
|
|
237
238
|
}
|
|
238
239
|
content += `
|
|
239
|
-
})
|
|
240
|
+
}),${config.addSchemaToZod ? `
|
|
241
|
+
schemaProvider: zodSchemaProvider,` : ""}
|
|
240
242
|
});
|
|
241
243
|
`;
|
|
242
244
|
await fs.writeFile(filePath, content);
|
|
@@ -251,8 +253,7 @@ const setupTables = async (config, dirPath) => {
|
|
|
251
253
|
`import { TableType } from 'orchid-orm';
|
|
252
254
|
import { BaseTable } from '../baseTable';
|
|
253
255
|
import { CommentTable } from './comment.table';
|
|
254
|
-
|
|
255
|
-
` : ""}
|
|
256
|
+
|
|
256
257
|
export type Post = TableType<PostTable>;
|
|
257
258
|
export class PostTable extends BaseTable {
|
|
258
259
|
readonly table = 'post';
|
|
@@ -270,17 +271,14 @@ export class PostTable extends BaseTable {
|
|
|
270
271
|
}),
|
|
271
272
|
};
|
|
272
273
|
}
|
|
273
|
-
|
|
274
|
-
export const postSchema = tableToZod(PostTable);
|
|
275
|
-
` : ""}`
|
|
274
|
+
`
|
|
276
275
|
);
|
|
277
276
|
await fs.writeFile(
|
|
278
277
|
path.join(tablesDir, "comment.table.ts"),
|
|
279
278
|
`import { TableType } from 'orchid-orm';
|
|
280
279
|
import { BaseTable } from '../baseTable';
|
|
281
280
|
import { PostTable } from './post.table';
|
|
282
|
-
|
|
283
|
-
` : ""}
|
|
281
|
+
|
|
284
282
|
export type Comment = TableType<CommentTable>;
|
|
285
283
|
export class CommentTable extends BaseTable {
|
|
286
284
|
readonly table = 'comment';
|
|
@@ -301,9 +299,7 @@ export class CommentTable extends BaseTable {
|
|
|
301
299
|
}),
|
|
302
300
|
};
|
|
303
301
|
}
|
|
304
|
-
|
|
305
|
-
export const commentSchema = tableToZod(CommentTable);
|
|
306
|
-
` : ""}`
|
|
302
|
+
`
|
|
307
303
|
);
|
|
308
304
|
};
|
|
309
305
|
const setupConfig = async (config, dirPath) => {
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sources":["../src/bin/init.ts","../src/bin/bin.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { resolve, join, relative } from 'path';\nimport https from 'https';\nimport prompts from 'prompts';\n\nexport type InitConfig = {\n path: string;\n hasTsConfig: boolean;\n testDatabase?: boolean;\n addSchemaToZod?: boolean;\n addTestFactory?: boolean;\n demoTables?: boolean;\n timestamp?: 'date' | 'number';\n swc?: boolean;\n};\n\ntype DependencyKind = 'dependencies' | 'devDependencies';\n\nexport const askOrchidORMConfig = async () => {\n let cancelled = false;\n\n const response = await prompts(\n [\n {\n type: 'text',\n name: 'path',\n message: 'Where would you like to install Orchid ORM?',\n initial: process.cwd(),\n },\n {\n type: 'select',\n name: 'timestamp',\n message: 'Preferred type of returned timestamps:',\n choices: [\n {\n title: 'string (as returned from db)',\n },\n {\n title: 'number (epoch)',\n value: 'number',\n },\n {\n title: 'Date object',\n value: 'date',\n },\n ],\n },\n {\n type: 'confirm',\n name: 'testDatabase',\n message: 'Should I add a separate database for tests?',\n },\n {\n type: 'confirm',\n name: 'addSchemaToZod',\n message: 'Are you going to use Zod for validation?',\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Do you want object factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Should I add demo tables?',\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (cancelled) return;\n\n const tsConfigPath = join(response.path, 'tsconfig.json');\n const hasTsConfig = await readFileSafe(tsConfigPath);\n (response as InitConfig).hasTsConfig = !!hasTsConfig;\n\n if (!hasTsConfig) {\n const res = await prompts(\n [\n {\n type: 'confirm',\n name: 'swc',\n initial: true,\n message: `Let's add fast TS compiler swc?`,\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (cancelled) return;\n\n (response as InitConfig).swc = res.swc;\n }\n\n return response as InitConfig;\n};\n\nexport const initOrchidORM = async (config: InitConfig) => {\n config.path = resolve(config.path);\n const dirPath = join(config.path, 'src', 'db');\n\n await fs.mkdir(dirPath, { recursive: true });\n\n await setupPackageJson(config);\n await setupTSConfig(config);\n await setupEnv(config);\n await setupGitIgnore(config);\n await setupBaseTable(config, dirPath);\n await setupTables(config, dirPath);\n await setupConfig(config, dirPath);\n await setupMainDb(config, dirPath);\n await setupMigrationScript(config, dirPath);\n await createMigrations(config, dirPath);\n await createSeed(config, dirPath);\n\n greet(config);\n};\n\nconst setupPackageJson = async (config: InitConfig) => {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', 'dependencies'),\n getLatestPackageVersion('pqb', 'dependencies'),\n config.addSchemaToZod &&\n getLatestPackageVersion('orchid-orm-schema-to-zod', 'dependencies'),\n getLatestPackageVersion('rake-db', 'devDependencies'),\n config.addTestFactory &&\n getLatestPackageVersion('orchid-orm-test-factory', 'devDependencies'),\n config.swc && getLatestPackageVersion('@swc/core', 'devDependencies'),\n getLatestPackageVersion('@types/node', 'devDependencies'),\n getLatestPackageVersion('ts-node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n ]);\n\n const deps: Record<string, string> = {};\n const devDeps: Record<string, string> = {};\n for (const item of pairs) {\n if (!item) continue;\n const [key, { version, kind }] = item;\n (kind === 'dependencies' ? deps : devDeps)[key] = version;\n }\n\n const packageJsonPath = join(config.path, 'package.json');\n const content = await readFileSafe(packageJsonPath);\n const json = content ? JSON.parse(content) : {};\n\n if (!json.scripts) json.scripts = {};\n json.scripts.db = 'ts-node src/db/dbScript.ts';\n\n if (!json.dependencies) json.dependencies = {};\n\n for (const key in deps) {\n json.dependencies[key] = deps[key];\n }\n\n if (!json.devDependencies) json.devDependencies = {};\n for (const key in devDeps) {\n json.devDependencies[key] = devDeps[key];\n }\n\n await fs.writeFile(packageJsonPath, JSON.stringify(json, null, ' ') + '\\n');\n};\n\nconst getLatestPackageVersion = (\n name: string,\n kind: DependencyKind,\n): Promise<[string, { version: string; kind: DependencyKind }]> => {\n return new Promise((resolve, reject) => {\n https\n .get(`https://registry.npmjs.org/${name}/latest`, (res) => {\n let data = '';\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () =>\n resolve([name, { version: `^${JSON.parse(data).version}`, kind }]),\n );\n })\n .on('error', reject);\n });\n};\n\nconst readFileSafe = async (path: string) => {\n try {\n return await fs.readFile(path, 'utf-8');\n } catch (err) {\n if ((err as unknown as { code: string }).code === 'ENOENT') {\n return undefined;\n }\n throw err;\n }\n};\n\nconst setupTSConfig = async (config: InitConfig) => {\n if (config.hasTsConfig) return;\n\n const tsConfigPath = join(config.path, 'tsconfig.json');\n await fs.writeFile(\n tsConfigPath,\n `{${\n config.swc\n ? `\n \"ts-node\": {\n \"swc\": true\n },`\n : ''\n }\n \"compilerOptions\": {\n \"strict\": true\n }\n}\n`,\n );\n};\n\nconst setupEnv = async (config: InitConfig) => {\n const envPath = join(config.path, '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://user:password@localhost:5432/dbname?ssl=false`;\n changed = true;\n }\n\n if (config.testDatabase && !content.match(/^DATABASE_TEST_URL=/m)) {\n content += `\\nDATABASE_TEST_URL=postgres://user:password@localhost:5432/dbname-test?ssl=false`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(envPath, `${content.trim()}\\n`);\n }\n};\n\nconst setupGitIgnore = async (config: InitConfig) => {\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 changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n};\n\nconst setupBaseTable = async (config: InitConfig, dirPath: string) => {\n const filePath = join(dirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';\n\nexport const BaseTable = createBaseTable({\n columnTypes: (t) => ({\n ...t,\n text: (min = 0, max = Infinity) => t.text(min, max),`;\n\n const { timestamp } = config;\n if (timestamp) {\n content += `\n timestamp: <P extends number>(precision?: P) =>\n t.timestamp<P>(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),\n});\n`;\n\n await fs.writeFile(filePath, content);\n};\n\nconst setupTables = async (config: InitConfig, dirPath: string) => {\n if (!config.demoTables) return;\n\n const tablesDir = join(dirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n join(tablesDir, 'post.table.ts'),\n `import { TableType } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n${\n config.addSchemaToZod\n ? `import { tableToZod } from 'orchid-orm-schema-to-zod';\\n`\n : ''\n}\nexport type Post = TableType<PostTable>;\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 config.addSchemaToZod\n ? `\\nexport const postSchema = tableToZod(PostTable);\\n`\n : ''\n}`,\n );\n\n await fs.writeFile(\n join(tablesDir, 'comment.table.ts'),\n `import { TableType } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n${\n config.addSchemaToZod\n ? `import { tableToZod } from 'orchid-orm-schema-to-zod';\\n`\n : ''\n}\nexport type Comment = TableType<CommentTable>;\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 config.addSchemaToZod\n ? `\\nexport const commentSchema = tableToZod(CommentTable);\\n`\n : ''\n}`,\n );\n};\n\nconst setupConfig = async (config: InitConfig, dirPath: string) => {\n const configPath = join(dirPath, 'config.ts');\n\n let content = `import 'dotenv/config';\n\nconst database = {\n databaseURL: process.env.DATABASE_URL,\n};\nif (!database.databaseURL) throw new Error('DATABASE_URL is missing in .env');`;\n\n if (config.testDatabase) {\n content += `\n\nconst testDatabase = {\n databaseURL: process.env.DATABASE_TEST_URL,\n};\n\nconst allDatabases = [database];\n\nif (testDatabase.databaseURL) {\n allDatabases.push(testDatabase);\n}`;\n }\n\n content += `\n\nexport const config = {`;\n\n if (config.testDatabase) {\n content += `\n allDatabases,`;\n }\n\n if (config.testDatabase) {\n content += `\n database: process.env.NODE_ENV === 'test' ? testDatabase : database,`;\n } else {\n content += `\n database,`;\n }\n content += `\n};\n`;\n\n await fs.writeFile(configPath, content);\n};\n\nconst setupMainDb = async (config: InitConfig, dirPath: string) => {\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(dirPath, 'db.ts');\n await fs.writeFile(\n dbPath,\n `import { orchidORM } from 'orchid-orm';\nimport { config } from './config';${imports}\n\nexport const db = orchidORM(config.database, {${tables}\n});\n`,\n );\n};\n\nconst setupMigrationScript = async (config: InitConfig, dirPath: string) => {\n const filePath = join(dirPath, 'dbScript.ts');\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 migrationsPath: './migrations',\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`./tables/\\${tableName}.table.ts\\`,\n ormPath: './db.ts',\n }),\n useCodeUpdater: true, // set to false to disable code updater\n commands: {\n async seed() {\n const { seed } = await import('./seed');\n await seed();\n },\n },\n import: (path) => import(path),\n});\n`,\n );\n};\n\nconst createMigrations = async (config: InitConfig, dirPath: string) => {\n const migrationsPath = join(dirPath, '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\nconst makeFileTimeStamp = (now: Date) => {\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst createSeed = async (config: InitConfig, dirPath: string) => {\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\nconst greet = (config: InitConfig) => {\n const relativePath = relative(process.cwd(), config.path);\n\n console.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> npm i\n\nEnter the correct database credentials to the .env file,\nthen create the database:\n\n> npm run db create\n\nAnd run the migrations:\n\n> npm run db migrate\n`);\n};\n","import { askOrchidORMConfig, initOrchidORM } from './init';\n\naskOrchidORMConfig().then((config) => {\n if (config) initOrchidORM(config);\n});\n"],"names":["join","resolve","relative"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bin.js","sources":["../src/bin/init.ts","../src/bin/bin.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { resolve, join, relative } from 'path';\nimport https from 'https';\nimport prompts from 'prompts';\n\nexport type InitConfig = {\n path: string;\n hasTsConfig: boolean;\n testDatabase?: boolean;\n addSchemaToZod?: boolean;\n addTestFactory?: boolean;\n demoTables?: boolean;\n timestamp?: 'date' | 'number';\n swc?: boolean;\n};\n\ntype DependencyKind = 'dependencies' | 'devDependencies';\n\nexport const askOrchidORMConfig = async () => {\n let cancelled = false;\n\n const response = await prompts(\n [\n {\n type: 'text',\n name: 'path',\n message: 'Where would you like to install Orchid ORM?',\n initial: process.cwd(),\n },\n {\n type: 'select',\n name: 'timestamp',\n message: 'Preferred type of returned timestamps:',\n choices: [\n {\n title: 'string (as returned from db)',\n },\n {\n title: 'number (epoch)',\n value: 'number',\n },\n {\n title: 'Date object',\n value: 'date',\n },\n ],\n },\n {\n type: 'confirm',\n name: 'testDatabase',\n message: 'Should I add a separate database for tests?',\n },\n {\n type: 'confirm',\n name: 'addSchemaToZod',\n message: 'Are you going to use Zod for validation?',\n },\n {\n type: 'confirm',\n name: 'addTestFactory',\n message: 'Do you want object factories for writing tests?',\n },\n {\n type: 'confirm',\n name: 'demoTables',\n message: 'Should I add demo tables?',\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (cancelled) return;\n\n const tsConfigPath = join(response.path, 'tsconfig.json');\n const hasTsConfig = await readFileSafe(tsConfigPath);\n (response as InitConfig).hasTsConfig = !!hasTsConfig;\n\n if (!hasTsConfig) {\n const res = await prompts(\n [\n {\n type: 'confirm',\n name: 'swc',\n initial: true,\n message: `Let's add fast TS compiler swc?`,\n },\n ],\n {\n onCancel() {\n cancelled = true;\n },\n },\n );\n\n if (cancelled) return;\n\n (response as InitConfig).swc = res.swc;\n }\n\n return response as InitConfig;\n};\n\nexport const initOrchidORM = async (config: InitConfig) => {\n config.path = resolve(config.path);\n const dirPath = join(config.path, 'src', 'db');\n\n await fs.mkdir(dirPath, { recursive: true });\n\n await setupPackageJson(config);\n await setupTSConfig(config);\n await setupEnv(config);\n await setupGitIgnore(config);\n await setupBaseTable(config, dirPath);\n await setupTables(config, dirPath);\n await setupConfig(config, dirPath);\n await setupMainDb(config, dirPath);\n await setupMigrationScript(config, dirPath);\n await createMigrations(config, dirPath);\n await createSeed(config, dirPath);\n\n greet(config);\n};\n\nconst setupPackageJson = async (config: InitConfig) => {\n const pairs = await Promise.all([\n getLatestPackageVersion('dotenv', 'dependencies'),\n getLatestPackageVersion('orchid-orm', 'dependencies'),\n getLatestPackageVersion('pqb', 'dependencies'),\n config.addSchemaToZod &&\n getLatestPackageVersion('orchid-orm-schema-to-zod', 'dependencies'),\n getLatestPackageVersion('rake-db', 'devDependencies'),\n config.addTestFactory &&\n getLatestPackageVersion('orchid-orm-test-factory', 'devDependencies'),\n config.swc && getLatestPackageVersion('@swc/core', 'devDependencies'),\n getLatestPackageVersion('@types/node', 'devDependencies'),\n getLatestPackageVersion('ts-node', 'devDependencies'),\n getLatestPackageVersion('typescript', 'devDependencies'),\n ]);\n\n const deps: Record<string, string> = {};\n const devDeps: Record<string, string> = {};\n for (const item of pairs) {\n if (!item) continue;\n const [key, { version, kind }] = item;\n (kind === 'dependencies' ? deps : devDeps)[key] = version;\n }\n\n const packageJsonPath = join(config.path, 'package.json');\n const content = await readFileSafe(packageJsonPath);\n const json = content ? JSON.parse(content) : {};\n\n if (!json.scripts) json.scripts = {};\n json.scripts.db = 'ts-node src/db/dbScript.ts';\n\n if (!json.dependencies) json.dependencies = {};\n\n for (const key in deps) {\n json.dependencies[key] = deps[key];\n }\n\n if (!json.devDependencies) json.devDependencies = {};\n for (const key in devDeps) {\n json.devDependencies[key] = devDeps[key];\n }\n\n await fs.writeFile(packageJsonPath, JSON.stringify(json, null, ' ') + '\\n');\n};\n\nconst getLatestPackageVersion = (\n name: string,\n kind: DependencyKind,\n): Promise<[string, { version: string; kind: DependencyKind }]> => {\n return new Promise((resolve, reject) => {\n https\n .get(`https://registry.npmjs.org/${name}/latest`, (res) => {\n let data = '';\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () =>\n resolve([name, { version: `^${JSON.parse(data).version}`, kind }]),\n );\n })\n .on('error', reject);\n });\n};\n\nconst readFileSafe = async (path: string) => {\n try {\n return await fs.readFile(path, 'utf-8');\n } catch (err) {\n if ((err as unknown as { code: string }).code === 'ENOENT') {\n return undefined;\n }\n throw err;\n }\n};\n\nconst setupTSConfig = async (config: InitConfig) => {\n if (config.hasTsConfig) return;\n\n const tsConfigPath = join(config.path, 'tsconfig.json');\n await fs.writeFile(\n tsConfigPath,\n `{${\n config.swc\n ? `\n \"ts-node\": {\n \"swc\": true\n },`\n : ''\n }\n \"compilerOptions\": {\n \"strict\": true\n }\n}\n`,\n );\n};\n\nconst setupEnv = async (config: InitConfig) => {\n const envPath = join(config.path, '.env');\n let content = ((await readFileSafe(envPath)) || '').trim();\n let changed = false;\n\n if (!content.match(/^DATABASE_URL=/m)) {\n content += `\\nDATABASE_URL=postgres://user:password@localhost:5432/dbname?ssl=false`;\n changed = true;\n }\n\n if (config.testDatabase && !content.match(/^DATABASE_TEST_URL=/m)) {\n content += `\\nDATABASE_TEST_URL=postgres://user:password@localhost:5432/dbname-test?ssl=false`;\n changed = true;\n }\n\n if (changed) {\n await fs.writeFile(envPath, `${content.trim()}\\n`);\n }\n};\n\nconst setupGitIgnore = async (config: InitConfig) => {\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 changed = true;\n }\n\n if (changed) {\n await fs.writeFile(gitignorePath, `${content.trim()}\\n`);\n }\n};\n\nconst setupBaseTable = async (config: InitConfig, dirPath: string) => {\n const filePath = join(dirPath, 'baseTable.ts');\n\n let content = `import { createBaseTable } from 'orchid-orm';${\n config.addSchemaToZod\n ? `\\nimport { zodSchemaProvider } from 'orchid-orm-schema-to-zod';`\n : ''\n }\n\nexport const BaseTable = createBaseTable({\n columnTypes: (t) => ({\n ...t,\n text: (min = 0, max = Infinity) => t.text(min, max),`;\n\n const { timestamp } = config;\n if (timestamp) {\n content += `\n timestamp: <P extends number>(precision?: P) =>\n t.timestamp<P>(precision).${\n timestamp === 'date' ? 'asDate' : 'asNumber'\n }(),`;\n }\n\n content += `\n }),${\n config.addSchemaToZod\n ? `\n schemaProvider: zodSchemaProvider,`\n : ''\n }\n});\n`;\n\n await fs.writeFile(filePath, content);\n};\n\nconst setupTables = async (config: InitConfig, dirPath: string) => {\n if (!config.demoTables) return;\n\n const tablesDir = join(dirPath, 'tables');\n await fs.mkdir(tablesDir, { recursive: true });\n\n await fs.writeFile(\n join(tablesDir, 'post.table.ts'),\n `import { TableType } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { CommentTable } from './comment.table';\n\nexport type Post = TableType<PostTable>;\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 { TableType } from 'orchid-orm';\nimport { BaseTable } from '../baseTable';\nimport { PostTable } from './post.table';\n\nexport type Comment = TableType<CommentTable>;\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\nconst setupConfig = async (config: InitConfig, dirPath: string) => {\n const configPath = join(dirPath, 'config.ts');\n\n let content = `import 'dotenv/config';\n\nconst database = {\n databaseURL: process.env.DATABASE_URL,\n};\nif (!database.databaseURL) throw new Error('DATABASE_URL is missing in .env');`;\n\n if (config.testDatabase) {\n content += `\n\nconst testDatabase = {\n databaseURL: process.env.DATABASE_TEST_URL,\n};\n\nconst allDatabases = [database];\n\nif (testDatabase.databaseURL) {\n allDatabases.push(testDatabase);\n}`;\n }\n\n content += `\n\nexport const config = {`;\n\n if (config.testDatabase) {\n content += `\n allDatabases,`;\n }\n\n if (config.testDatabase) {\n content += `\n database: process.env.NODE_ENV === 'test' ? testDatabase : database,`;\n } else {\n content += `\n database,`;\n }\n content += `\n};\n`;\n\n await fs.writeFile(configPath, content);\n};\n\nconst setupMainDb = async (config: InitConfig, dirPath: string) => {\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(dirPath, 'db.ts');\n await fs.writeFile(\n dbPath,\n `import { orchidORM } from 'orchid-orm';\nimport { config } from './config';${imports}\n\nexport const db = orchidORM(config.database, {${tables}\n});\n`,\n );\n};\n\nconst setupMigrationScript = async (config: InitConfig, dirPath: string) => {\n const filePath = join(dirPath, 'dbScript.ts');\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 migrationsPath: './migrations',\n appCodeUpdater: appCodeUpdater({\n tablePath: (tableName) => \\`./tables/\\${tableName}.table.ts\\`,\n ormPath: './db.ts',\n }),\n useCodeUpdater: true, // set to false to disable code updater\n commands: {\n async seed() {\n const { seed } = await import('./seed');\n await seed();\n },\n },\n import: (path) => import(path),\n});\n`,\n );\n};\n\nconst createMigrations = async (config: InitConfig, dirPath: string) => {\n const migrationsPath = join(dirPath, '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\nconst makeFileTimeStamp = (now: Date) => {\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst createSeed = async (config: InitConfig, dirPath: string) => {\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\nconst greet = (config: InitConfig) => {\n const relativePath = relative(process.cwd(), config.path);\n\n console.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> npm i\n\nEnter the correct database credentials to the .env file,\nthen create the database:\n\n> npm run db create\n\nAnd run the migrations:\n\n> npm run db migrate\n`);\n};\n","import { askOrchidORMConfig, initOrchidORM } from './init';\n\naskOrchidORMConfig().then((config) => {\n if (config) initOrchidORM(config);\n});\n"],"names":["join","resolve","relative"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as pqb from 'pqb';
|
|
2
|
-
import { Query, QueryWithTable, SetQueryTableAlias, WhereArg, UpdateData, CreateData, Db, IsolationLevel, TransactionOptions, Adapter, FromArgs, FromResult, AdapterOptions, QueryLogOptions, NoPrimaryKeyOption, RelationConfigBase, RelationQuery, SetQueryReturnsOne, SetQueryReturnsOneOptional, SetQueryReturnsAll, RelationQueryBase, DefaultColumnTypes, QueryData, QueryBase,
|
|
2
|
+
import { Query, QueryWithTable, SetQueryTableAlias, WhereArg, UpdateData, CreateData, Db, IsolationLevel, TransactionOptions, Adapter, FromArgs, FromResult, AdapterOptions, QueryLogOptions, NoPrimaryKeyOption, RelationConfigBase, RelationQuery, SetQueryReturnsOne, SetQueryReturnsOneOptional, SetQueryReturnsAll, RelationQueryBase, ColumnsShape, DefaultColumnTypes, QueryData, QueryBase, QueryBeforeHook, QueryAfterHook, AfterHook, WhereResult, MergeQuery, SetQueryReturns, QueryReturnType } from 'pqb';
|
|
3
3
|
export { OrchidOrmError, OrchidOrmInternalError, columnTypes, raw, testTransaction } from 'pqb';
|
|
4
4
|
import * as orchid_core from 'orchid-core';
|
|
5
|
-
import { EmptyObject, MaybeArray, ColumnTypesBase,
|
|
5
|
+
import { EmptyObject, MaybeArray, ColumnTypesBase, ColumnShapeQueryType, ColumnShapeOutput, ColumnShapeInput, ColumnsShapeBase } from 'orchid-core';
|
|
6
6
|
|
|
7
7
|
type RelationCommonOptions<Related extends TableClass = TableClass, Scope extends Query = Query> = {
|
|
8
8
|
scope?: ScopeFn<Related, Scope>;
|
|
@@ -27,7 +27,7 @@ type BelongsTo = RelationThunkBase & {
|
|
|
27
27
|
type: 'belongsTo';
|
|
28
28
|
options: BelongsToOptions;
|
|
29
29
|
};
|
|
30
|
-
type BelongsToOptions<Self extends Table = Table, Related extends TableClass = TableClass, Scope extends Query = Query> = RelationCommonOptions<Related, Scope> & RelationRefsOrKeysOptions<keyof Self['columns']
|
|
30
|
+
type BelongsToOptions<Self extends Table = Table, Related extends TableClass = TableClass, Scope extends Query = Query> = RelationCommonOptions<Related, Scope> & RelationRefsOrKeysOptions<keyof Self['columns'], keyof InstanceType<Related>['columns'], keyof InstanceType<Related>['columns'], keyof Self['columns']>;
|
|
31
31
|
type BelongsToInfo<T extends Table, Relation extends BelongsTo, K extends string, FK extends string = Relation['options'] extends RelationRefsOptions ? Relation['options']['columns'][number] : Relation['options'] extends RelationKeysOptions ? Relation['options']['foreignKey'] : never, Q extends QueryWithTable = SetQueryTableAlias<DbTable<ReturnType<Relation['fn']>>, K>> = {
|
|
32
32
|
table: Q;
|
|
33
33
|
query: Q;
|
|
@@ -57,7 +57,7 @@ type BelongsToInfo<T extends Table, Relation extends BelongsTo, K extends string
|
|
|
57
57
|
};
|
|
58
58
|
};
|
|
59
59
|
params: {
|
|
60
|
-
[K in FK]: T['columns'][
|
|
60
|
+
[K in FK]: T['columns'][FK]['type'];
|
|
61
61
|
};
|
|
62
62
|
populate: never;
|
|
63
63
|
chainedCreate: false;
|
|
@@ -97,8 +97,8 @@ type HasManyInfo<T extends Table, Relations extends RelationThunks, Relation ext
|
|
|
97
97
|
create?: CreateData<NestedCreateQuery>[];
|
|
98
98
|
};
|
|
99
99
|
params: Relation['options'] extends RelationRefsOptions ? {
|
|
100
|
-
[K in Relation['options']['columns'][number]]: T['columns'][
|
|
101
|
-
} : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][
|
|
100
|
+
[K in Relation['options']['columns'][number]]: T['columns'][K]['type'];
|
|
101
|
+
} : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfig<T, Relations, Relations[Relation['options']['through']]>['params'] : never;
|
|
102
102
|
populate: Populate;
|
|
103
103
|
chainedCreate: Relation['options'] extends RelationThroughOptions ? false : true;
|
|
104
104
|
chainedDelete: true;
|
|
@@ -108,7 +108,7 @@ type HasOne = RelationThunkBase & {
|
|
|
108
108
|
type: 'hasOne';
|
|
109
109
|
options: HasOneOptions;
|
|
110
110
|
};
|
|
111
|
-
type HasOneOptions<Self extends Table = Table, Related extends TableClass = TableClass, Scope extends Query = Query, Through extends string = string, Source extends string = string> = RelationCommonOptions<Related, Scope> & (RelationHasOptions<keyof Self['columns']
|
|
111
|
+
type HasOneOptions<Self extends Table = Table, Related extends TableClass = TableClass, Scope extends Query = Query, Through extends string = string, Source extends string = string> = RelationCommonOptions<Related, Scope> & (RelationHasOptions<keyof Self['columns'], keyof InstanceType<Related>['columns']> | RelationThroughOptions<Through, Source>);
|
|
112
112
|
type HasOneInfo<T extends Table, Relations extends RelationThunks, Relation extends HasOne, K extends string, Populate extends string = Relation['options'] extends RelationRefsOptions ? Relation['options']['references'][number] : Relation['options'] extends RelationKeysOptions ? Relation['options']['foreignKey'] : never, TC extends TableClass = ReturnType<Relation['fn']>, Q extends QueryWithTable = SetQueryTableAlias<DbTable<TC>, K>, NestedCreateQuery extends Query = Relation['options'] extends RelationThroughOptions ? Q : Q & {
|
|
113
113
|
meta: {
|
|
114
114
|
defaults: Record<Populate, true>;
|
|
@@ -142,8 +142,8 @@ type HasOneInfo<T extends Table, Relations extends RelationThunks, Relation exte
|
|
|
142
142
|
create: CreateData<NestedCreateQuery>;
|
|
143
143
|
};
|
|
144
144
|
params: Relation['options'] extends RelationRefsOptions ? {
|
|
145
|
-
[K in Relation['options']['columns'][number]]: T['columns'][
|
|
146
|
-
} : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][
|
|
145
|
+
[K in Relation['options']['columns'][number]]: T['columns'][K]['type'];
|
|
146
|
+
} : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfig<T, Relations, Relations[Relation['options']['through']]>['params'] : never;
|
|
147
147
|
populate: Populate;
|
|
148
148
|
chainedCreate: Relation['options'] extends RelationThroughOptions ? false : true;
|
|
149
149
|
chainedDelete: true;
|
|
@@ -236,19 +236,19 @@ type HasAndBelongsToMany = RelationThunkBase & {
|
|
|
236
236
|
options: HasAndBelongsToManyOptions;
|
|
237
237
|
};
|
|
238
238
|
type HasAndBelongsToManyOptions<Self extends Table = Table, Related extends TableClass = TableClass, Scope extends Query = Query> = RelationCommonOptions<Related, Scope> & ({
|
|
239
|
-
columns: (keyof Self['columns']
|
|
239
|
+
columns: (keyof Self['columns'])[];
|
|
240
240
|
references: string[];
|
|
241
241
|
through: {
|
|
242
242
|
table: string;
|
|
243
243
|
columns: string[];
|
|
244
|
-
references: (keyof InstanceType<Related>['columns']
|
|
244
|
+
references: (keyof InstanceType<Related>['columns'])[];
|
|
245
245
|
};
|
|
246
246
|
} | {
|
|
247
|
-
primaryKey: keyof Self['columns']
|
|
247
|
+
primaryKey: keyof Self['columns'];
|
|
248
248
|
foreignKey: string;
|
|
249
249
|
joinTable: string;
|
|
250
250
|
associationPrimaryKey: string;
|
|
251
|
-
associationForeignKey: keyof InstanceType<Related>['columns']
|
|
251
|
+
associationForeignKey: keyof InstanceType<Related>['columns'];
|
|
252
252
|
});
|
|
253
253
|
type HasAndBelongsToManyInfo<T extends Table, Relation extends HasAndBelongsToMany, K extends string, TC extends TableClass = ReturnType<Relation['fn']>, Q extends QueryWithTable = SetQueryTableAlias<DbTable<TC>, K>> = {
|
|
254
254
|
table: Q;
|
|
@@ -275,10 +275,10 @@ type HasAndBelongsToManyInfo<T extends Table, Relation extends HasAndBelongsToMa
|
|
|
275
275
|
params: Relation['options'] extends {
|
|
276
276
|
columns: string[];
|
|
277
277
|
} ? {
|
|
278
|
-
[K in Relation['options']['columns'][number]]: T['columns'][
|
|
278
|
+
[K in Relation['options']['columns'][number]]: T['columns'][K]['type'];
|
|
279
279
|
} : Relation['options'] extends {
|
|
280
280
|
primaryKey: string;
|
|
281
|
-
} ? Record<Relation['options']['primaryKey'], T['columns'][
|
|
281
|
+
} ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : never;
|
|
282
282
|
populate: never;
|
|
283
283
|
chainedCreate: true;
|
|
284
284
|
chainedDelete: true;
|
|
@@ -333,43 +333,46 @@ type MapRelations<T extends Table> = T extends {
|
|
|
333
333
|
|
|
334
334
|
type TableClass<T extends Table = Table> = new () => T;
|
|
335
335
|
type TableClasses = Record<string, TableClass>;
|
|
336
|
-
type TableToDb<T extends Table, RelationQueries extends Record<string, RelationQueryBase>> = Db<T['table'], T['columns']
|
|
336
|
+
type TableToDb<T extends Table, RelationQueries extends Record<string, RelationQueryBase>> = Db<T['table'], T['columns'], RelationQueries, T['columnTypes']> & {
|
|
337
337
|
definedAs: string;
|
|
338
338
|
db: OrchidORM;
|
|
339
339
|
getFilePath(): string;
|
|
340
340
|
name: string;
|
|
341
341
|
};
|
|
342
342
|
type DbTable<TC extends TableClass, T extends Table = InstanceType<TC>, RelationQueries extends Record<string, RelationQueryBase> = MapRelations<T>, Q extends QueryWithTable = TableToDb<T, RelationQueries>, Result extends QueryWithTable = Q & RelationQueries> = Result;
|
|
343
|
-
type ColumnsConfig = {
|
|
344
|
-
shape: ColumnsShape;
|
|
345
|
-
type: unknown;
|
|
346
|
-
};
|
|
347
343
|
type ScopeFn<Related extends TableClass, Scope extends Query> = (q: DbTable<Related>) => Scope;
|
|
348
344
|
type Table = {
|
|
349
345
|
table: string;
|
|
350
|
-
columns:
|
|
346
|
+
columns: ColumnsShape;
|
|
351
347
|
schema?: string;
|
|
352
348
|
columnTypes: ColumnTypesBase;
|
|
353
349
|
noPrimaryKey?: boolean;
|
|
354
350
|
filePath: string;
|
|
355
351
|
language?: string;
|
|
356
352
|
};
|
|
357
|
-
type
|
|
358
|
-
|
|
359
|
-
|
|
353
|
+
type Queryable<T extends Table> = Partial<ColumnShapeQueryType<T['columns']>>;
|
|
354
|
+
type Selectable<T extends Table> = ColumnShapeOutput<T['columns']>;
|
|
355
|
+
type Insertable<T extends Table> = ColumnShapeInput<T['columns']>;
|
|
356
|
+
type Updateable<T extends Table> = Partial<Insertable<T>>;
|
|
357
|
+
type BeforeHookMethod = <T extends Table>(cb: QueryBeforeHook) => T;
|
|
358
|
+
type AfterHookMethod = <T extends Table>(cb: QueryAfterHook) => T;
|
|
359
|
+
type AfterSelectableHookMethod = <T extends Table, S extends (keyof T['columns'])[]>(this: T, select: S, cb: AfterHook<S, T['columns']>) => T;
|
|
360
|
+
declare const createBaseTable: <ColumnTypes extends Record<string, orchid_core.AnyColumnTypeCreator>, SchemaProvider extends unknown>({ columnTypes: columnTypesArg, snakeCase, filePath: filePathArg, nowSQL, exportAs, language, schemaProvider: schemaProviderArg, }?: {
|
|
361
|
+
columnTypes?: ColumnTypes | ((t: DefaultColumnTypes) => ColumnTypes) | undefined;
|
|
360
362
|
snakeCase?: boolean | undefined;
|
|
361
363
|
filePath?: string | undefined;
|
|
362
364
|
nowSQL?: string | undefined;
|
|
363
365
|
exportAs?: string | undefined;
|
|
364
366
|
language?: string | undefined;
|
|
367
|
+
schemaProvider?: SchemaProvider | undefined;
|
|
365
368
|
}) => {
|
|
366
369
|
new (): {
|
|
367
370
|
table: string;
|
|
368
|
-
columns:
|
|
371
|
+
columns: ColumnsShape;
|
|
369
372
|
schema?: string | undefined;
|
|
370
373
|
noPrimaryKey?: boolean | undefined;
|
|
371
374
|
snakeCase: boolean | undefined;
|
|
372
|
-
columnTypes: Record<string, orchid_core.AnyColumnTypeCreator> extends
|
|
375
|
+
columnTypes: Record<string, orchid_core.AnyColumnTypeCreator> extends ColumnTypes ? {
|
|
373
376
|
timestamps<T extends orchid_core.ColumnTypeBase<unknown, orchid_core.BaseOperators, unknown, unknown, unknown, orchid_core.ColumnDataBase>>(this: {
|
|
374
377
|
name(name: string): {
|
|
375
378
|
timestamp(): T;
|
|
@@ -502,14 +505,14 @@ declare const createBaseTable: <CT extends Record<string, orchid_core.AnyColumnT
|
|
|
502
505
|
dropMode?: pqb.DropMode | undefined;
|
|
503
506
|
}) | undefined): {};
|
|
504
507
|
check(check: orchid_core.RawSQLBase<orchid_core.ColumnTypeBase<unknown, orchid_core.BaseOperators, unknown, unknown, unknown, orchid_core.ColumnDataBase>, {}>): {};
|
|
505
|
-
} :
|
|
508
|
+
} : ColumnTypes;
|
|
506
509
|
q: QueryData;
|
|
507
510
|
language: string | undefined;
|
|
508
511
|
filePath: string;
|
|
509
512
|
result: ColumnsShapeBase;
|
|
510
513
|
clone<T_12 extends QueryBase>(this: T_12): T_12;
|
|
511
514
|
getFilePath(): string;
|
|
512
|
-
setColumns<T_13 extends ColumnsShape>(fn: (t: Record<string, orchid_core.AnyColumnTypeCreator> extends
|
|
515
|
+
setColumns<T_13 extends ColumnsShape>(fn: (t: Record<string, orchid_core.AnyColumnTypeCreator> extends ColumnTypes ? {
|
|
513
516
|
timestamps<T extends orchid_core.ColumnTypeBase<unknown, orchid_core.BaseOperators, unknown, unknown, unknown, orchid_core.ColumnDataBase>>(this: {
|
|
514
517
|
name(name: string): {
|
|
515
518
|
timestamp(): T;
|
|
@@ -642,10 +645,7 @@ declare const createBaseTable: <CT extends Record<string, orchid_core.AnyColumnT
|
|
|
642
645
|
dropMode?: pqb.DropMode | undefined;
|
|
643
646
|
}) | undefined): {};
|
|
644
647
|
check(check: orchid_core.RawSQLBase<orchid_core.ColumnTypeBase<unknown, orchid_core.BaseOperators, unknown, unknown, unknown, orchid_core.ColumnDataBase>, {}>): {};
|
|
645
|
-
} :
|
|
646
|
-
shape: T_13;
|
|
647
|
-
type: ColumnShapeOutput<T_13>;
|
|
648
|
-
};
|
|
648
|
+
} : ColumnTypes) => T_13): T_13;
|
|
649
649
|
belongsTo<Self extends any, Related extends TableClass<Table>, Scope extends Query, Options extends BelongsToOptions<Self, Related, Scope>>(this: Self, fn: () => Related, options: Options): {
|
|
650
650
|
type: "belongsTo";
|
|
651
651
|
fn: () => Related;
|
|
@@ -684,10 +684,8 @@ declare const createBaseTable: <CT extends Record<string, orchid_core.AnyColumnT
|
|
|
684
684
|
nowSQL: string | undefined;
|
|
685
685
|
exportAs: string;
|
|
686
686
|
getFilePath(): string;
|
|
687
|
+
schema: SchemaProvider;
|
|
687
688
|
};
|
|
688
|
-
type BeforeHookMethod = <T extends Table>(cb: QueryBeforeHook) => T;
|
|
689
|
-
type AfterHookMethod = <T extends Table>(cb: QueryAfterHook) => T;
|
|
690
|
-
type AfterSelectableHookMethod = <T extends Table, S extends (keyof T['columns']['shape'])[]>(this: T, select: S, cb: AfterHook<S, T['columns']['shape']>) => T;
|
|
691
689
|
|
|
692
690
|
type QueryMethods<T extends Query> = Record<string, (q: T, ...args: any[]) => any>;
|
|
693
691
|
type QueryOne<T extends Query> = SetQueryReturns<T, Exclude<QueryReturnType, 'all'>>;
|
|
@@ -708,4 +706,4 @@ type Repo<T extends Query, Methods extends MethodsBase<T>, Mapped = MapMethods<T
|
|
|
708
706
|
}>(q: Q) => Q & Mapped) & T & Mapped;
|
|
709
707
|
declare const createRepo: <T extends Query, Methods extends MethodsBase<T>>(table: T, methods: Methods) => Repo<T, Methods, MapMethods<T, Methods>>;
|
|
710
708
|
|
|
711
|
-
export { DbTable, MapMethods, MapQueryMethods, MethodsBase, OrchidORM, QueryMethods, Repo, ScopeFn, Table, TableClass, TableClasses, TableToDb,
|
|
709
|
+
export { DbTable, Insertable, MapMethods, MapQueryMethods, MethodsBase, OrchidORM, QueryMethods, Queryable, Repo, ScopeFn, Selectable, Table, TableClass, TableClasses, TableToDb, Updateable, createBaseTable, createRepo, orchidORM };
|
package/dist/index.js
CHANGED
|
@@ -5,27 +5,23 @@ var orchidCore = require('orchid-core');
|
|
|
5
5
|
var node_async_hooks = require('node:async_hooks');
|
|
6
6
|
|
|
7
7
|
const createBaseTable = ({
|
|
8
|
-
columnTypes,
|
|
8
|
+
columnTypes: columnTypesArg,
|
|
9
9
|
snakeCase,
|
|
10
|
-
filePath,
|
|
10
|
+
filePath: filePathArg,
|
|
11
11
|
nowSQL,
|
|
12
|
-
exportAs,
|
|
13
|
-
language
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return create(
|
|
17
|
-
ct,
|
|
18
|
-
// stack is needed only if filePath wasn't given
|
|
19
|
-
filePath || orchidCore.getStackTrace(),
|
|
20
|
-
snakeCase,
|
|
21
|
-
nowSQL,
|
|
22
|
-
exportAs,
|
|
23
|
-
language
|
|
24
|
-
);
|
|
25
|
-
};
|
|
26
|
-
const create = (columnTypes, filePathOrStack, snakeCase, nowSQL, exportAs = "BaseTable", language) => {
|
|
12
|
+
exportAs = "BaseTable",
|
|
13
|
+
language,
|
|
14
|
+
schemaProvider: schemaProviderArg
|
|
15
|
+
} = {}) => {
|
|
27
16
|
var _a;
|
|
17
|
+
const columnTypes = typeof columnTypesArg === "function" ? columnTypesArg(pqb.columnTypes) : columnTypesArg || pqb.columnTypes;
|
|
18
|
+
const filePathOrStack = filePathArg || orchidCore.getStackTrace();
|
|
28
19
|
let filePath;
|
|
20
|
+
function schemaProvider() {
|
|
21
|
+
const schema = schemaProviderArg.call(this);
|
|
22
|
+
this.schema = () => schema;
|
|
23
|
+
return schema;
|
|
24
|
+
}
|
|
29
25
|
const base = (_a = class {
|
|
30
26
|
constructor() {
|
|
31
27
|
this.snakeCase = snakeCase;
|
|
@@ -36,8 +32,9 @@ const create = (columnTypes, filePathOrStack, snakeCase, nowSQL, exportAs = "Bas
|
|
|
36
32
|
static getFilePath() {
|
|
37
33
|
if (filePath)
|
|
38
34
|
return filePath;
|
|
39
|
-
if (typeof filePathOrStack === "string")
|
|
35
|
+
if (typeof filePathOrStack === "string") {
|
|
40
36
|
return filePath = filePathOrStack;
|
|
37
|
+
}
|
|
41
38
|
filePath = orchidCore.getCallerFilePath(filePathOrStack);
|
|
42
39
|
if (filePath)
|
|
43
40
|
return filePath;
|
|
@@ -74,10 +71,7 @@ const create = (columnTypes, filePathOrStack, snakeCase, nowSQL, exportAs = "Bas
|
|
|
74
71
|
}
|
|
75
72
|
}
|
|
76
73
|
}
|
|
77
|
-
return
|
|
78
|
-
shape,
|
|
79
|
-
type: void 0
|
|
80
|
-
};
|
|
74
|
+
return this.constructor.prototype.columns = shape;
|
|
81
75
|
}
|
|
82
76
|
belongsTo(fn, options) {
|
|
83
77
|
return {
|
|
@@ -107,7 +101,7 @@ const create = (columnTypes, filePathOrStack, snakeCase, nowSQL, exportAs = "Bas
|
|
|
107
101
|
options
|
|
108
102
|
};
|
|
109
103
|
}
|
|
110
|
-
}, _a.nowSQL = nowSQL, _a.exportAs = exportAs, _a);
|
|
104
|
+
}, _a.nowSQL = nowSQL, _a.exportAs = exportAs, _a.schema = schemaProvider, _a);
|
|
111
105
|
orchidCore.applyMixins(base, [pqb.QueryHooks]);
|
|
112
106
|
base.prototype.columnTypes = columnTypes;
|
|
113
107
|
return base;
|
|
@@ -1713,7 +1707,7 @@ const orchidORM = (_a, tables) => {
|
|
|
1713
1707
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1714
1708
|
qb,
|
|
1715
1709
|
table.table,
|
|
1716
|
-
table.columns
|
|
1710
|
+
table.columns,
|
|
1717
1711
|
table.columnTypes,
|
|
1718
1712
|
transactionStorage,
|
|
1719
1713
|
options2
|