sqlstack 3.5.0 → 3.6.0-dev.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/cjs/codegen/generateManifest.d.ts +3 -1
- package/dist/cjs/codegen/generateManifest.d.ts.map +1 -1
- package/dist/cjs/codegen/generateManifest.js +195 -3
- package/dist/cjs/codegen/generateManifest.js.map +1 -1
- package/dist/cjs/core/fileResolution.d.ts +7 -0
- package/dist/cjs/core/fileResolution.d.ts.map +1 -1
- package/dist/cjs/core/fileResolution.js +53 -14
- package/dist/cjs/core/fileResolution.js.map +1 -1
- package/dist/cjs/core/metadata.d.ts +5 -0
- package/dist/cjs/core/metadata.d.ts.map +1 -1
- package/dist/cjs/core/metadata.js.map +1 -1
- package/dist/cjs/core/resources.d.ts +36 -0
- package/dist/cjs/core/resources.d.ts.map +1 -0
- package/dist/cjs/core/resources.js +98 -0
- package/dist/cjs/core/resources.js.map +1 -0
- package/dist/cjs/core/sourceScanResolver.d.ts +8 -14
- package/dist/cjs/core/sourceScanResolver.d.ts.map +1 -1
- package/dist/cjs/core/sourceScanResolver.js +8 -20
- package/dist/cjs/core/sourceScanResolver.js.map +1 -1
- package/dist/cjs/decorators/query.d.ts.map +1 -1
- package/dist/cjs/decorators/query.js +96 -35
- package/dist/cjs/decorators/query.js.map +1 -1
- package/dist/cjs/family.d.ts.map +1 -1
- package/dist/cjs/family.js +3 -1
- package/dist/cjs/family.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +4 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/run.d.ts +44 -4
- package/dist/cjs/run.d.ts.map +1 -1
- package/dist/cjs/run.js +38 -7
- package/dist/cjs/run.js.map +1 -1
- package/dist/cjs/runtime.d.ts +6 -0
- package/dist/cjs/runtime.d.ts.map +1 -1
- package/dist/cjs/runtime.js +18 -0
- package/dist/cjs/runtime.js.map +1 -1
- package/dist/cjs/stack.d.ts +14 -0
- package/dist/cjs/stack.d.ts.map +1 -1
- package/dist/cjs/stack.js +20 -0
- package/dist/cjs/stack.js.map +1 -1
- package/dist/cjs/transactions.d.ts +52 -0
- package/dist/cjs/transactions.d.ts.map +1 -1
- package/dist/cjs/transactions.js +557 -3
- package/dist/cjs/transactions.js.map +1 -1
- package/dist/esm/codegen/generateManifest.js +195 -3
- package/dist/esm/codegen/generateManifest.js.map +1 -1
- package/dist/esm/core/fileResolution.js +52 -14
- package/dist/esm/core/fileResolution.js.map +1 -1
- package/dist/esm/core/metadata.js.map +1 -1
- package/dist/esm/core/resources.js +91 -0
- package/dist/esm/core/resources.js.map +1 -0
- package/dist/esm/core/sourceScanResolver.js +8 -19
- package/dist/esm/core/sourceScanResolver.js.map +1 -1
- package/dist/esm/decorators/query.js +101 -40
- package/dist/esm/decorators/query.js.map +1 -1
- package/dist/esm/family.js +3 -1
- package/dist/esm/family.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/run.js +38 -8
- package/dist/esm/run.js.map +1 -1
- package/dist/esm/runtime.js +17 -0
- package/dist/esm/runtime.js.map +1 -1
- package/dist/esm/stack.js +21 -1
- package/dist/esm/stack.js.map +1 -1
- package/dist/esm/transactions.js +554 -3
- package/dist/esm/transactions.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +74 -133
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/decorators/query.ts"],"names":[],"mappings":"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","sourcesContent":["import { getClassLabels, getMethodLabels, setMethodLabels } from '../core/metadata';\nimport { SqlStackError, ExactlyOneRowError, NoRowsError, RowsExistError, DatabaseError, ExpectedRowsError } from '../core/errors';\nimport { isValidationDisabled, validateOutput } from '../core/validator';\nimport { resolveExecution, resolveSqlResolver } from '../runtime';\nimport type { SqlResolver } from '../core/resolver';\nimport { createSqliteBinder, createMysqlBinder, createPostgresBinder } from '../binders/sqlBinder';\nimport { coerceRootPath, resolveSqlFromFs } from '../core/fileResolution';\nimport { registerDecoratedMethod, recordQueryMethodOnClass } from '../core/resolver';\nimport { defaultSourceScanResolver } from '../core/sourceScanResolver';\nimport { getActiveTransaction } from '../transactions';\nimport { SqlFragment, compileFragment } from '../sql';\nimport {\n runStorage,\n resolveRunTarget,\n executeOnTarget,\n toRunError,\n fragmentText,\n type RunContext,\n type RunInvocation,\n type RunTarget,\n} from '../run';\n\ntype QueryOptions = {\n sql?: string; // optional inline SQL for testing; otherwise, future: load from file\n db?: string; // optional override DB name\n dialect?: 'sqlite' | 'mysql' | 'postgres';\n};\n\n/**\n * Turn a method into a database query. The body calls `run(...)` (see `run`\n * for its forms); the wrapper resolves SQL, binds, executes, and applies the\n * shape/transform/validation decorators. A string argument is the root\n * directory holding the method's `.sql` file; `{ sql }` gives inline SQL,\n * `{ db }` pins a registered database, `{ dialect }` overrides binding style.\n *\n * The decorated method's promise rejects with:\n * @throws {DatabaseError} When the driver rejects the statement (original\n * error in `.cause`).\n * @throws {SqlStackError} For missing SQL sources, unresolvable databases,\n * and shape/validation failures (ExpectedRowsError, ExactlyOneRowError,\n * NoRowsError, RowsExistError, ValidationError).\n */\nexport function Query(arg?: string | QueryOptions) {\n return function (_target: any, prop: string | symbol, desc: PropertyDescriptor) {\n const options: QueryOptions | undefined = typeof arg === 'string' ? undefined : arg;\n const rootArg: string | undefined = typeof arg === 'string' ? arg : undefined;\n // Store method-level db override if provided\n if (options?.db) {\n setMethodLabels(_target, prop, { db: options.db });\n }\n // Store inline SQL if provided\n if (options?.sql) {\n setMethodLabels(_target, prop, { source: { kind: 'inline', sql: options.sql } });\n } else {\n // FS-based resolution: only an EXPLICIT path argument pins a directory.\n // Bare @Query() resolves through the active resolver (or the default\n // SourceScanResolver) — no stack-based directory guessing, which breaks\n // under bundlers and test transforms.\n const { rootDir } = coerceRootPath(rootArg);\n if (rootDir) {\n setMethodLabels(_target, prop, { source: { kind: 'fs', rootDir } });\n }\n }\n\n // Record for resolver coverage checks: immutable class metadata (the\n // canonical, environment-local source) plus the deprecated global list\n // consulted by the legacy global-resolver path.\n const decoratedEntry = {\n className: _target?.constructor?.name ?? '<anonymous>',\n methodName: String(prop),\n inline: !!options?.sql,\n };\n recordQueryMethodOnClass(_target, decoratedEntry);\n registerDecoratedMethod(decoratedEntry);\n\n const original = desc.value;\n desc.value = async function (...callArgs: any[]) {\n const labels = getMethodLabels(this, prop);\n const classLabels = getClassLabels(this);\n\n // Resolve, bind, and execute the method's own SQL (inline, resolver,\n // or file) and return the adapter's raw result. `callArgs` is the\n // binding input: the method's own arguments for run() and the legacy\n // fallback, or the params given to run(db, params). `explicit` carries\n // the database chosen by run(db, params).\n const executeMethodSql = async (\n callArgs: any[],\n explicit: { target: RunTarget; resolver: SqlResolver | undefined } | undefined,\n onSql: (sqlText: string) => void\n ): Promise<unknown> => {\n // 1) prepare args with defaults\n const rawInput = callArgs.length === 1 ? callArgs[0] : callArgs; // object or positional array\n\n // 2) choose database and dialect via the active environment (or run's explicit database)\n let target: RunTarget;\n let activeResolver: SqlResolver | undefined;\n if (explicit) {\n target = explicit.target;\n activeResolver = explicit.resolver;\n } else {\n target = await contextTarget();\n activeResolver = target.resolver;\n }\n const db = target.db;\n const dialect = options?.dialect ?? db.dialect ?? 'sqlite';\n\n // 3) load SQL source (inline, environment resolver, v1 fs fallback,\n // or the zero-config source scan — bare @Query() with nothing installed)\n const sql = labels?.source?.kind === 'inline'\n ? labels.source.sql\n : activeResolver\n ? activeResolver.resolve({\n className: this?.constructor?.name ?? '<anonymous>',\n methodName: String(prop),\n dialect,\n rootDir: labels?.source?.kind === 'fs' ? labels.source.rootDir : undefined,\n })\n : labels?.source?.kind === 'fs'\n ? resolveSqlFromFs(labels.source.rootDir, String(prop), dialect).sql\n : defaultSourceScanResolver()?.resolve({\n className: this?.constructor?.name ?? '<anonymous>',\n methodName: String(prop),\n dialect,\n });\n if (!sql) {\n throw new SqlStackError(`No SQL source provided for method ${String(prop)}. Use @Query() with a file/folder path or inline sql.`);\n }\n onSql(sql);\n\n // 4) bind placeholders\n // Decide argument mode: positional if SQL contains :argN\n let workingSql = sql;\n const hasPositional = /:arg[1-9][0-9]*/.test(workingSql);\n\n // Prepare args for binder\n let args: any;\n if (hasPositional) {\n args = callArgs;\n } else {\n const namedBase = callArgs.length > 0 ? callArgs[0] : undefined;\n args = applyDefaults(labels.defaults, namedBase ?? {});\n }\n\n // Compute paging and inject :offset/:limit (named mode) or rewrite to positional\n const pageCfg = labels.page;\n if (pageCfg) {\n const { size, zeroBase } = pageCfg;\n const base = zeroBase ? 0 : 1;\n\n // Extract page number from input (object) or a trailing options object in positional mode\n const pageFromObject = (val: any): number | undefined => {\n if (val && typeof val === 'object' && !Array.isArray(val) && typeof (val as any).page !== 'undefined') {\n const p = (val as any).page;\n if (typeof p === 'number' && isFinite(p)) return p;\n }\n return undefined;\n };\n\n let pageNum: number | undefined;\n if (hasPositional) {\n // Variadic-style: only the LAST argument may carry `{ page }`\n if (callArgs.length > 0) {\n const last = callArgs[callArgs.length - 1];\n pageNum = pageFromObject(last);\n }\n } else {\n // Prefer last-arg options if provided; otherwise read from named object\n if (callArgs.length > 1) {\n const last = callArgs[callArgs.length - 1];\n pageNum = pageFromObject(last);\n }\n if (pageNum === undefined) {\n pageNum = pageFromObject(args);\n }\n }\n\n const effectivePage = typeof pageNum === 'number' ? pageNum : base;\n const offset = (effectivePage - base) * size;\n const limit = size;\n\n if (hasPositional) {\n // Replace occurrences of :offset and :limit with new :argN tokens appended to args\n const baseIndex = callArgs.length; // start numbering after user args\n let nextIndex = baseIndex + 1;\n const additions: unknown[] = [];\n\n const rewrite = (sqlText: string) => {\n const out: string[] = [];\n let i = 0;\n let inSQ = false, inDQ = false, inLC = false, inBC = false;\n const len = sqlText.length;\n while (i < len) {\n const ch = sqlText[i];\n const next = i + 1 < len ? sqlText[i + 1] : '';\n if (inLC) { out.push(ch); if (ch === '\\n') inLC = false; i++; continue; }\n if (inBC) { out.push(ch); if (ch === '*' && next === '/') { out.push(next); i++; inBC = false; } i++; continue; }\n if (inSQ) {\n out.push(ch);\n if (ch === \"'\" && next === \"'\") { out.push(next); i += 2; continue; }\n if (ch === \"'\") inSQ = false;\n i++;\n continue;\n }\n if (inDQ) {\n out.push(ch);\n if (ch === '\"' && next === '\"') { out.push(next); i += 2; continue; }\n if (ch === '\"') inDQ = false;\n i++;\n continue;\n }\n if (ch === '-' && next === '-') { out.push(ch, next); i += 2; inLC = true; continue; }\n if (ch === '/' && next === '*') { out.push(ch, next); i += 2; inBC = true; continue; }\n if (ch === '\"') { out.push(ch); inDQ = true; i++; continue; }\n if (ch === \"'\") { out.push(ch); inSQ = true; i++; continue; }\n if (ch === ':' && next === ':') { out.push('::'); i += 2; continue; }\n if (ch === ':') {\n // parse token\n let j = i + 1;\n const start = j;\n while (j < len) {\n const c = sqlText[j];\n if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c === '_') j++; else break;\n }\n const name = sqlText.slice(start, j);\n if (name === 'offset') {\n const token = `:arg${nextIndex++}`;\n out.push(token);\n additions.push(offset);\n i = j;\n continue;\n }\n if (name === 'limit') {\n const token = `:arg${nextIndex++}`;\n out.push(token);\n additions.push(limit);\n i = j;\n continue;\n }\n // otherwise leave untouched\n out.push(':');\n i++;\n continue;\n }\n out.push(ch);\n i++;\n }\n return out.join('');\n };\n\n const rewritten = rewrite(workingSql);\n if (rewritten !== workingSql) {\n workingSql = rewritten;\n // append values so :argK map correctly\n (args as unknown[]).push(...additions);\n }\n } else {\n // Named-mode: attach computed values (override any provided)\n args = { ...(args as Record<string, unknown>), offset, limit };\n }\n }\n const binder =\n dialect === 'postgres' ? createPostgresBinder() : dialect === 'mysql' ? createMysqlBinder() : createSqliteBinder();\n // Binding failures (missing :name, bad array value) surface as DatabaseError like every\n // other run() failure; the original error stays in `.cause`.\n let bound: { sql: string; params: unknown[] };\n try {\n bound = binder.bind(workingSql, args as any);\n } catch (bindError) {\n throw toRunError(bindError, workingSql);\n }\n const { sql: boundSql, params } = bound;\n onSql(boundSql);\n\n // 5) execute query (inside the active transaction on that database, if any)\n let out;\n try {\n out = target.tx ? await target.tx.query(boundSql, params) : await db.query(boundSql, params);\n } catch (dbError: any) {\n // Attach SQL query (with placeholders) to error for debugging\n throw new DatabaseError(\n dbError?.message || String(dbError),\n boundSql,\n dbError instanceof Error ? dbError : undefined\n );\n }\n return out;\n };\n\n // Database from the decorator context: @Query({ db }), @QueryBinder({ db }),\n // or the environment default.\n const contextTarget = async (): Promise<RunTarget> => {\n const dbName = labels.db ?? options?.db ?? classLabels?.db;\n const resolved = await resolveExecution(dbName);\n return {\n db: resolved.entry.db,\n tx: getActiveTransaction(resolved.entry),\n resolver: resolved.resolver,\n byName: true,\n };\n };\n\n // run's argument-taking forms: return the adapter's raw result.\n const executeInvocation = async (\n invocation: Exclude<RunInvocation, { kind: 'default' }>,\n onSql: (sqlText: string) => void\n ): Promise<unknown> => {\n if (invocation.kind === 'fragment') {\n // run(query) / run(db, query): the fragment replaces the method's SQL;\n // the method's arguments are not bound.\n const target = invocation.db !== undefined ? await resolveRunTarget(invocation.db) : await contextTarget();\n const dialect = options?.dialect ?? target.db.dialect ?? 'sqlite';\n const { sql: boundSql, params } = compileFragment(invocation.fragment, dialect);\n onSql(boundSql);\n return executeOnTarget(target, boundSql, params);\n }\n // run(db, params): the method's own SQL against db, bound from params\n // only (an object for :named, an array for :argN).\n const target = await resolveRunTarget(invocation.db);\n // Inline SQL needs no resolver; only look one up for file-based SQL.\n const resolver = target.byName\n ? target.resolver\n : labels?.source?.kind === 'inline'\n ? undefined\n : await resolveSqlResolver();\n const bindArgs = Array.isArray(invocation.params) ? [...invocation.params] : [invocation.params];\n return executeMethodSql(bindArgs, { target, resolver }, onSql);\n };\n\n // The full pipeline: execute, then — if rows were returned\n // (SELECT/CTE/RETURNING) — shape + transform + validate; a write result\n // is returned as-is (or fails if a shape was requested). Invoked by\n // run() from inside the method body, or directly as the legacy fallback\n // when the body throws. The zero-argument path is unchanged; run's\n // argument-taking forms get the unified error contract: any failure\n // before shaping that is not already a SqlStackError becomes a\n // DatabaseError with the original error in `.cause`.\n const pipeline = async (invocation?: RunInvocation): Promise<unknown> => {\n if (invocation === undefined || invocation.kind === 'default') {\n const out = await executeMethodSql(callArgs, undefined, () => {});\n return finishResult(out, labels, this, prop);\n }\n let sqlText = invocation.kind === 'fragment' ? fragmentText(invocation.fragment) : '';\n let out: unknown;\n try {\n out = await executeInvocation(invocation, (s) => {\n sqlText = s;\n });\n } catch (err) {\n throw toRunError(err, sqlText);\n }\n return finishResult(out, labels, this, prop);\n };\n\n // 0) Invoke the method body inside a run() context. Three outcomes:\n // - body calls run(...): the pipeline executed inside the body; return\n // the body's result verbatim (it may have caught/transformed it).\n // - body returns a SqlFragment (deprecated template literal path):\n // execute it.\n // - body throws without calling run() (legacy placeholder throw):\n // fall through to the pipeline.\n const runCtx: RunContext = { ran: false, execute: pipeline, invocations: true };\n let fragmentResult: unknown;\n try {\n fragmentResult = await runStorage.run(runCtx, () => original.apply(this, callArgs));\n } catch (bodyError) {\n // A body that invoked run() is real logic — its errors propagate.\n if (runCtx.ran) throw bodyError;\n // Method body threw (e.g. placeholder `throw new Error('replaced')`) — fall through to file/inline SQL\n fragmentResult = undefined;\n }\n if (runCtx.ran) return fragmentResult;\n\n if (fragmentResult instanceof SqlFragment) {\n warnFragmentBodyDeprecated(this, prop);\n const { sql: boundSql, params } = fragmentResult.toSQL();\n\n const dbName = labels.db ?? options?.db ?? classLabels?.db;\n const { entry } = await resolveExecution(dbName);\n const db = entry.db;\n\n let out;\n try {\n const tx = getActiveTransaction(entry);\n out = tx ? await tx.query(boundSql, params) : await db.query(boundSql, params);\n } catch (dbError: any) {\n throw new DatabaseError(\n dbError?.message || String(dbError),\n boundSql,\n dbError instanceof Error ? dbError : undefined\n );\n }\n\n return finishResult(out, labels, this, prop);\n }\n\n return pipeline();\n };\n\n return desc;\n };\n}\n\n// Deprecated (removal in the next major version): a @Query body that RETURNS\n// an sql`` fragment. It only type-checks when the method's declared return\n// type is bent to admit SqlFragment (an `as any`-style hole). One warning per\n// class.method per process.\nconst warnedFragmentBodies = new Set<string>();\n\nfunction warnFragmentBodyDeprecated(self: any, prop: string | symbol): void {\n const key = `${self?.constructor?.name ?? '<anonymous>'}.${String(prop)}`;\n if (warnedFragmentBodies.has(key)) return;\n warnedFragmentBodies.add(key);\n process.emitWarning(\n `@Query method ${key} returns an sql\\`\\` fragment from its body. This form is deprecated and will be ` +\n 'removed in the next major version. Use `return run(sql`...`)` (or `return run(db, sql`...`)`) instead.',\n { type: 'DeprecationWarning', code: 'SQLSTACK_FRAGMENT_BODY' }\n );\n}\n\nfunction applyDefaults(defaults: Record<string, unknown> | undefined, input: any) {\n if (!defaults) return input;\n if (Array.isArray(input)) return input; // defaults only apply to named-object args\n return { ...defaults, ...(input || {}) };\n}\n\n// Shared tail of both execution paths. Rows (any statement that produced a\n// result set) are shaped, transformed, and validated. A write result is\n// returned verbatim — unless a result-shape decorator was requested, in which\n// case the statement cannot satisfy it and we fail at the call site instead of\n// silently handing back a truthy `{ rowsAffected }` object.\nfunction finishResult(out: unknown, labels: any, self: any, prop: string | symbol): any {\n if (!Array.isArray(out)) {\n if (labels.shape) {\n throw new ExpectedRowsError(\n `${self?.constructor?.name ?? '<anonymous>'}.${String(prop)}`,\n labels.shape\n );\n }\n return out;\n }\n const shaped = applyShape(out, labels.shape);\n const transformed = labels.transform ? labels.transform(shaped) : shaped;\n\n if (labels.validateSchema && !isValidationDisabled()) {\n if (Array.isArray(transformed)) {\n for (const row of transformed) validateOutput(labels.validateSchema, row);\n } else if (transformed !== null && transformed !== undefined) {\n validateOutput(labels.validateSchema, transformed);\n }\n }\n return transformed;\n}\n\nfunction applyShape<T>(rows: T[], shape?: 'single' | 'only' | 'exist' | 'none'): any {\n switch (shape) {\n case 'single':\n return rows.length > 0 ? rows[0] : null;\n case 'only':\n if (rows.length !== 1) throw new ExactlyOneRowError(rows.length);\n return rows[0];\n case 'exist':\n if (rows.length < 1) throw new NoRowsError();\n return rows[0];\n case 'none':\n if (rows.length > 0) throw new RowsExistError(rows.length);\n return null;\n default:\n return rows;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/decorators/query.ts"],"names":[],"mappings":"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","sourcesContent":["import { getClassLabels, getMethodLabels, setMethodLabels } from '../core/metadata';\nimport { SqlStackError, ExactlyOneRowError, NoRowsError, RowsExistError, DatabaseError, ExpectedRowsError } from '../core/errors';\nimport { isValidationDisabled, validateOutput } from '../core/validator';\nimport { resolveExecution, resolveSqlResolver, isRegisteredDatabaseName } from '../runtime';\nimport type { SqlResolver } from '../core/resolver';\nimport { createSqliteBinder, createMysqlBinder, createPostgresBinder } from '../binders/sqlBinder';\nimport { coerceRootPath, resolveSqlFromFs, guessDecoratorDir } from '../core/fileResolution';\nimport { registerDecoratedMethod, recordQueryMethodOnClass, getActiveResolver } from '../core/resolver';\nimport { getResources, resolveSqlFromResources } from '../core/resources';\nimport type { MethodLabels } from '../core/metadata';\nimport { getTransactionTarget } from '../transactions';\nimport { SqlFragment, compileFragment } from '../sql';\nimport {\n runStorage,\n resolveRunTarget,\n executeOnTarget,\n toRunError,\n fragmentText,\n isRunDatabaseHandle,\n type RunContext,\n type RunDatabase,\n type RunInvocation,\n type RunTarget,\n} from '../run';\n\ntype QueryOptions = {\n sql?: string; // optional inline SQL for testing; otherwise, future: load from file\n db?: string; // optional override DB name\n dialect?: 'sqlite' | 'mysql' | 'postgres';\n};\n\n/**\n * Turn a method into a database query. The body calls `run(...)` (see `run`\n * for its forms); the wrapper resolves SQL, binds, executes, and applies the\n * shape/transform/validation decorators. A string argument is the root\n * directory holding the method's `.sql` file; `{ sql }` gives inline SQL,\n * `{ db }` pins a registered database, `{ dialect }` overrides binding style.\n *\n * The decorated method's promise rejects with:\n * @throws {DatabaseError} When the driver rejects the statement (original\n * error in `.cause`).\n * @throws {SqlStackError} For missing SQL sources, unresolvable databases,\n * and shape/validation failures (ExpectedRowsError, ExactlyOneRowError,\n * NoRowsError, RowsExistError, ValidationError).\n */\nexport function Query(arg?: string | QueryOptions) {\n return function (_target: any, prop: string | symbol, desc: PropertyDescriptor) {\n const options: QueryOptions | undefined = typeof arg === 'string' ? undefined : arg;\n const rootArg: string | undefined = typeof arg === 'string' ? arg : undefined;\n // Store method-level db override if provided\n if (options?.db) {\n setMethodLabels(_target, prop, { db: options.db });\n }\n // Store inline SQL if provided\n if (options?.sql) {\n setMethodLabels(_target, prop, { source: { kind: 'inline', sql: options.sql } });\n } else {\n // An EXPLICIT path argument pins a filesystem directory. Bare @Query()\n // records the directory of the decorating module (first non-sqlstack\n // stack frame at decoration time); at call time that directory is\n // resolved against the packaged resources map when one is installed\n // (SqlStack.useResources), else read from the filesystem. No tree scan.\n const { rootDir } = coerceRootPath(rootArg);\n if (rootDir) {\n setMethodLabels(_target, prop, { source: { kind: 'fs', rootDir } });\n } else {\n const dir = guessDecoratorDir();\n if (dir) setMethodLabels(_target, prop, { source: { kind: 'guess', dir } });\n }\n }\n\n // Record for resolver coverage checks: immutable class metadata (the\n // canonical, environment-local source) plus the deprecated global list\n // consulted by the legacy global-resolver path.\n const decoratedEntry = {\n className: _target?.constructor?.name ?? '<anonymous>',\n methodName: String(prop),\n inline: !!options?.sql,\n };\n recordQueryMethodOnClass(_target, decoratedEntry);\n registerDecoratedMethod(decoratedEntry);\n\n const original = desc.value;\n desc.value = async function (...callArgs: any[]) {\n const labels = getMethodLabels(this, prop);\n const classLabels = getClassLabels(this);\n\n // Resolve, bind, and execute the method's own SQL (inline, resolver,\n // or file) and return the adapter's raw result. `callArgs` is the\n // binding input: the method's own arguments for run() and the legacy\n // fallback, or the params given to run(db, params). `explicit` carries\n // the database chosen by run(db, params).\n const executeMethodSql = async (\n callArgs: any[],\n explicit: { target: RunTarget; resolver: SqlResolver | undefined } | undefined,\n onSql: (sqlText: string) => void\n ): Promise<unknown> => {\n // 1) prepare args with defaults\n const rawInput = callArgs.length === 1 ? callArgs[0] : callArgs; // object or positional array\n\n // 2) choose database and dialect via the active environment (or run's explicit database)\n let target: RunTarget;\n let activeResolver: SqlResolver | undefined;\n if (explicit) {\n target = explicit.target;\n activeResolver = explicit.resolver;\n } else {\n target = await contextTarget();\n activeResolver = target.resolver;\n }\n const db = target.db;\n const dialect = options?.dialect ?? db.dialect ?? 'sqlite';\n\n // 3) load SQL source: inline; else an installed resolver (the\n // instance's, else the process-global one — a build-time manifest\n // registered by a host runner applies even when the SqlStack itself\n // came from an IoC root); else the decorator's directory (explicit\n // path or guessed module dir) against the packaged resources /\n // filesystem.\n const className = this?.constructor?.name ?? '<anonymous>';\n const resolver = activeResolver ?? getActiveResolver();\n const sql = labels?.source?.kind === 'inline'\n ? labels.source.sql\n : (resolver?.resolve({\n className,\n methodName: String(prop),\n dialect,\n rootDir: labels?.source?.kind === 'fs' ? labels.source.rootDir : undefined,\n }) ?? resolveSourceSql(labels?.source, className, String(prop), dialect));\n if (!sql) {\n throw new SqlStackError(\n `No SQL source for ${className}.${String(prop)}: the decorating module's directory could not be ` +\n 'determined from the stack. Use @Query() with a file/folder path or inline sql.'\n );\n }\n onSql(sql);\n\n // 4) bind placeholders\n // Decide argument mode: positional if SQL contains :argN\n let workingSql = sql;\n const hasPositional = /:arg[1-9][0-9]*/.test(workingSql);\n\n // Prepare args for binder\n let args: any;\n if (hasPositional) {\n args = callArgs;\n } else {\n const namedBase = callArgs.length > 0 ? callArgs[0] : undefined;\n args = applyDefaults(labels.defaults, namedBase ?? {});\n }\n\n // Compute paging and inject :offset/:limit (named mode) or rewrite to positional\n const pageCfg = labels.page;\n if (pageCfg) {\n const { size, zeroBase } = pageCfg;\n const base = zeroBase ? 0 : 1;\n\n // Extract page number from input (object) or a trailing options object in positional mode\n const pageFromObject = (val: any): number | undefined => {\n if (val && typeof val === 'object' && !Array.isArray(val) && typeof (val as any).page !== 'undefined') {\n const p = (val as any).page;\n if (typeof p === 'number' && isFinite(p)) return p;\n }\n return undefined;\n };\n\n let pageNum: number | undefined;\n if (hasPositional) {\n // Variadic-style: only the LAST argument may carry `{ page }`\n if (callArgs.length > 0) {\n const last = callArgs[callArgs.length - 1];\n pageNum = pageFromObject(last);\n }\n } else {\n // Prefer last-arg options if provided; otherwise read from named object\n if (callArgs.length > 1) {\n const last = callArgs[callArgs.length - 1];\n pageNum = pageFromObject(last);\n }\n if (pageNum === undefined) {\n pageNum = pageFromObject(args);\n }\n }\n\n const effectivePage = typeof pageNum === 'number' ? pageNum : base;\n const offset = (effectivePage - base) * size;\n const limit = size;\n\n if (hasPositional) {\n // Replace occurrences of :offset and :limit with new :argN tokens appended to args\n const baseIndex = callArgs.length; // start numbering after user args\n let nextIndex = baseIndex + 1;\n const additions: unknown[] = [];\n\n const rewrite = (sqlText: string) => {\n const out: string[] = [];\n let i = 0;\n let inSQ = false, inDQ = false, inLC = false, inBC = false;\n const len = sqlText.length;\n while (i < len) {\n const ch = sqlText[i];\n const next = i + 1 < len ? sqlText[i + 1] : '';\n if (inLC) { out.push(ch); if (ch === '\\n') inLC = false; i++; continue; }\n if (inBC) { out.push(ch); if (ch === '*' && next === '/') { out.push(next); i++; inBC = false; } i++; continue; }\n if (inSQ) {\n out.push(ch);\n if (ch === \"'\" && next === \"'\") { out.push(next); i += 2; continue; }\n if (ch === \"'\") inSQ = false;\n i++;\n continue;\n }\n if (inDQ) {\n out.push(ch);\n if (ch === '\"' && next === '\"') { out.push(next); i += 2; continue; }\n if (ch === '\"') inDQ = false;\n i++;\n continue;\n }\n if (ch === '-' && next === '-') { out.push(ch, next); i += 2; inLC = true; continue; }\n if (ch === '/' && next === '*') { out.push(ch, next); i += 2; inBC = true; continue; }\n if (ch === '\"') { out.push(ch); inDQ = true; i++; continue; }\n if (ch === \"'\") { out.push(ch); inSQ = true; i++; continue; }\n if (ch === ':' && next === ':') { out.push('::'); i += 2; continue; }\n if (ch === ':') {\n // parse token\n let j = i + 1;\n const start = j;\n while (j < len) {\n const c = sqlText[j];\n if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c === '_') j++; else break;\n }\n const name = sqlText.slice(start, j);\n if (name === 'offset') {\n const token = `:arg${nextIndex++}`;\n out.push(token);\n additions.push(offset);\n i = j;\n continue;\n }\n if (name === 'limit') {\n const token = `:arg${nextIndex++}`;\n out.push(token);\n additions.push(limit);\n i = j;\n continue;\n }\n // otherwise leave untouched\n out.push(':');\n i++;\n continue;\n }\n out.push(ch);\n i++;\n }\n return out.join('');\n };\n\n const rewritten = rewrite(workingSql);\n if (rewritten !== workingSql) {\n workingSql = rewritten;\n // append values so :argK map correctly\n (args as unknown[]).push(...additions);\n }\n } else {\n // Named-mode: attach computed values (override any provided)\n args = { ...(args as Record<string, unknown>), offset, limit };\n }\n }\n const binder =\n dialect === 'postgres' ? createPostgresBinder() : dialect === 'mysql' ? createMysqlBinder() : createSqliteBinder();\n // Binding failures (missing :name, bad array value) surface as DatabaseError like every\n // other run() failure; the original error stays in `.cause`.\n let bound: { sql: string; params: unknown[] };\n try {\n bound = binder.bind(workingSql, args as any);\n } catch (bindError) {\n throw toRunError(bindError, workingSql);\n }\n const { sql: boundSql, params } = bound;\n onSql(boundSql);\n\n // 5) execute query (inside the active transaction on that database, if any)\n let out;\n try {\n out = target.tx ? await target.tx.query(boundSql, params) : await db.query(boundSql, params);\n } catch (dbError: any) {\n // Attach SQL query (with placeholders) to error for debugging\n throw new DatabaseError(\n dbError?.message || String(dbError),\n boundSql,\n dbError instanceof Error ? dbError : undefined\n );\n }\n return out;\n };\n\n // Database from the decorator context: @Query({ db }), @QueryBinder({ db }),\n // or the environment default.\n const contextTarget = async (): Promise<RunTarget> => {\n const dbName = labels.db ?? options?.db ?? classLabels?.db;\n const resolved = await resolveExecution(dbName);\n return {\n db: resolved.entry.db,\n tx: getTransactionTarget(resolved.entry),\n resolver: resolved.resolver,\n byName: true,\n };\n };\n\n // The method's own leading database argument: a handle (object with\n // query()) or a registered database name. It selects run()'s target\n // and is never bound as a value.\n const leadingDb = async (): Promise<RunDatabase | string | undefined> => {\n if (callArgs.length === 0) return undefined;\n const first = callArgs[0];\n if (isRunDatabaseHandle(first)) return first;\n if (typeof first === 'string' && first.length > 0 && (await isRegisteredDatabaseName(first))) return first;\n return undefined;\n };\n\n // A database chosen by run's argument or the method's leading argument.\n const explicitTarget = async (\n db: RunDatabase | string\n ): Promise<{ target: RunTarget; resolver: SqlResolver | undefined }> => {\n const target = await resolveRunTarget(db);\n // Inline SQL needs no resolver; only look one up for file-based SQL.\n const resolver = target.byName\n ? target.resolver\n : labels?.source?.kind === 'inline'\n ? undefined\n : await resolveSqlResolver();\n return { target, resolver };\n };\n\n // run() (and the legacy fallback): the method's arguments minus a\n // leading database, on that database or the decorator context.\n const executeDefault = async (onSql: (sqlText: string) => void): Promise<unknown> => {\n const lead = await leadingDb();\n if (lead === undefined) return executeMethodSql(callArgs, undefined, onSql);\n return executeMethodSql(callArgs.slice(1), await explicitTarget(lead), onSql);\n };\n\n // run's argument-taking forms: return the adapter's raw result.\n const executeInvocation = async (\n invocation: Exclude<RunInvocation, { kind: 'default' }>,\n onSql: (sqlText: string) => void\n ): Promise<unknown> => {\n if (invocation.kind === 'fragment') {\n // run(query) / run(db, query): the fragment replaces the method's SQL;\n // the method's arguments are not bound.\n const target = invocation.db !== undefined ? await resolveRunTarget(invocation.db) : await contextTarget();\n const dialect = options?.dialect ?? target.db.dialect ?? 'sqlite';\n const { sql: boundSql, params } = compileFragment(invocation.fragment, dialect);\n onSql(boundSql);\n return executeOnTarget(target, boundSql, params);\n }\n if (invocation.kind === 'db') {\n // run(db): the method's own SQL against db, bound from the method's\n // arguments minus a leading database argument.\n const lead = await leadingDb();\n const bindArgs = lead === undefined ? callArgs : callArgs.slice(1);\n return executeMethodSql(bindArgs, await explicitTarget(invocation.db), onSql);\n }\n // run(db, params) / run(params): the method's own SQL bound from params\n // only (an object for :named, an array for :argN), against run's db,\n // else the method's leading database, else the decorator context.\n const bindArgs = Array.isArray(invocation.params) ? [...invocation.params] : [invocation.params];\n const db = invocation.db ?? (await leadingDb());\n return executeMethodSql(bindArgs, db !== undefined ? await explicitTarget(db) : undefined, onSql);\n };\n\n // The full pipeline: execute, then — if rows were returned\n // (SELECT/CTE/RETURNING) — shape + transform + validate; a write result\n // is returned as-is (or fails if a shape was requested). Invoked by\n // run() from inside the method body, or directly as the legacy fallback\n // when the body throws. The zero-argument path is unchanged; run's\n // argument-taking forms get the unified error contract: any failure\n // before shaping that is not already a SqlStackError becomes a\n // DatabaseError with the original error in `.cause`.\n const pipeline = async (invocation?: RunInvocation): Promise<unknown> => {\n if (invocation === undefined || invocation.kind === 'default') {\n const out = await executeDefault(() => {});\n return finishResult(out, labels, this, prop);\n }\n let sqlText = invocation.kind === 'fragment' ? fragmentText(invocation.fragment) : '';\n let out: unknown;\n try {\n out = await executeInvocation(invocation, (s) => {\n sqlText = s;\n });\n } catch (err) {\n throw toRunError(err, sqlText);\n }\n return finishResult(out, labels, this, prop);\n };\n\n // 0) Invoke the method body inside a run() context. Three outcomes:\n // - body calls run(...): the pipeline executed inside the body; return\n // the body's result verbatim (it may have caught/transformed it).\n // - body returns a SqlFragment (deprecated template literal path):\n // execute it.\n // - body throws without calling run() (legacy placeholder throw):\n // fall through to the pipeline.\n const runCtx: RunContext = { ran: false, execute: pipeline, invocations: true };\n let fragmentResult: unknown;\n try {\n fragmentResult = await runStorage.run(runCtx, () => original.apply(this, callArgs));\n } catch (bodyError) {\n // A body that invoked run() is real logic — its errors propagate.\n if (runCtx.ran) throw bodyError;\n // Method body threw (e.g. placeholder `throw new Error('replaced')`) — fall through to file/inline SQL\n fragmentResult = undefined;\n }\n if (runCtx.ran) return fragmentResult;\n\n if (fragmentResult instanceof SqlFragment) {\n warnFragmentBodyDeprecated(this, prop);\n const { sql: boundSql, params } = fragmentResult.toSQL();\n\n const dbName = labels.db ?? options?.db ?? classLabels?.db;\n const { entry } = await resolveExecution(dbName);\n const db = entry.db;\n\n let out;\n try {\n const tx = getTransactionTarget(entry);\n out = tx ? await tx.query(boundSql, params) : await db.query(boundSql, params);\n } catch (dbError: any) {\n throw new DatabaseError(\n dbError?.message || String(dbError),\n boundSql,\n dbError instanceof Error ? dbError : undefined\n );\n }\n\n return finishResult(out, labels, this, prop);\n }\n\n return pipeline();\n };\n\n return desc;\n };\n}\n\n// Directory-based SQL for a decorated method. An explicit @Query('<path>')\n// is always the filesystem. A bare @Query() uses the packaged resources map\n// when one is installed (bundled/packaged runtimes), else the filesystem next\n// to the decorating module (tests, plain Node). Misses name every key tried.\nfunction resolveSourceSql(\n source: MethodLabels['source'],\n className: string,\n methodName: string,\n dialect: 'sqlite' | 'mysql' | 'postgres'\n): string | undefined {\n if (!source || source.kind === 'inline') return undefined;\n if (source.kind === 'fs') return resolveSqlFromFs(source.rootDir, methodName, dialect).sql;\n const packaged = getResources();\n const fromResources = packaged ? resolveSqlFromResources(source.dir, methodName, dialect) : undefined;\n if (fromResources?.sql !== undefined) return fromResources.sql;\n try {\n return resolveSqlFromFs(source.dir, methodName, dialect).sql;\n } catch (fsError) {\n const triedResources = fromResources ? `\\npackaged resources tried:\\n${fromResources.tried.join('\\n')}` : '';\n throw new SqlStackError(\n `sqlstack: no SQL for ${className}.${methodName}.${triedResources}\\n` +\n `${(fsError as Error)?.message ?? String(fsError)}`\n );\n }\n}\n\n// Deprecated (removal in the next major version): a @Query body that RETURNS\n// an sql`` fragment. It only type-checks when the method's declared return\n// type is bent to admit SqlFragment (an `as any`-style hole). One warning per\n// class.method per process.\nconst warnedFragmentBodies = new Set<string>();\n\nfunction warnFragmentBodyDeprecated(self: any, prop: string | symbol): void {\n const key = `${self?.constructor?.name ?? '<anonymous>'}.${String(prop)}`;\n if (warnedFragmentBodies.has(key)) return;\n warnedFragmentBodies.add(key);\n process.emitWarning(\n `@Query method ${key} returns an sql\\`\\` fragment from its body. This form is deprecated and will be ` +\n 'removed in the next major version. Use `return run(sql`...`)` (or `return run(db, sql`...`)`) instead.',\n { type: 'DeprecationWarning', code: 'SQLSTACK_FRAGMENT_BODY' }\n );\n}\n\nfunction applyDefaults(defaults: Record<string, unknown> | undefined, input: any) {\n if (!defaults) return input;\n if (Array.isArray(input)) return input; // defaults only apply to named-object args\n return { ...defaults, ...(input || {}) };\n}\n\n// Shared tail of both execution paths. Rows (any statement that produced a\n// result set) are shaped, transformed, and validated. A write result is\n// returned verbatim — unless a result-shape decorator was requested, in which\n// case the statement cannot satisfy it and we fail at the call site instead of\n// silently handing back a truthy `{ rowsAffected }` object.\nfunction finishResult(out: unknown, labels: any, self: any, prop: string | symbol): any {\n if (!Array.isArray(out)) {\n if (labels.shape) {\n throw new ExpectedRowsError(\n `${self?.constructor?.name ?? '<anonymous>'}.${String(prop)}`,\n labels.shape\n );\n }\n return out;\n }\n const shaped = applyShape(out, labels.shape);\n const transformed = labels.transform ? labels.transform(shaped) : shaped;\n\n if (labels.validateSchema && !isValidationDisabled()) {\n if (Array.isArray(transformed)) {\n for (const row of transformed) validateOutput(labels.validateSchema, row);\n } else if (transformed !== null && transformed !== undefined) {\n validateOutput(labels.validateSchema, transformed);\n }\n }\n return transformed;\n}\n\nfunction applyShape<T>(rows: T[], shape?: 'single' | 'only' | 'exist' | 'none'): any {\n switch (shape) {\n case 'single':\n return rows.length > 0 ? rows[0] : null;\n case 'only':\n if (rows.length !== 1) throw new ExactlyOneRowError(rows.length);\n return rows[0];\n case 'exist':\n if (rows.length < 1) throw new NoRowsError();\n return rows[0];\n case 'none':\n if (rows.length > 0) throw new RowsExistError(rows.length);\n return null;\n default:\n return rows;\n }\n}\n"]}
|
package/dist/cjs/family.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"family.d.ts","sourceRoot":"","sources":["../../src/family.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvD;;;;GAIG;AAEH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,MAAM;IAChD,6EAA6E;IAC7E,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC;IAChC,0EAA0E;IAC1E,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;IACvB,gFAAgF;IAChF,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,6DAA6D;IAC7D,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,kCAAkC;IAClC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,6EAA6E;IAC7E,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,MAAM;IACtC,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE;QACN,8EAA8E;QAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,0EAA0E;AAC1E,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAgBD,qBAAa,aAAa,CAAC,CAAC,GAAG,MAAM;;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAQV,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAOlE,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAMpD,kDAAkD;IAClD,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB;IAIhC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAMxC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,sDAAsD;IAChD,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"family.d.ts","sourceRoot":"","sources":["../../src/family.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/family.js
CHANGED
|
@@ -70,6 +70,9 @@ class FamilyRuntime {
|
|
|
70
70
|
await __classPrivateFieldGet(this, _FamilyRuntime_instances, "m", _FamilyRuntime_open).call(this, member);
|
|
71
71
|
member.leases++;
|
|
72
72
|
member.lastUsed = __classPrivateFieldSet(this, _FamilyRuntime_useTick, (_a = __classPrivateFieldGet(this, _FamilyRuntime_useTick, "f"), ++_a), "f");
|
|
73
|
+
// Evict only after the lease is counted: with a small cache (maxOpen: 0)
|
|
74
|
+
// the member just opened would otherwise be closed before it is used.
|
|
75
|
+
__classPrivateFieldGet(this, _FamilyRuntime_instances, "m", _FamilyRuntime_evictIfNeeded).call(this);
|
|
73
76
|
let released = false;
|
|
74
77
|
return {
|
|
75
78
|
entry: member.entry,
|
|
@@ -179,7 +182,6 @@ _FamilyRuntime_stack = new WeakMap(), _FamilyRuntime_provider = new WeakMap(), _
|
|
|
179
182
|
}
|
|
180
183
|
const db = await member.opening;
|
|
181
184
|
member.db = db;
|
|
182
|
-
__classPrivateFieldGet(this, _FamilyRuntime_instances, "m", _FamilyRuntime_evictIfNeeded).call(this);
|
|
183
185
|
}, _FamilyRuntime_closeHandle = async function _FamilyRuntime_closeHandle(member) {
|
|
184
186
|
const db = member.db;
|
|
185
187
|
member.db = undefined;
|
package/dist/cjs/family.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"family.js","sourceRoot":"","sources":["../../src/family.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Database } from './registry';\nimport { SqlStackError } from './core/errors';\nimport type { SqlStack, DatabaseEntry } from './stack';\n\n/**\n * Dynamic database families (spec 17): one registration that resolves many\n * concrete databases by key. The provider owns physical mechanics; the\n * family runtime owns identity, leases, bounded caching, and lifecycle.\n */\n\nexport interface DatabaseInspection {\n state: 'closed' | 'open' | 'missing';\n [fact: string]: unknown;\n}\n\nexport interface DatabaseFamilyProvider<K = string> {\n /** Normalize/validate an application key. Must be deterministic and safe. */\n normalizeKey(input: unknown): K;\n /** Serialize a normalized key to the identity string used for routing. */\n keyId?(key: K): string;\n /** Open an EXISTING database. Must fail if it does not exist (never create). */\n open(key: K): Promise<Database>;\n /** Create a NEW database. Must fail if it already exists. */\n create?(key: K): Promise<Database>;\n /** Explicit create-if-missing. */\n ensure?(key: K): Promise<Database>;\n exists?(key: K): Promise<boolean>;\n /** Physically delete the database (handle already closed by the runtime). */\n delete?(key: K): Promise<void>;\n inspect?(key: K): Promise<DatabaseInspection>;\n list?(): AsyncIterable<K>;\n}\n\nexport interface FamilyConfig<K = string> {\n provider: DatabaseFamilyProvider<K>;\n cache?: {\n /** Max concurrently open members (default 16). Leased members never evict. */\n maxOpen?: number;\n };\n}\n\n/** Concrete member identity: owning stack + family registration + key. */\nexport interface FamilyMemberEntry extends DatabaseEntry {\n readonly family: string;\n readonly keyId: string;\n}\n\nexport interface DatabaseLease {\n readonly entry: FamilyMemberEntry;\n release(): Promise<void>;\n}\n\ntype MemberState = {\n entry: FamilyMemberEntry;\n db?: Database;\n opening?: Promise<Database>;\n leases: number;\n lastUsed: number;\n};\n\nfunction unsupported(family: string, op: string): never {\n throw new SqlStackError(\n `Database family \"${family}\" does not support ${op}(): its provider declares no such capability.`\n );\n}\n\nexport class FamilyRuntime<K = string> {\n readonly name: string;\n readonly #stack: SqlStack;\n readonly #provider: DatabaseFamilyProvider<K>;\n readonly #maxOpen: number;\n readonly #members = new Map<string, MemberState>();\n #useTick = 0;\n #closed = false;\n\n constructor(stack: SqlStack, name: string, config: FamilyConfig<K>) {\n this.#stack = stack;\n this.name = name;\n this.#provider = config.provider;\n this.#maxOpen = config.cache?.maxOpen ?? 16;\n }\n\n normalize(input: unknown): { key: K; keyId: string } {\n const key = this.#provider.normalizeKey(input);\n const keyId = this.#provider.keyId ? this.#provider.keyId(key) : String(key);\n return { key, keyId };\n }\n\n /** Stable concrete identity for a key; no I/O. */\n ref(input: unknown): FamilyMemberEntry {\n return this.#member(input).entry;\n }\n\n async exists(input: unknown): Promise<boolean> {\n const { key } = this.normalize(input);\n if (!this.#provider.exists) unsupported(this.name, 'exists');\n return this.#provider.exists(key);\n }\n\n async create(input: unknown): Promise<void> {\n this.#assertOpen();\n const member = this.#member(input);\n if (!this.#provider.create) unsupported(this.name, 'create');\n const db = await this.#provider.create(member.key);\n await db.close();\n }\n\n async ensure(input: unknown): Promise<void> {\n this.#assertOpen();\n const member = this.#member(input);\n if (!this.#provider.ensure) unsupported(this.name, 'ensure');\n const db = await this.#provider.ensure(member.key);\n await db.close();\n }\n\n /** Acquire a lease on an opened (existing) member. */\n async acquire(input: unknown): Promise<DatabaseLease> {\n this.#assertOpen();\n const member = this.#member(input);\n await this.#open(member);\n member.leases++;\n member.lastUsed = ++this.#useTick;\n let released = false;\n return {\n entry: member.entry,\n release: async () => {\n if (released) return;\n released = true;\n member.leases = Math.max(0, member.leases - 1);\n this.#evictIfNeeded();\n },\n };\n }\n\n async with<T>(input: unknown, fn: (entry: FamilyMemberEntry) => Promise<T>): Promise<T> {\n const lease = await this.acquire(input);\n try {\n return await fn(lease.entry);\n } finally {\n await lease.release();\n }\n }\n\n /** Close/evict a member's cached handle; the database itself is preserved. */\n async closeMember(input: unknown): Promise<void> {\n const { keyId } = this.normalize(input);\n const member = this.#members.get(keyId);\n if (!member?.db) return;\n if (member.leases > 0) {\n throw new SqlStackError(\n `Cannot close \"${this.name}/${keyId}\": ${member.leases} lease(s) are active.`\n );\n }\n await this.#closeHandle(member);\n }\n\n /** Physically delete a member. Fails while leased; closes the cached handle first. */\n async deleteMember(input: unknown): Promise<void> {\n this.#assertOpen();\n const member = this.#member(input);\n if (!this.#provider.delete) unsupported(this.name, 'delete');\n if (member.leases > 0) {\n throw new SqlStackError(\n `Cannot delete \"${this.name}/${member.entry.keyId}\": ${member.leases} lease(s) are active.`\n );\n }\n if (member.db) await this.#closeHandle(member);\n await this.#provider.delete(member.key);\n this.#members.delete(member.entry.keyId);\n }\n\n async inspect(input: unknown): Promise<DatabaseInspection> {\n const member = this.#member(input);\n if (!this.#provider.inspect) unsupported(this.name, 'inspect');\n const facts = await this.#provider.inspect(member.key);\n return { ...facts, cached: !!member.db, activeLeases: member.leases };\n }\n\n /** Close every cached handle (root disposal). Databases are preserved. */\n async closeAll(): Promise<void> {\n this.#closed = true;\n const failures: string[] = [];\n for (const member of this.#members.values()) {\n if (!member.db) continue;\n try {\n await this.#closeHandle(member);\n } catch (err: any) {\n failures.push(`\"${this.name}/${member.entry.keyId}\": ${err?.message ?? String(err)}`);\n }\n }\n this.#members.clear();\n if (failures.length) {\n throw new SqlStackError(`Family close failed for ${failures.join(', ')}`);\n }\n }\n\n #member(input: unknown): MemberState & { key: K } {\n const { key, keyId } = this.normalize(input);\n let member = this.#members.get(keyId);\n if (!member) {\n const self = this;\n const entry: FamilyMemberEntry = {\n name: this.name,\n family: this.name,\n keyId,\n owned: true,\n stack: this.#stack,\n get db(): Database {\n const state = self.#members.get(keyId);\n if (!state?.db) {\n throw new SqlStackError(\n `Database family member \"${self.name}/${keyId}\" is not open. ` +\n 'Acquire it through withDatabase(...)/family.with(...) before querying.'\n );\n }\n return state.db;\n },\n };\n member = { entry, leases: 0, lastUsed: 0 };\n this.#members.set(keyId, member);\n }\n return Object.assign(member, { key: this.normalize(input).key });\n }\n\n async #open(member: MemberState & { key: K }): Promise<void> {\n if (member.db) return;\n if (!member.opening) {\n member.opening = this.#provider.open(member.key).finally(() => {\n member.opening = undefined;\n });\n member.opening.catch(() => undefined); // surfaced to awaiting callers\n }\n const db = await member.opening;\n member.db = db;\n this.#evictIfNeeded();\n }\n\n async #closeHandle(member: MemberState): Promise<void> {\n const db = member.db;\n member.db = undefined;\n if (db) await db.close();\n }\n\n #evictIfNeeded(): void {\n const open = [...this.#members.values()].filter((m) => m.db);\n if (open.length <= this.#maxOpen) return;\n const evictable = open\n .filter((m) => m.leases === 0)\n .sort((a, b) => a.lastUsed - b.lastUsed);\n for (const member of evictable) {\n if ([...this.#members.values()].filter((m) => m.db).length <= this.#maxOpen) break;\n // Fire-and-forget close; eviction failures must not break the acquiring flow.\n void this.#closeHandle(member).catch(() => undefined);\n }\n }\n\n #assertOpen(): void {\n if (this.#closed) {\n throw new SqlStackError(`Database family \"${this.name}\" belongs to a closed SqlStack.`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"family.js","sourceRoot":"","sources":["../../src/family.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Database } from './registry';\nimport { SqlStackError } from './core/errors';\nimport type { SqlStack, DatabaseEntry } from './stack';\n\n/**\n * Dynamic database families (spec 17): one registration that resolves many\n * concrete databases by key. The provider owns physical mechanics; the\n * family runtime owns identity, leases, bounded caching, and lifecycle.\n */\n\nexport interface DatabaseInspection {\n state: 'closed' | 'open' | 'missing';\n [fact: string]: unknown;\n}\n\nexport interface DatabaseFamilyProvider<K = string> {\n /** Normalize/validate an application key. Must be deterministic and safe. */\n normalizeKey(input: unknown): K;\n /** Serialize a normalized key to the identity string used for routing. */\n keyId?(key: K): string;\n /** Open an EXISTING database. Must fail if it does not exist (never create). */\n open(key: K): Promise<Database>;\n /** Create a NEW database. Must fail if it already exists. */\n create?(key: K): Promise<Database>;\n /** Explicit create-if-missing. */\n ensure?(key: K): Promise<Database>;\n exists?(key: K): Promise<boolean>;\n /** Physically delete the database (handle already closed by the runtime). */\n delete?(key: K): Promise<void>;\n inspect?(key: K): Promise<DatabaseInspection>;\n list?(): AsyncIterable<K>;\n}\n\nexport interface FamilyConfig<K = string> {\n provider: DatabaseFamilyProvider<K>;\n cache?: {\n /** Max concurrently open members (default 16). Leased members never evict. */\n maxOpen?: number;\n };\n}\n\n/** Concrete member identity: owning stack + family registration + key. */\nexport interface FamilyMemberEntry extends DatabaseEntry {\n readonly family: string;\n readonly keyId: string;\n}\n\nexport interface DatabaseLease {\n readonly entry: FamilyMemberEntry;\n release(): Promise<void>;\n}\n\ntype MemberState = {\n entry: FamilyMemberEntry;\n db?: Database;\n opening?: Promise<Database>;\n leases: number;\n lastUsed: number;\n};\n\nfunction unsupported(family: string, op: string): never {\n throw new SqlStackError(\n `Database family \"${family}\" does not support ${op}(): its provider declares no such capability.`\n );\n}\n\nexport class FamilyRuntime<K = string> {\n readonly name: string;\n readonly #stack: SqlStack;\n readonly #provider: DatabaseFamilyProvider<K>;\n readonly #maxOpen: number;\n readonly #members = new Map<string, MemberState>();\n #useTick = 0;\n #closed = false;\n\n constructor(stack: SqlStack, name: string, config: FamilyConfig<K>) {\n this.#stack = stack;\n this.name = name;\n this.#provider = config.provider;\n this.#maxOpen = config.cache?.maxOpen ?? 16;\n }\n\n normalize(input: unknown): { key: K; keyId: string } {\n const key = this.#provider.normalizeKey(input);\n const keyId = this.#provider.keyId ? this.#provider.keyId(key) : String(key);\n return { key, keyId };\n }\n\n /** Stable concrete identity for a key; no I/O. */\n ref(input: unknown): FamilyMemberEntry {\n return this.#member(input).entry;\n }\n\n async exists(input: unknown): Promise<boolean> {\n const { key } = this.normalize(input);\n if (!this.#provider.exists) unsupported(this.name, 'exists');\n return this.#provider.exists(key);\n }\n\n async create(input: unknown): Promise<void> {\n this.#assertOpen();\n const member = this.#member(input);\n if (!this.#provider.create) unsupported(this.name, 'create');\n const db = await this.#provider.create(member.key);\n await db.close();\n }\n\n async ensure(input: unknown): Promise<void> {\n this.#assertOpen();\n const member = this.#member(input);\n if (!this.#provider.ensure) unsupported(this.name, 'ensure');\n const db = await this.#provider.ensure(member.key);\n await db.close();\n }\n\n /** Acquire a lease on an opened (existing) member. */\n async acquire(input: unknown): Promise<DatabaseLease> {\n this.#assertOpen();\n const member = this.#member(input);\n await this.#open(member);\n member.leases++;\n member.lastUsed = ++this.#useTick;\n // Evict only after the lease is counted: with a small cache (maxOpen: 0)\n // the member just opened would otherwise be closed before it is used.\n this.#evictIfNeeded();\n let released = false;\n return {\n entry: member.entry,\n release: async () => {\n if (released) return;\n released = true;\n member.leases = Math.max(0, member.leases - 1);\n this.#evictIfNeeded();\n },\n };\n }\n\n async with<T>(input: unknown, fn: (entry: FamilyMemberEntry) => Promise<T>): Promise<T> {\n const lease = await this.acquire(input);\n try {\n return await fn(lease.entry);\n } finally {\n await lease.release();\n }\n }\n\n /** Close/evict a member's cached handle; the database itself is preserved. */\n async closeMember(input: unknown): Promise<void> {\n const { keyId } = this.normalize(input);\n const member = this.#members.get(keyId);\n if (!member?.db) return;\n if (member.leases > 0) {\n throw new SqlStackError(\n `Cannot close \"${this.name}/${keyId}\": ${member.leases} lease(s) are active.`\n );\n }\n await this.#closeHandle(member);\n }\n\n /** Physically delete a member. Fails while leased; closes the cached handle first. */\n async deleteMember(input: unknown): Promise<void> {\n this.#assertOpen();\n const member = this.#member(input);\n if (!this.#provider.delete) unsupported(this.name, 'delete');\n if (member.leases > 0) {\n throw new SqlStackError(\n `Cannot delete \"${this.name}/${member.entry.keyId}\": ${member.leases} lease(s) are active.`\n );\n }\n if (member.db) await this.#closeHandle(member);\n await this.#provider.delete(member.key);\n this.#members.delete(member.entry.keyId);\n }\n\n async inspect(input: unknown): Promise<DatabaseInspection> {\n const member = this.#member(input);\n if (!this.#provider.inspect) unsupported(this.name, 'inspect');\n const facts = await this.#provider.inspect(member.key);\n return { ...facts, cached: !!member.db, activeLeases: member.leases };\n }\n\n /** Close every cached handle (root disposal). Databases are preserved. */\n async closeAll(): Promise<void> {\n this.#closed = true;\n const failures: string[] = [];\n for (const member of this.#members.values()) {\n if (!member.db) continue;\n try {\n await this.#closeHandle(member);\n } catch (err: any) {\n failures.push(`\"${this.name}/${member.entry.keyId}\": ${err?.message ?? String(err)}`);\n }\n }\n this.#members.clear();\n if (failures.length) {\n throw new SqlStackError(`Family close failed for ${failures.join(', ')}`);\n }\n }\n\n #member(input: unknown): MemberState & { key: K } {\n const { key, keyId } = this.normalize(input);\n let member = this.#members.get(keyId);\n if (!member) {\n const self = this;\n const entry: FamilyMemberEntry = {\n name: this.name,\n family: this.name,\n keyId,\n owned: true,\n stack: this.#stack,\n get db(): Database {\n const state = self.#members.get(keyId);\n if (!state?.db) {\n throw new SqlStackError(\n `Database family member \"${self.name}/${keyId}\" is not open. ` +\n 'Acquire it through withDatabase(...)/family.with(...) before querying.'\n );\n }\n return state.db;\n },\n };\n member = { entry, leases: 0, lastUsed: 0 };\n this.#members.set(keyId, member);\n }\n return Object.assign(member, { key: this.normalize(input).key });\n }\n\n async #open(member: MemberState & { key: K }): Promise<void> {\n if (member.db) return;\n if (!member.opening) {\n member.opening = this.#provider.open(member.key).finally(() => {\n member.opening = undefined;\n });\n member.opening.catch(() => undefined); // surfaced to awaiting callers\n }\n const db = await member.opening;\n member.db = db;\n }\n\n async #closeHandle(member: MemberState): Promise<void> {\n const db = member.db;\n member.db = undefined;\n if (db) await db.close();\n }\n\n #evictIfNeeded(): void {\n const open = [...this.#members.values()].filter((m) => m.db);\n if (open.length <= this.#maxOpen) return;\n const evictable = open\n .filter((m) => m.leases === 0)\n .sort((a, b) => a.lastUsed - b.lastUsed);\n for (const member of evictable) {\n if ([...this.#members.values()].filter((m) => m.db).length <= this.#maxOpen) break;\n // Fire-and-forget close; eviction failures must not break the acquiring flow.\n void this.#closeHandle(member).catch(() => undefined);\n }\n }\n\n #assertOpen(): void {\n if (this.#closed) {\n throw new SqlStackError(`Database family \"${this.name}\" belongs to a closed SqlStack.`);\n }\n }\n}\n"]}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -25,5 +25,7 @@ export type { SqliteFamilyOptions } from './families/sqliteFamily';
|
|
|
25
25
|
export type { SqlResolver, SqlManifest, SqlResolutionRequest, ManifestResolverOptions } from './core/resolver';
|
|
26
26
|
export { FsResolver, ManifestResolver, MANIFEST_DIALECT_EXT, getActiveResolver } from './core/resolver';
|
|
27
27
|
export { SourceScanResolver } from './core/sourceScanResolver';
|
|
28
|
+
export type { SqlResources } from './core/resources';
|
|
29
|
+
export { lookupResource, normalizeResourcePath } from './core/resources';
|
|
28
30
|
export * from './binders/sqlBinder';
|
|
29
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAG5D,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,YAAY,CAAC;AAG3B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EACV,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/G,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAG5D,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,YAAY,CAAC;AAG3B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EACV,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/G,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGzE,cAAc,qBAAqB,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.SourceScanResolver = exports.getActiveResolver = exports.MANIFEST_DIALECT_EXT = exports.ManifestResolver = exports.FsResolver = exports.sqliteFamily = exports.FamilyRuntime = exports.resolveExecution = exports.activeSqlStack = exports.SqlStack = exports.SqlStackDB = exports.run = exports.SqlFragment = exports.sql = void 0;
|
|
17
|
+
exports.normalizeResourcePath = exports.lookupResource = exports.SourceScanResolver = exports.getActiveResolver = exports.MANIFEST_DIALECT_EXT = exports.ManifestResolver = exports.FsResolver = exports.sqliteFamily = exports.FamilyRuntime = exports.resolveExecution = exports.activeSqlStack = exports.SqlStack = exports.SqlStackDB = exports.run = exports.SqlFragment = exports.sql = void 0;
|
|
18
18
|
// SQL Template Strings
|
|
19
19
|
var sql_1 = require("./sql");
|
|
20
20
|
Object.defineProperty(exports, "sql", { enumerable: true, get: function () { return sql_1.sql; } });
|
|
@@ -60,6 +60,9 @@ Object.defineProperty(exports, "MANIFEST_DIALECT_EXT", { enumerable: true, get:
|
|
|
60
60
|
Object.defineProperty(exports, "getActiveResolver", { enumerable: true, get: function () { return resolver_1.getActiveResolver; } });
|
|
61
61
|
var sourceScanResolver_1 = require("./core/sourceScanResolver");
|
|
62
62
|
Object.defineProperty(exports, "SourceScanResolver", { enumerable: true, get: function () { return sourceScanResolver_1.SourceScanResolver; } });
|
|
63
|
+
var resources_1 = require("./core/resources");
|
|
64
|
+
Object.defineProperty(exports, "lookupResource", { enumerable: true, get: function () { return resources_1.lookupResource; } });
|
|
65
|
+
Object.defineProperty(exports, "normalizeResourcePath", { enumerable: true, get: function () { return resources_1.normalizeResourcePath; } });
|
|
63
66
|
// Legacy exports (kept for backward compatibility)
|
|
64
67
|
__exportStar(require("./binders/sqlBinder"), exports);
|
|
65
68
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uBAAuB;AACvB,6BAAyC;AAAhC,0FAAA,GAAG,OAAA;AAAE,kGAAA,WAAW,OAAA;AAEzB,mEAAmE;AACnE,mEAAmE;AACnE,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AAGZ,aAAa;AACb,2DAAyC;AACzC,qDAAmC;AACnC,wDAAsC;AACtC,2DAAyC;AACzC,8DAA4C;AAC5C,yDAAuC;AACvC,oDAAkC;AAElC,eAAe;AACf,iDAA+B;AAE/B,WAAW;AACX,6CAA2B;AAE3B,wBAAwB;AACxB,gDAA8B;AAC9B,mDAAiC;AAEjC,aAAa;AACb,8CAA4B;AAI5B,uCAAkD;AAAzC,sGAAA,UAAU,OAAA;AAEnB,gFAAgF;AAChF,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AAEjB,qCAA6D;AAApD,yGAAA,cAAc,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAEzC,sCAAsC;AACtC,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AAQtB,wDAAuD;AAA9C,4GAAA,YAAY,OAAA;AAKrB,4CAAwG;AAA/F,sGAAA,UAAU,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,gHAAA,oBAAoB,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAC9E,gEAA+D;AAAtD,wHAAA,kBAAkB,OAAA;AAE3B,mDAAmD;AACnD,sDAAoC","sourcesContent":["// SQL Template Strings\nexport { sql, SqlFragment } from './sql';\n\n// Query execution — `return run()` inside a @Query method body, or\n// `run(db, sql`...`)` anywhere with a database chosen at call time\nexport { run } from './run';\nexport type { RunDatabase, RejectCompiledSql } from './run';\n\n// Decorators\nexport * from './decorators/queryBinder';\nexport * from './decorators/query';\nexport * from './decorators/defaults';\nexport * from './decorators/resultShape';\nexport * from './decorators/validateResult';\nexport * from './decorators/transform';\nexport * from './decorators/page';\n\n// Transactions\nexport * from './transactions';\n\n// Adapters\nexport * from './adapters';\n\n// Errors and Validation\nexport * from './core/errors';\nexport * from './core/validator';\n\n// DTO Helper\nexport * from './utils/dto';\n\n// Database Registry and Types\nexport type { Dialect, WriteResult, PostgresWriteResult, QueryResult, Database } from './registry';\nexport { SqlStackDB, IStackDB } from './registry';\n\n// Environment-owned runtime (v3): per-root SqlStack + active-context resolution\nexport { SqlStack } from './stack';\nexport type { DatabaseEntry, DatabaseRegistration, SqlStackConfig } from './stack';\nexport { activeSqlStack, resolveExecution } from './runtime';\n\n// Dynamic database families (spec 17)\nexport { FamilyRuntime } from './family';\nexport type {\n DatabaseFamilyProvider,\n FamilyConfig,\n FamilyMemberEntry,\n DatabaseLease,\n DatabaseInspection,\n} from './family';\nexport { sqliteFamily } from './families/sqliteFamily';\nexport type { SqliteFamilyOptions } from './families/sqliteFamily';\n\n// SQL Resolvers (v2): pluggable SQL source resolution\nexport type { SqlResolver, SqlManifest, SqlResolutionRequest, ManifestResolverOptions } from './core/resolver';\nexport { FsResolver, ManifestResolver, MANIFEST_DIALECT_EXT, getActiveResolver } from './core/resolver';\nexport { SourceScanResolver } from './core/sourceScanResolver';\n\n// Legacy exports (kept for backward compatibility)\nexport * from './binders/sqlBinder';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uBAAuB;AACvB,6BAAyC;AAAhC,0FAAA,GAAG,OAAA;AAAE,kGAAA,WAAW,OAAA;AAEzB,mEAAmE;AACnE,mEAAmE;AACnE,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AAGZ,aAAa;AACb,2DAAyC;AACzC,qDAAmC;AACnC,wDAAsC;AACtC,2DAAyC;AACzC,8DAA4C;AAC5C,yDAAuC;AACvC,oDAAkC;AAElC,eAAe;AACf,iDAA+B;AAE/B,WAAW;AACX,6CAA2B;AAE3B,wBAAwB;AACxB,gDAA8B;AAC9B,mDAAiC;AAEjC,aAAa;AACb,8CAA4B;AAI5B,uCAAkD;AAAzC,sGAAA,UAAU,OAAA;AAEnB,gFAAgF;AAChF,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AAEjB,qCAA6D;AAApD,yGAAA,cAAc,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAEzC,sCAAsC;AACtC,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AAQtB,wDAAuD;AAA9C,4GAAA,YAAY,OAAA;AAKrB,4CAAwG;AAA/F,sGAAA,UAAU,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,gHAAA,oBAAoB,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAC9E,gEAA+D;AAAtD,wHAAA,kBAAkB,OAAA;AAE3B,8CAAyE;AAAhE,2GAAA,cAAc,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAE9C,mDAAmD;AACnD,sDAAoC","sourcesContent":["// SQL Template Strings\nexport { sql, SqlFragment } from './sql';\n\n// Query execution — `return run()` inside a @Query method body, or\n// `run(db, sql`...`)` anywhere with a database chosen at call time\nexport { run } from './run';\nexport type { RunDatabase, RejectCompiledSql } from './run';\n\n// Decorators\nexport * from './decorators/queryBinder';\nexport * from './decorators/query';\nexport * from './decorators/defaults';\nexport * from './decorators/resultShape';\nexport * from './decorators/validateResult';\nexport * from './decorators/transform';\nexport * from './decorators/page';\n\n// Transactions\nexport * from './transactions';\n\n// Adapters\nexport * from './adapters';\n\n// Errors and Validation\nexport * from './core/errors';\nexport * from './core/validator';\n\n// DTO Helper\nexport * from './utils/dto';\n\n// Database Registry and Types\nexport type { Dialect, WriteResult, PostgresWriteResult, QueryResult, Database } from './registry';\nexport { SqlStackDB, IStackDB } from './registry';\n\n// Environment-owned runtime (v3): per-root SqlStack + active-context resolution\nexport { SqlStack } from './stack';\nexport type { DatabaseEntry, DatabaseRegistration, SqlStackConfig } from './stack';\nexport { activeSqlStack, resolveExecution } from './runtime';\n\n// Dynamic database families (spec 17)\nexport { FamilyRuntime } from './family';\nexport type {\n DatabaseFamilyProvider,\n FamilyConfig,\n FamilyMemberEntry,\n DatabaseLease,\n DatabaseInspection,\n} from './family';\nexport { sqliteFamily } from './families/sqliteFamily';\nexport type { SqliteFamilyOptions } from './families/sqliteFamily';\n\n// SQL Resolvers (v2): pluggable SQL source resolution\nexport type { SqlResolver, SqlManifest, SqlResolutionRequest, ManifestResolverOptions } from './core/resolver';\nexport { FsResolver, ManifestResolver, MANIFEST_DIALECT_EXT, getActiveResolver } from './core/resolver';\nexport { SourceScanResolver } from './core/sourceScanResolver';\nexport type { SqlResources } from './core/resources';\nexport { lookupResource, normalizeResourcePath } from './core/resources';\n\n// Legacy exports (kept for backward compatibility)\nexport * from './binders/sqlBinder';\n"]}
|
package/dist/cjs/run.d.ts
CHANGED
|
@@ -35,9 +35,17 @@ export type RunInvocation = {
|
|
|
35
35
|
readonly fragment: SqlFragment;
|
|
36
36
|
} | {
|
|
37
37
|
readonly kind: 'params';
|
|
38
|
-
readonly db
|
|
38
|
+
readonly db?: RunDatabase | string;
|
|
39
39
|
readonly params: object;
|
|
40
|
+
} | {
|
|
41
|
+
readonly kind: 'db';
|
|
42
|
+
readonly db: RunDatabase | string;
|
|
40
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Type-level guard for run(db) with a name: a string containing whitespace is
|
|
46
|
+
* SQL text, never a database name. Build statements with the sql`` tag.
|
|
47
|
+
*/
|
|
48
|
+
export type RejectSqlText<D> = D extends string ? D extends `${string} ${string}` | `${string}\n${string}` | `${string}\t${string}` ? never : unknown : unknown;
|
|
41
49
|
/**
|
|
42
50
|
* Per-invocation context established by the @Query wrapper before the method
|
|
43
51
|
* body executes. `execute` performs the full query pipeline (resolve SQL,
|
|
@@ -64,7 +72,9 @@ export declare const runStorage: AsyncLocalStorage<RunContext>;
|
|
|
64
72
|
*
|
|
65
73
|
* Takes no arguments — the method's own arguments, database, SQL source,
|
|
66
74
|
* transaction, shaping, transform, and validation all come from the
|
|
67
|
-
* decorator context
|
|
75
|
+
* decorator context — except that a leading method argument that is a
|
|
76
|
+
* database handle (or a registered database name) selects the database and
|
|
77
|
+
* is not bound. T is inferred from the method's declared return type.
|
|
68
78
|
*
|
|
69
79
|
* @throws {DatabaseError} When the driver rejects the statement (original
|
|
70
80
|
* error in `.cause`).
|
|
@@ -130,6 +140,32 @@ export declare function run<T = unknown>(db: RunDatabase | string, query: SqlFra
|
|
|
130
140
|
* `.toSQL()` output, or for shape/validation failures.
|
|
131
141
|
*/
|
|
132
142
|
export declare function run<T = unknown, P extends object = object>(db: RunDatabase | string, params: P & RejectCompiledSql<P>): Promise<T>;
|
|
143
|
+
/**
|
|
144
|
+
* Inside a @Query method: run the method's own SQL against `db` (a handle or
|
|
145
|
+
* a registered database name), binding the method's own arguments exactly as
|
|
146
|
+
* run() does — except that a leading database handle/name argument of the
|
|
147
|
+
* method is never bound.
|
|
148
|
+
*
|
|
149
|
+
* @throws {DatabaseError} When binding fails, a named database cannot be
|
|
150
|
+
* resolved, or the driver rejects the statement.
|
|
151
|
+
* @throws {SqlStackError} When called outside a @Query method, or for
|
|
152
|
+
* shape/validation failures.
|
|
153
|
+
*/
|
|
154
|
+
export declare function run<T = unknown, D extends RunDatabase | string = RunDatabase | string>(db: D & RejectSqlText<D>): Promise<T>;
|
|
155
|
+
/**
|
|
156
|
+
* Inside a @Query method: run the method's own SQL binding only `params` (an
|
|
157
|
+
* object for `:named`, an array for `:argN`) against the database run() would
|
|
158
|
+
* use: the method's leading database handle/name argument, else the
|
|
159
|
+
* decorator context.
|
|
160
|
+
*
|
|
161
|
+
* @throws {DatabaseError} When binding fails, the database cannot be
|
|
162
|
+
* resolved, or the driver rejects the statement.
|
|
163
|
+
* @throws {SqlStackError} When called outside a @Query method, when passed
|
|
164
|
+
* `.toSQL()` output, or for shape/validation failures.
|
|
165
|
+
*/
|
|
166
|
+
export declare function run<T = unknown, P extends object = object>(params: P & RejectCompiledSql<P>): Promise<T>;
|
|
167
|
+
/** @internal A database handle: any object exposing query(sql, params). */
|
|
168
|
+
export declare function isRunDatabaseHandle(value: unknown): value is RunDatabase;
|
|
133
169
|
/** @internal A database chosen for one run, plus the transaction it joins. */
|
|
134
170
|
export type RunTarget = {
|
|
135
171
|
readonly db: RunDatabase;
|
|
@@ -140,9 +176,13 @@ export type RunTarget = {
|
|
|
140
176
|
};
|
|
141
177
|
/**
|
|
142
178
|
* @internal Resolve run's database argument. A name goes through the active
|
|
143
|
-
* SqlStack (or legacy registry) and joins that entry's transaction
|
|
179
|
+
* SqlStack (or legacy registry) and joins that entry's transaction — or,
|
|
180
|
+
* inside a @transaction scope with none open, opens one on first execution. A handle
|
|
144
181
|
* is used as-is — no registry lookup, so it works without any SqlStack — and
|
|
145
|
-
* joins
|
|
182
|
+
* behaves the same: it joins a transaction open in this flow on that same
|
|
183
|
+
* object, or, inside a @transaction scope with none open, opens one on the
|
|
184
|
+
* handle on first execution. Outside any scope a handle with no open
|
|
185
|
+
* transaction runs directly.
|
|
146
186
|
*/
|
|
147
187
|
export declare function resolveRunTarget(db: RunDatabase | string): Promise<RunTarget>;
|
|
148
188
|
/** @internal Run one bound statement on the target (inside its transaction, if any). */
|
package/dist/cjs/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAiB,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAkC,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GACtG,KAAK,GACL,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,GACjG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/run.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runStorage = void 0;
|
|
4
4
|
exports.run = run;
|
|
5
|
+
exports.isRunDatabaseHandle = isRunDatabaseHandle;
|
|
5
6
|
exports.resolveRunTarget = resolveRunTarget;
|
|
6
7
|
exports.executeOnTarget = executeOnTarget;
|
|
7
8
|
exports.toRunError = toRunError;
|
|
@@ -34,6 +35,13 @@ async function run(...args) {
|
|
|
34
35
|
if (invocation.kind === 'fragment') {
|
|
35
36
|
throw new errors_1.SqlStackError('run(query) called outside a @Query method has no database. Pass one explicitly: run(db, query).');
|
|
36
37
|
}
|
|
38
|
+
if (invocation.kind === 'db') {
|
|
39
|
+
throw new errors_1.SqlStackError('run(db) called outside a @Query method has no SQL source. Pass an sql`` fragment instead: run(db, sql`...`).');
|
|
40
|
+
}
|
|
41
|
+
if (invocation.db === undefined) {
|
|
42
|
+
throw new errors_1.SqlStackError('run(params) called outside a @Query method has no SQL source or database. ' +
|
|
43
|
+
'Pass a database and an sql`` fragment instead: run(db, sql`...`).');
|
|
44
|
+
}
|
|
37
45
|
throw new errors_1.SqlStackError('run(db, params) called outside a @Query method has no SQL source. ' +
|
|
38
46
|
'Pass an sql`` fragment instead: run(db, sql`...`).');
|
|
39
47
|
}
|
|
@@ -51,9 +59,21 @@ function parseRunArgs(args) {
|
|
|
51
59
|
const [query] = args;
|
|
52
60
|
if ((0, sql_1.isSqlFragment)(query))
|
|
53
61
|
return { kind: 'fragment', fragment: query };
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
if (typeof query === 'string') {
|
|
63
|
+
// A whitespace-free string is a database name: run(db).
|
|
64
|
+
if (isDatabaseNameText(query))
|
|
65
|
+
return { kind: 'db', db: query };
|
|
66
|
+
throw new errors_1.SqlStackError('run(query) does not accept SQL strings. Build the statement with the sql`` tag: run(sql`...`).');
|
|
67
|
+
}
|
|
68
|
+
if (isRunDatabaseHandle(query))
|
|
69
|
+
return { kind: 'db', db: query };
|
|
70
|
+
if (isCompiledSql(query)) {
|
|
71
|
+
throw new errors_1.SqlStackError('run(...) received the { sql, params } output of .toSQL(). Pass the sql`` fragment itself so run can ' +
|
|
72
|
+
'bind it for the target dialect: run(sql`...`).');
|
|
73
|
+
}
|
|
74
|
+
if (typeof query === 'object' && query !== null)
|
|
75
|
+
return { kind: 'params', params: query };
|
|
76
|
+
throw new errors_1.SqlStackError('run(x) requires an sql`` fragment, a params object/array, or a database handle/name.');
|
|
57
77
|
}
|
|
58
78
|
if (args.length === 2) {
|
|
59
79
|
const [db, second] = args;
|
|
@@ -73,6 +93,13 @@ function parseRunArgs(args) {
|
|
|
73
93
|
}
|
|
74
94
|
throw new errors_1.SqlStackError(`run() accepts at most 2 arguments, got ${args.length}.`);
|
|
75
95
|
}
|
|
96
|
+
/** @internal A database handle: any object exposing query(sql, params). */
|
|
97
|
+
function isRunDatabaseHandle(value) {
|
|
98
|
+
return typeof value === 'object' && value !== null && typeof value.query === 'function';
|
|
99
|
+
}
|
|
100
|
+
function isDatabaseNameText(value) {
|
|
101
|
+
return value.length > 0 && !/\s/.test(value);
|
|
102
|
+
}
|
|
76
103
|
function assertRunDatabase(db) {
|
|
77
104
|
if (typeof db === 'string' && db.length > 0)
|
|
78
105
|
return;
|
|
@@ -89,16 +116,20 @@ function isCompiledSql(value) {
|
|
|
89
116
|
}
|
|
90
117
|
/**
|
|
91
118
|
* @internal Resolve run's database argument. A name goes through the active
|
|
92
|
-
* SqlStack (or legacy registry) and joins that entry's transaction
|
|
119
|
+
* SqlStack (or legacy registry) and joins that entry's transaction — or,
|
|
120
|
+
* inside a @transaction scope with none open, opens one on first execution. A handle
|
|
93
121
|
* is used as-is — no registry lookup, so it works without any SqlStack — and
|
|
94
|
-
* joins
|
|
122
|
+
* behaves the same: it joins a transaction open in this flow on that same
|
|
123
|
+
* object, or, inside a @transaction scope with none open, opens one on the
|
|
124
|
+
* handle on first execution. Outside any scope a handle with no open
|
|
125
|
+
* transaction runs directly.
|
|
95
126
|
*/
|
|
96
127
|
async function resolveRunTarget(db) {
|
|
97
128
|
if (typeof db === 'string') {
|
|
98
129
|
const { entry, resolver } = await (0, runtime_1.resolveExecution)(db);
|
|
99
|
-
return { db: entry.db, tx: (0, transactions_1.
|
|
130
|
+
return { db: entry.db, tx: (0, transactions_1.getTransactionTarget)(entry), resolver, byName: true };
|
|
100
131
|
}
|
|
101
|
-
return { db, tx: (0, transactions_1.
|
|
132
|
+
return { db, tx: (0, transactions_1.getTransactionTargetForHandle)(db), resolver: undefined, byName: false };
|
|
102
133
|
}
|
|
103
134
|
/** @internal Run one bound statement on the target (inside its transaction, if any). */
|
|
104
135
|
async function executeOnTarget(target, boundSql, params) {
|