mythik-server 0.1.2 → 0.1.4

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.
Files changed (39) hide show
  1. package/README.md +54 -14
  2. package/dist/audit.js +1 -1
  3. package/dist/audit.js.map +1 -1
  4. package/dist/auth/db-auth-provider.d.ts +2 -2
  5. package/dist/auth/db-auth-provider.d.ts.map +1 -1
  6. package/dist/auth/db-auth-provider.js +17 -15
  7. package/dist/auth/db-auth-provider.js.map +1 -1
  8. package/dist/auth/scope-filter.d.ts +7 -1
  9. package/dist/auth/scope-filter.d.ts.map +1 -1
  10. package/dist/auth/scope-filter.js +24 -4
  11. package/dist/auth/scope-filter.js.map +1 -1
  12. package/dist/catalog-builder.d.ts +2 -1
  13. package/dist/catalog-builder.d.ts.map +1 -1
  14. package/dist/catalog-builder.js +24 -13
  15. package/dist/catalog-builder.js.map +1 -1
  16. package/dist/connection.d.ts +4 -2
  17. package/dist/connection.d.ts.map +1 -1
  18. package/dist/connection.js +74 -7
  19. package/dist/connection.js.map +1 -1
  20. package/dist/crud-builder.d.ts +8 -3
  21. package/dist/crud-builder.d.ts.map +1 -1
  22. package/dist/crud-builder.js +40 -16
  23. package/dist/crud-builder.js.map +1 -1
  24. package/dist/middleware/error-handler.js +1 -1
  25. package/dist/middleware/error-handler.js.map +1 -1
  26. package/dist/query-engine.d.ts +12 -4
  27. package/dist/query-engine.d.ts.map +1 -1
  28. package/dist/query-engine.js +12 -17
  29. package/dist/query-engine.js.map +1 -1
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/server.js +111 -159
  32. package/dist/server.js.map +1 -1
  33. package/dist/spec-serving.d.ts +7 -3
  34. package/dist/spec-serving.d.ts.map +1 -1
  35. package/dist/spec-serving.js +36 -12
  36. package/dist/spec-serving.js.map +1 -1
  37. package/dist/types.d.ts +34 -11
  38. package/dist/types.d.ts.map +1 -1
  39. package/package.json +2 -3
package/README.md CHANGED
@@ -30,6 +30,21 @@ wired in.
30
30
  npm install mythik-server
31
31
  ```
32
32
 
33
+ Install the SQL driver for your selected database explicitly:
34
+
35
+ ```bash
36
+ npm install pg # PostgreSQL
37
+ npm install mysql2 # MySQL
38
+ npm install mssql # SQL Server
39
+ npm install better-sqlite3 # SQLite
40
+ ```
41
+
42
+ SQLite uses the native `better-sqlite3` adapter. If npm prints warnings
43
+ from that adapter's transitive native-build helpers, the warning belongs
44
+ to the SQLite adapter install path, not to `mythik-server` itself.
45
+ Missing SQL adapter errors include the package name and install command
46
+ for the selected dialect.
47
+
33
48
  `mythik` is included as a dependency — no separate install required.
34
49
 
35
50
  ## When to install this
@@ -54,6 +69,11 @@ below for what it actually checks.
54
69
  ApiSpec, opens the database connection, registers all declared
55
70
  endpoints, and exposes a `start(port)` method.
56
71
 
72
+ - **Dialect-aware SQL runtime** — generated CRUD, catalogs,
73
+ pagination, auth provider queries, and scope filters compile through
74
+ the selected database driver. Supported dialects are SQL Server,
75
+ PostgreSQL, MySQL, and SQLite.
76
+
57
77
  - **Endpoint patterns** — your ApiSpec declares each endpoint as one
58
78
  of four shapes; the server wires the route, validates inputs,
59
79
  enforces auth, and applies RLS automatically:
@@ -82,11 +102,8 @@ import { createServer } from 'mythik-server';
82
102
  const server = createServer({
83
103
  spec: './api-spec.json',
84
104
  database: {
85
- server: process.env.DB_SERVER!,
86
- database: process.env.DB_NAME!,
87
- user: process.env.DB_USER!,
88
- password: process.env.DB_PASSWORD!,
89
- trustServerCertificate: true,
105
+ type: 'postgres',
106
+ connectionString: process.env.DATABASE_URL!,
90
107
  },
91
108
  });
92
109
 
@@ -97,6 +114,22 @@ await server.start(3010);
97
114
  policy, catalogs, and CRUD shape. See `ai-context.md` (bundled in the
98
115
  `mythik` package) for the ApiSpec schema and patterns.
99
116
 
117
+ For local demos and tests, SQLite is a one-file option:
118
+
119
+ ```ts
120
+ const server = createServer({
121
+ spec: './api-spec.json',
122
+ database: { type: 'sqlite', filename: './mythik.db' },
123
+ });
124
+ ```
125
+
126
+ Set `spec.dialect` in the ApiSpec to match the server database when
127
+ Mythik should generate CRUD/catalog/pagination/scope SQL for that
128
+ dialect. Custom SQL remains dialect-native; Mythik compiles named
129
+ params (`@name`) but does not translate a SQL Server query into
130
+ PostgreSQL/MySQL/SQLite SQL at runtime. MySQL generated upsert SQL
131
+ targets MySQL 8.0.19+.
132
+
100
133
  ## ApiSpec philosophy
101
134
 
102
135
  The ApiSpec describes **what** the API does — not **how**. Routes,
@@ -158,12 +191,19 @@ to detect; in Mythik both `roleAccess` (frontend) and `policies`
158
191
  - [`mythik-react`](https://github.com/mldixdev/mythik/tree/main/packages/react#readme) — the frontend consuming this API
159
192
  - [`mythik-cli`](https://github.com/mldixdev/mythik/tree/main/packages/cli#readme) — author and cross-validate ApiSpecs (the AI-first surface)
160
193
 
161
- ## Status
162
-
163
- `v0.1.2` public release. Use with `mythik contract` to cross-check
164
- frontend specs against backend endpoints before deployment. APIs are
165
- documented for real-world feedback as the framework evolves.
166
-
167
- ## License
168
-
169
- Apache-2.0.
194
+ ## Status
195
+
196
+ Public release line. Use with `mythik contract` to cross-check
197
+ frontend specs against backend endpoints before deployment. APIs are
198
+ documented for real-world feedback as the framework evolves.
199
+
200
+ ## Releases
201
+
202
+ Release notes and patch details are published in the
203
+ [CHANGELOG](https://github.com/mldixdev/mythik/blob/main/CHANGELOG.md)
204
+ and on
205
+ [GitHub Releases](https://github.com/mldixdev/mythik/releases).
206
+
207
+ ## License
208
+
209
+ Apache-2.0.
package/dist/audit.js CHANGED
@@ -19,7 +19,7 @@ function getTimestamp(timezone) {
19
19
  });
20
20
  const parts = formatter.formatToParts(new Date());
21
21
  const get = (type) => parts.find(p => p.type === type)?.value ?? '0';
22
- // Use Date.UTC so mssql sends the value as-is to SQL Server (no local timezone conversion)
22
+ // Use Date.UTC so SQL Server receives the value as-is (no local timezone conversion)
23
23
  return new Date(Date.UTC(parseInt(get('year')), parseInt(get('month')) - 1, parseInt(get('day')), parseInt(get('hour')), parseInt(get('minute')), parseInt(get('second'))));
24
24
  }
25
25
  /**
package/dist/audit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,SAAS,YAAY,CAAC,QAAiB;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,IAAI,EAAE,CAAC;IAEjC,gEAAgE;IAChE,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACjD,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,CAAC,IAAkC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC;IAEnG,2FAA2F;IAC3F,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CACtB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACrB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAC1B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACpB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACrB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EACvB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CACxB,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA+B,EAC/B,KAAkB,EAClB,QAAuB,EACvB,SAA8B;IAE9B,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ;YAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;QACpE,IAAI,KAAK,CAAC,SAAS;YAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;IACrD,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ;QAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;IACpE,IAAI,KAAK,CAAC,SAAS;QAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,SAAS,YAAY,CAAC,QAAiB;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,IAAI,EAAE,CAAC;IAEjC,gEAAgE;IAChE,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACjD,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,CAAC,IAAkC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC;IAEnG,qFAAqF;IACrF,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CACtB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACrB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAC1B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACpB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACrB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EACvB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CACxB,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA+B,EAC/B,KAAkB,EAClB,QAAuB,EACvB,SAA8B;IAE9B,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ;YAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;QACpE,IAAI,KAAK,CAAC,SAAS;YAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;IACrD,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ;QAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;IACpE,IAAI,KAAK,CAAC,SAAS;QAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;AACrD,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ConnectionPool } from 'mssql';
1
+ import type { SqlDriver } from 'mythik/server';
2
2
  import type { ProviderConfig, JwtConfig, LoginResponse } from './types.js';
3
3
  import { type RefreshStore } from './refresh-store.js';
4
4
  export interface DbAuthProvider {
@@ -6,5 +6,5 @@ export interface DbAuthProvider {
6
6
  refresh(refreshToken: string): Promise<LoginResponse>;
7
7
  getRefreshStore(): RefreshStore;
8
8
  }
9
- export declare function createDbAuthProvider(config: ProviderConfig, jwtConfig: JwtConfig, pool: ConnectionPool): DbAuthProvider;
9
+ export declare function createDbAuthProvider(config: ProviderConfig, jwtConfig: JwtConfig, db: SqlDriver): DbAuthProvider;
10
10
  //# sourceMappingURL=db-auth-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/db-auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAqB,MAAM,YAAY,CAAC;AAG9F,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACtD,eAAe,IAAI,YAAY,CAAC;CACjC;AAYD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,cAAc,GACnB,cAAc,CAiIhB"}
1
+ {"version":3,"file":"db-auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/db-auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAqB,MAAM,YAAY,CAAC;AAG9F,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG3E,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACtD,eAAe,IAAI,YAAY,CAAC;CACjC;AAYD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,SAAS,GACZ,cAAc,CA6HhB"}
@@ -1,6 +1,7 @@
1
1
  import { createJwtStrategy } from './jwt-strategy.js';
2
2
  import { getPasswordVerifier } from './password-verifier.js';
3
3
  import { createRefreshStore } from './refresh-store.js';
4
+ import { assertValidIdentifier } from '../validation/identifier-guard.js';
4
5
  /** Case-insensitive field lookup — SQL Server column casing varies by driver/config */
5
6
  function getField(row, fieldName) {
6
7
  if (fieldName in row)
@@ -12,38 +13,34 @@ function getField(row, fieldName) {
12
13
  }
13
14
  return undefined;
14
15
  }
15
- export function createDbAuthProvider(config, jwtConfig, pool) {
16
+ export function createDbAuthProvider(config, jwtConfig, db) {
16
17
  const jwtStrategy = createJwtStrategy(jwtConfig);
17
18
  const passwordVerifier = getPasswordVerifier(config.passwordHash);
18
19
  const refreshStore = createRefreshStore(jwtConfig.refreshExpiresIn ?? 10080);
19
20
  const expiresInSeconds = (jwtConfig.expiresIn ?? 60) * 60;
20
21
  const claimsMapping = jwtConfig.claims ?? {};
21
22
  async function queryList(sql, username) {
22
- const req = pool.request();
23
- req.input('username', username);
24
- const result = await req.query(sql);
25
- return result.recordset.map((r) => {
23
+ const rows = await db.query(sql, { username });
24
+ return rows.map((r) => {
26
25
  const keys = Object.keys(r);
27
26
  return r.val ?? r[keys[0]];
28
27
  });
29
28
  }
30
29
  async function queryScalar(sql, username) {
31
- const req = pool.request();
32
- req.input('username', username);
33
- const result = await req.query(sql);
34
- if (!result.recordset[0])
30
+ const rows = await db.query(sql, { username });
31
+ if (!rows[0])
35
32
  return null;
36
- const row = result.recordset[0];
33
+ const row = rows[0];
37
34
  const keys = Object.keys(row);
38
35
  return row.val ?? row[keys[0]] ?? null;
39
36
  }
40
37
  async function lookupUser(username) {
41
- const req = pool.request();
42
- req.input('username', username);
38
+ assertValidIdentifier(config.usersTable, 'auth.provider.usersTable');
39
+ assertValidIdentifier(config.usernameColumn, 'auth.provider.usernameColumn');
43
40
  const condition = config.activeCondition ? ` AND ${config.activeCondition}` : '';
44
- const sql = `SELECT * FROM ${config.usersTable} WHERE ${config.usernameColumn} = @username${condition}`;
45
- const result = await req.query(sql);
46
- return result.recordset[0] ?? null;
41
+ const sql = `SELECT * FROM ${quoteIdentifierPath(db, config.usersTable)} WHERE ${quoteIdentifierPath(db, config.usernameColumn)} = @username${condition}`;
42
+ const rows = await db.query(sql, { username });
43
+ return rows[0] ?? null;
47
44
  }
48
45
  async function buildUserInfo(username, userRow) {
49
46
  const promises = [
@@ -127,4 +124,9 @@ export function createDbAuthProvider(config, jwtConfig, pool) {
127
124
  }
128
125
  return { login, refresh, getRefreshStore };
129
126
  }
127
+ function quoteIdentifierPath(driver, identifier) {
128
+ return identifier.includes('.')
129
+ ? driver.quoteQualified(...identifier.split('.'))
130
+ : driver.quoteIdent(identifier);
131
+ }
130
132
  //# sourceMappingURL=db-auth-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-auth-provider.js","sourceRoot":"","sources":["../../src/auth/db-auth-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-auth-provider.js","sourceRoot":"","sources":["../../src/auth/db-auth-provider.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,18 @@
1
1
  import type { ScopeFilterConfig } from './types.js';
2
+ import type { SqlDriver } from 'mythik/server';
2
3
  /** @internal Alias used when Mythik wraps a source query before applying scope filters. */
3
4
  export declare const SCOPE_ALIAS = "_scoped";
4
5
  export interface ScopeClause {
5
6
  sql: string;
6
7
  params: Record<string, unknown>;
7
8
  }
9
+ export interface ScopeWhereOptions {
10
+ columnOverride?: string;
11
+ driver?: SqlDriver;
12
+ qualifier?: string | null;
13
+ }
8
14
  export declare function resolveActiveScope(headerValue: string | undefined, type: 'int' | 'string' | undefined): unknown | null;
9
- export declare function buildScopeWhereClause(config: ScopeFilterConfig, userScope: unknown[], activeScope: unknown | undefined, userRoles: string[], columnOverride?: string): ScopeClause | null;
15
+ export declare function buildScopeWhereClause(config: ScopeFilterConfig, userScope: unknown[], activeScope: unknown | undefined, userRoles: string[], columnOverrideOrOptions?: string | ScopeWhereOptions): ScopeClause | null;
10
16
  export declare function validateScopeForInsert(config: ScopeFilterConfig, body: Record<string, unknown>, userScope: unknown[], userRoles: string[]): boolean;
11
17
  export declare function wrapQueryWithScopeFilter(originalSql: string, scopeClause: ScopeClause): string;
12
18
  //# sourceMappingURL=scope-filter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope-filter.d.ts","sourceRoot":"","sources":["../../src/auth/scope-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,2FAA2F;AAC3F,eAAO,MAAM,WAAW,YAAY,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GACjC,OAAO,GAAG,IAAI,CAKhB;AAMD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,OAAO,EAAE,EACpB,WAAW,EAAE,OAAO,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,EAAE,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,WAAW,GAAG,IAAI,CA4BpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,EAAE,OAAO,EAAE,EACpB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAST;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,MAAM,CAER"}
1
+ {"version":3,"file":"scope-filter.d.ts","sourceRoot":"","sources":["../../src/auth/scope-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,2FAA2F;AAC3F,eAAO,MAAM,WAAW,YAAY,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GACjC,OAAO,GAAG,IAAI,CAKhB;AAMD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,OAAO,EAAE,EACpB,WAAW,EAAE,OAAO,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,EAAE,EACnB,uBAAuB,CAAC,EAAE,MAAM,GAAG,iBAAiB,GACnD,WAAW,GAAG,IAAI,CA8BpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,EAAE,OAAO,EAAE,EACpB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAST;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,MAAM,CAER"}
@@ -12,16 +12,18 @@ export function resolveActiveScope(headerValue, type) {
12
12
  function hasBypassRole(bypassRoles, userRoles) {
13
13
  return bypassRoles.some(role => userRoles.includes(role));
14
14
  }
15
- export function buildScopeWhereClause(config, userScope, activeScope, userRoles, columnOverride) {
15
+ export function buildScopeWhereClause(config, userScope, activeScope, userRoles, columnOverrideOrOptions) {
16
16
  const bypassRoles = config.bypassRoles ?? [];
17
17
  if (hasBypassRole(bypassRoles, userRoles))
18
18
  return null;
19
- const column = columnOverride ?? config.column;
19
+ const options = normalizeScopeWhereOptions(columnOverrideOrOptions);
20
+ const column = options.columnOverride ?? config.column;
20
21
  assertValidIdentifier(column, 'scopeFilter.column');
21
22
  const mode = config.mode ?? 'all';
23
+ const columnSql = scopeColumnSql(column, options);
22
24
  if (mode === 'select') {
23
25
  return {
24
- sql: `${SCOPE_ALIAS}.${column} = @_activeScope`,
26
+ sql: `${columnSql} = @_activeScope`,
25
27
  params: { _activeScope: activeScope },
26
28
  };
27
29
  }
@@ -33,7 +35,7 @@ export function buildScopeWhereClause(config, userScope, activeScope, userRoles,
33
35
  const params = {};
34
36
  userScope.forEach((val, i) => { params[`_scope${i}`] = val; });
35
37
  return {
36
- sql: `${SCOPE_ALIAS}.${column} IN (${paramNames.join(', ')})`,
38
+ sql: `${columnSql} IN (${paramNames.join(', ')})`,
37
39
  params,
38
40
  };
39
41
  }
@@ -50,4 +52,22 @@ export function validateScopeForInsert(config, body, userScope, userRoles) {
50
52
  export function wrapQueryWithScopeFilter(originalSql, scopeClause) {
51
53
  return `SELECT * FROM (\n${originalSql}\n) AS ${SCOPE_ALIAS}\nWHERE ${scopeClause.sql}`;
52
54
  }
55
+ function normalizeScopeWhereOptions(value) {
56
+ if (typeof value === 'string')
57
+ return { columnOverride: value };
58
+ return value ?? {};
59
+ }
60
+ function scopeColumnSql(column, options) {
61
+ const columnSql = options.driver ? quoteIdentifierPath(options.driver, column) : column;
62
+ const qualifier = options.qualifier === undefined ? SCOPE_ALIAS : options.qualifier;
63
+ if (qualifier === null || qualifier === '')
64
+ return columnSql;
65
+ assertValidIdentifier(qualifier, 'scopeFilter.qualifier');
66
+ return `${qualifier}.${columnSql}`;
67
+ }
68
+ function quoteIdentifierPath(driver, identifier) {
69
+ return identifier.includes('.')
70
+ ? driver.quoteQualified(...identifier.split('.'))
71
+ : driver.quoteIdent(identifier);
72
+ }
53
73
  //# sourceMappingURL=scope-filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope-filter.js","sourceRoot":"","sources":["../../src/auth/scope-filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope-filter.js","sourceRoot":"","sources":["../../src/auth/scope-filter.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  import type { CatalogConfig } from './types.js';
2
- export declare function buildCatalogQuery(config: CatalogConfig): string | null;
2
+ import type { SqlDriver } from 'mythik/server';
3
+ export declare function buildCatalogQuery(driver: SqlDriver, config: CatalogConfig): string | null;
3
4
  //# sourceMappingURL=catalog-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-builder.d.ts","sourceRoot":"","sources":["../src/catalog-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAiCtE"}
1
+ {"version":3,"file":"catalog-builder.d.ts","sourceRoot":"","sources":["../src/catalog-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAoCzF"}
@@ -1,5 +1,5 @@
1
1
  import { assertValidIdentifier } from './validation/identifier-guard.js';
2
- export function buildCatalogQuery(config) {
2
+ export function buildCatalogQuery(driver, config) {
3
3
  if (config.static)
4
4
  return null;
5
5
  if (!config.from)
@@ -8,28 +8,39 @@ export function buildCatalogQuery(config) {
8
8
  if (config.distinct) {
9
9
  assertValidIdentifier(config.distinct, 'catalog.distinct');
10
10
  const orderByClause = config.orderBy
11
- ? `ORDER BY ${bracketOrderBy(config.orderBy)}`
12
- : `ORDER BY [${config.distinct}] ASC`;
13
- return `SELECT DISTINCT [${config.distinct}] AS [value], [${config.distinct}] AS [label] FROM [${config.from}] ${orderByClause}`;
11
+ ? `ORDER BY ${quoteOrderBy(driver, config.orderBy)}`
12
+ : `ORDER BY ${quoteIdentifierPath(driver, config.distinct)} ASC`;
13
+ return `SELECT DISTINCT ${quoteIdentifierPath(driver, config.distinct)} AS ${driver.quoteIdent('value')}, ${quoteIdentifierPath(driver, config.distinct)} AS ${driver.quoteIdent('label')} FROM ${quoteIdentifierPath(driver, config.from)} ${orderByClause}`;
14
14
  }
15
15
  assertValidIdentifier(config.value, 'catalog.value');
16
16
  assertValidIdentifier(config.label, 'catalog.label');
17
- const selectParts = [`[${config.value}] AS [value]`, `[${config.label}] AS [label]`];
17
+ const selectParts = [
18
+ `${quoteIdentifierPath(driver, config.value)} AS ${driver.quoteIdent('value')}`,
19
+ `${quoteIdentifierPath(driver, config.label)} AS ${driver.quoteIdent('label')}`,
20
+ ];
18
21
  if (config.extra) {
19
22
  for (const field of config.extra) {
20
23
  assertValidIdentifier(field, 'catalog.extra');
21
- selectParts.push(`[${field}]`);
24
+ selectParts.push(quoteIdentifierPath(driver, field));
22
25
  }
23
26
  }
24
27
  const whereClause = config.where ? ` WHERE ${config.where}` : '';
25
28
  const orderByClause = config.orderBy
26
- ? `ORDER BY ${bracketOrderBy(config.orderBy)}`
27
- : `ORDER BY [${config.label}] ASC`;
28
- return `SELECT ${selectParts.join(', ')} FROM [${config.from}]${whereClause} ${orderByClause}`;
29
+ ? `ORDER BY ${quoteOrderBy(driver, config.orderBy)}`
30
+ : `ORDER BY ${quoteIdentifierPath(driver, config.label)} ASC`;
31
+ return `SELECT ${selectParts.join(', ')} FROM ${quoteIdentifierPath(driver, config.from)}${whereClause} ${orderByClause}`;
29
32
  }
30
- function bracketOrderBy(orderBy) {
31
- return orderBy.replace(/^(\w+)(\s+(?:ASC|DESC))?$/i, (_match, col, dir) => {
32
- return `[${col}]${dir ?? ''}`;
33
- });
33
+ function quoteIdentifierPath(driver, identifier) {
34
+ return identifier.includes('.')
35
+ ? driver.quoteQualified(...identifier.split('.'))
36
+ : driver.quoteIdent(identifier);
37
+ }
38
+ function quoteOrderBy(driver, orderBy) {
39
+ const match = /^([a-zA-Z_][a-zA-Z0-9_.]*)(\s+(?:ASC|DESC))?$/i.exec(orderBy.trim());
40
+ if (!match)
41
+ return orderBy;
42
+ const [, column, direction] = match;
43
+ assertValidIdentifier(column, 'catalog.orderBy');
44
+ return `${quoteIdentifierPath(driver, column)}${direction ?? ''}`;
34
45
  }
35
46
  //# sourceMappingURL=catalog-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-builder.js","sourceRoot":"","sources":["../src/catalog-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE/B,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAE9B,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO;YAClC,CAAC,CAAC,YAAY,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YAC9C,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,OAAO,CAAC;QACxC,OAAO,oBAAoB,MAAM,CAAC,QAAQ,kBAAkB,MAAM,CAAC,QAAQ,sBAAsB,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;IACnI,CAAC;IAED,qBAAqB,CAAC,MAAM,CAAC,KAAM,EAAE,eAAe,CAAC,CAAC;IACtD,qBAAqB,CAAC,MAAM,CAAC,KAAM,EAAE,eAAe,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,cAAc,EAAE,IAAI,MAAM,CAAC,KAAK,cAAc,CAAC,CAAC;IAErF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,qBAAqB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAC9C,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO;QAClC,CAAC,CAAC,YAAY,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC9C,CAAC,CAAC,aAAa,MAAM,CAAC,KAAK,OAAO,CAAC;IAErC,OAAO,UAAU,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;AACjG,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,OAAO,CAAC,OAAO,CAAC,4BAA4B,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,GAAuB,EAAE,EAAE;QACpG,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"catalog-builder.js","sourceRoot":"","sources":["../src/catalog-builder.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- import { type ConnectionPool } from 'mssql';
1
+ import type { SqlDialect, SqlDriver, SqlDriverConfig } from 'mythik/server';
2
2
  import type { ConnectionConfig } from './types.js';
3
- export declare function createConnectionPool(config: ConnectionConfig): Promise<ConnectionPool>;
3
+ export declare function resolveDatabaseDialect(config: ConnectionConfig, expectedDialect?: SqlDialect): SqlDialect;
4
+ export declare function toSqlDriverConfig(config: ConnectionConfig, expectedDialect?: SqlDialect): SqlDriverConfig;
5
+ export declare function createDatabaseDriver(config: ConnectionConfig, expectedDialect?: SqlDialect): SqlDriver;
4
6
  //# sourceMappingURL=connection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgB5F"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EACV,gBAAgB,EAKjB,MAAM,YAAY,CAAC;AAgBpB,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,UAAU,GAAG,UAAU,CAazG;AAsCD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,UAAU,GAAG,eAAe,CA4BzG;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,UAAU,GAAG,SAAS,CAEtG"}
@@ -1,18 +1,85 @@
1
- import sql from 'mssql';
1
+ import { createSqlDriver } from 'mythik/server';
2
2
  import { resolveEnvVars } from './spec-loader.js';
3
- export async function createConnectionPool(config) {
3
+ const warnedLegacyDefaultConfigs = new WeakSet();
4
+ function withoutType(config) {
5
+ const { type: _type, ...rest } = config;
6
+ return rest;
7
+ }
8
+ function normalizePort(value, fallback) {
9
+ if (value === undefined || value === null || value === '')
10
+ return fallback;
11
+ const parsed = typeof value === 'number' ? value : Number(value);
12
+ return Number.isFinite(parsed) ? parsed : fallback;
13
+ }
14
+ export function resolveDatabaseDialect(config, expectedDialect) {
15
+ const declaredDialect = config.type ?? 'sqlserver';
16
+ if (expectedDialect && declaredDialect !== expectedDialect) {
17
+ throw new Error(`Database dialect mismatch: ApiSpec requested "${expectedDialect}" but database config is "${declaredDialect}".`);
18
+ }
19
+ if (!config.type && (!expectedDialect || expectedDialect === 'sqlserver') && !warnedLegacyDefaultConfigs.has(config)) {
20
+ warnedLegacyDefaultConfigs.add(config);
21
+ console.warn('Mythik server database config omitted "type"; defaulting to "sqlserver" for backwards compatibility.');
22
+ }
23
+ return expectedDialect ?? declaredDialect;
24
+ }
25
+ function sqlServerConnection(config) {
4
26
  const resolved = resolveEnvVars(config);
5
- const pool = new sql.ConnectionPool({
27
+ return {
6
28
  server: resolved.server,
7
29
  database: resolved.database,
8
30
  user: resolved.user,
9
31
  password: resolved.password,
10
- port: resolved.port ?? 1433,
32
+ port: normalizePort(resolved.port, 1433),
11
33
  options: {
12
34
  trustServerCertificate: resolved.trustServerCertificate ?? true,
35
+ trustedConnection: resolved.trustedConnection ?? false,
13
36
  },
14
- });
15
- await pool.connect();
16
- return pool;
37
+ };
38
+ }
39
+ function postgresConnection(config) {
40
+ const resolved = resolveEnvVars(config);
41
+ if (resolved.connectionString) {
42
+ return { ...withoutType(resolved), connectionString: resolved.connectionString };
43
+ }
44
+ return withoutType(resolved);
45
+ }
46
+ function mysqlConnection(config) {
47
+ const resolved = resolveEnvVars(config);
48
+ if (resolved.uri) {
49
+ return resolved.uri;
50
+ }
51
+ return withoutType(resolved);
52
+ }
53
+ function sqliteConnection(config) {
54
+ const resolved = resolveEnvVars(config);
55
+ return withoutType(resolved);
56
+ }
57
+ export function toSqlDriverConfig(config, expectedDialect) {
58
+ const dialect = resolveDatabaseDialect(config, expectedDialect);
59
+ if (dialect === 'sqlserver') {
60
+ return {
61
+ dialect,
62
+ connection: sqlServerConnection(config),
63
+ };
64
+ }
65
+ if (dialect === 'postgres') {
66
+ return {
67
+ dialect,
68
+ connection: postgresConnection(config),
69
+ };
70
+ }
71
+ if (dialect === 'mysql') {
72
+ return {
73
+ dialect,
74
+ connection: mysqlConnection(config),
75
+ };
76
+ }
77
+ return {
78
+ dialect,
79
+ connection: sqliteConnection(config),
80
+ };
81
+ }
82
+ export function createDatabaseDriver(config, expectedDialect) {
83
+ return createSqlDriver(toSqlDriverConfig(config, expectedDialect));
17
84
  }
18
85
  //# sourceMappingURL=connection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,GAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAwB;IACjE,MAAM,QAAQ,GAAG,cAAc,CAAC,MAA4C,CAAC,CAAC;IAE9E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC;QAClC,MAAM,EAAE,QAAQ,CAAC,MAAgB;QACjC,QAAQ,EAAE,QAAQ,CAAC,QAAkB;QACrC,IAAI,EAAE,QAAQ,CAAC,IAA0B;QACzC,QAAQ,EAAE,QAAQ,CAAC,QAA8B;QACjD,IAAI,EAAG,QAAQ,CAAC,IAAe,IAAI,IAAI;QACvC,OAAO,EAAE;YACP,sBAAsB,EAAG,QAAQ,CAAC,sBAAkC,IAAI,IAAI;SAC7E;KACF,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,18 @@
1
+ import type { SqlDriver, SqlStatement } from 'mythik/server';
1
2
  export declare function filterFields(body: Record<string, unknown>, allowedFields: string[]): Record<string, unknown>;
2
- export declare function buildInsertQuery(table: string, fields: Record<string, unknown>, primaryKey?: string): {
3
+ export declare function buildInsertQuery(driver: SqlDriver, table: string, fields: Record<string, unknown>): {
3
4
  sql: string;
4
5
  params: Record<string, unknown>;
5
6
  };
6
- export declare function buildUpdateQuery(table: string, primaryKey: string, pkValue: unknown, fields: Record<string, unknown>): {
7
+ export declare function buildUpdateQuery(driver: SqlDriver, table: string, primaryKey: string, pkValue: unknown, fields: Record<string, unknown>, extraWhere?: SqlStatement): {
7
8
  sql: string;
8
9
  params: Record<string, unknown>;
9
10
  };
10
- export declare function buildDeleteQuery(table: string, primaryKey: string, pkValue: unknown): {
11
+ export declare function buildDeleteQuery(driver: SqlDriver, table: string, primaryKey: string, pkValue: unknown, extraWhere?: SqlStatement): {
12
+ sql: string;
13
+ params: Record<string, unknown>;
14
+ };
15
+ export declare function buildSelectByPrimaryKeyQuery(driver: SqlDriver, table: string, primaryKey: string, pkValue: unknown, extraWhere?: SqlStatement): {
11
16
  sql: string;
12
17
  params: Record<string, unknown>;
13
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"crud-builder.d.ts","sourceRoot":"","sources":["../src/crud-builder.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAS5G;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,CAAC,EAAE,MAAM,GAClB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAelD;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAUlD;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAKlD"}
1
+ {"version":3,"file":"crud-builder.d.ts","sourceRoot":"","sources":["../src/crud-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAS5G;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAQlD;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,CAAC,EAAE,YAAY,GACxB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAQlD;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,YAAY,GACxB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAKlD;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,YAAY,GACxB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAQlD"}