viyv-db-core 0.1.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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/dist/auth/access-policy.d.ts +12 -0
  3. package/dist/auth/access-policy.d.ts.map +1 -0
  4. package/dist/auth/access-policy.js +2 -0
  5. package/dist/auth/access-policy.js.map +1 -0
  6. package/dist/auth/auth-provider.d.ts +6 -0
  7. package/dist/auth/auth-provider.d.ts.map +1 -0
  8. package/dist/auth/auth-provider.js +2 -0
  9. package/dist/auth/auth-provider.js.map +1 -0
  10. package/dist/auth/defaults.d.ts +28 -0
  11. package/dist/auth/defaults.d.ts.map +1 -0
  12. package/dist/auth/defaults.js +49 -0
  13. package/dist/auth/defaults.js.map +1 -0
  14. package/dist/auth/errors.d.ts +8 -0
  15. package/dist/auth/errors.d.ts.map +1 -0
  16. package/dist/auth/errors.js +14 -0
  17. package/dist/auth/errors.js.map +1 -0
  18. package/dist/auth/index.d.ts +7 -0
  19. package/dist/auth/index.d.ts.map +1 -0
  20. package/dist/auth/index.js +5 -0
  21. package/dist/auth/index.js.map +1 -0
  22. package/dist/auth/tenant-resolver.d.ts +6 -0
  23. package/dist/auth/tenant-resolver.d.ts.map +1 -0
  24. package/dist/auth/tenant-resolver.js +2 -0
  25. package/dist/auth/tenant-resolver.js.map +1 -0
  26. package/dist/auth/types.d.ts +27 -0
  27. package/dist/auth/types.d.ts.map +1 -0
  28. package/dist/auth/types.js +2 -0
  29. package/dist/auth/types.js.map +1 -0
  30. package/dist/config.d.ts +22 -0
  31. package/dist/config.d.ts.map +1 -0
  32. package/dist/config.js +14 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/embedding.d.ts +29 -0
  35. package/dist/embedding.d.ts.map +1 -0
  36. package/dist/embedding.js +10 -0
  37. package/dist/embedding.js.map +1 -0
  38. package/dist/errors.d.ts +23 -0
  39. package/dist/errors.d.ts.map +1 -0
  40. package/dist/errors.js +45 -0
  41. package/dist/errors.js.map +1 -0
  42. package/dist/index.d.ts +12 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +9 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/metadata.d.ts +10 -0
  47. package/dist/metadata.d.ts.map +1 -0
  48. package/dist/metadata.js +2 -0
  49. package/dist/metadata.js.map +1 -0
  50. package/dist/migration.d.ts +10 -0
  51. package/dist/migration.d.ts.map +1 -0
  52. package/dist/migration.js +2 -0
  53. package/dist/migration.js.map +1 -0
  54. package/dist/ports/database-port.d.ts +14 -0
  55. package/dist/ports/database-port.d.ts.map +1 -0
  56. package/dist/ports/database-port.js +2 -0
  57. package/dist/ports/database-port.js.map +1 -0
  58. package/dist/ports/index.d.ts +3 -0
  59. package/dist/ports/index.d.ts.map +1 -0
  60. package/dist/ports/index.js +2 -0
  61. package/dist/ports/index.js.map +1 -0
  62. package/dist/ports/migration-generator.d.ts +11 -0
  63. package/dist/ports/migration-generator.d.ts.map +1 -0
  64. package/dist/ports/migration-generator.js +2 -0
  65. package/dist/ports/migration-generator.js.map +1 -0
  66. package/dist/rpc.d.ts +105 -0
  67. package/dist/rpc.d.ts.map +1 -0
  68. package/dist/rpc.js +2 -0
  69. package/dist/rpc.js.map +1 -0
  70. package/dist/services/database-service.d.ts +27 -0
  71. package/dist/services/database-service.d.ts.map +1 -0
  72. package/dist/services/database-service.js +2 -0
  73. package/dist/services/database-service.js.map +1 -0
  74. package/dist/services/index.d.ts +2 -0
  75. package/dist/services/index.d.ts.map +1 -0
  76. package/dist/services/index.js +2 -0
  77. package/dist/services/index.js.map +1 -0
  78. package/dist/sql-classifier.d.ts +4 -0
  79. package/dist/sql-classifier.d.ts.map +1 -0
  80. package/dist/sql-classifier.js +22 -0
  81. package/dist/sql-classifier.js.map +1 -0
  82. package/dist/types.d.ts +136 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +2 -0
  85. package/dist/types.js.map +1 -0
  86. package/dist/validation.d.ts +6 -0
  87. package/dist/validation.d.ts.map +1 -0
  88. package/dist/validation.js +28 -0
  89. package/dist/validation.js.map +1 -0
  90. package/package.json +40 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 viyv
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,12 @@
1
+ import type { AuthContext, Operation } from './types.js';
2
+ /** 認可判定 (I/O なし、throw しない) */
3
+ export interface IAccessPolicy {
4
+ check(context: AuthContext, operation: Operation): AccessDecision;
5
+ }
6
+ export type AccessDecision = {
7
+ readonly allowed: true;
8
+ } | {
9
+ readonly allowed: false;
10
+ readonly reason: string;
11
+ };
12
+ //# sourceMappingURL=access-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-policy.d.ts","sourceRoot":"","sources":["../../src/auth/access-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC7B,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,cAAc,CAAC;CAClE;AAED,MAAM,MAAM,cAAc,GACvB;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=access-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-policy.js","sourceRoot":"","sources":["../../src/auth/access-policy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { AuthContext, AuthCredentials } from './types.js';
2
+ /** 認証: クレデンシャル → AuthContext。Phase 3 で OIDC/SAML 対応。 */
3
+ export interface IAuthProvider {
4
+ authenticate(credentials: AuthCredentials): Promise<AuthContext>;
5
+ }
6
+ //# sourceMappingURL=auth-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE/D,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC7B,YAAY,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACjE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auth-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/auth/auth-provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import type { AccessLevel } from '../types.js';
2
+ import type { AccessDecision, IAccessPolicy } from './access-policy.js';
3
+ import type { IAuthProvider } from './auth-provider.js';
4
+ import type { ITenantResolver } from './tenant-resolver.js';
5
+ import type { AuthContext, AuthCredentials, Operation } from './types.js';
6
+ /** 認証なし (ローカル開発用) */
7
+ export declare class NoopAuthProvider implements IAuthProvider {
8
+ private readonly defaultContext;
9
+ constructor(defaultContext?: AuthContext);
10
+ authenticate(_credentials: AuthCredentials): Promise<AuthContext>;
11
+ }
12
+ /** 固定 tenantId を返す */
13
+ export declare class StaticTenantResolver implements ITenantResolver {
14
+ private readonly tenantId;
15
+ constructor(tenantId?: string);
16
+ resolve(_context: AuthContext): string;
17
+ }
18
+ /** userId をそのまま tenantId として使う (Phase 1) */
19
+ export declare class UserTenantResolver implements ITenantResolver {
20
+ resolve(context: AuthContext): string;
21
+ }
22
+ /** 固定アクセスレベルで判定 */
23
+ export declare class StaticAccessPolicy implements IAccessPolicy {
24
+ private readonly level;
25
+ constructor(level?: AccessLevel);
26
+ check(context: AuthContext, operation: Operation): AccessDecision;
27
+ }
28
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/auth/defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1E,qBAAqB;AACrB,qBAAa,gBAAiB,YAAW,aAAa;IAEpD,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,GAAE,WAIhC;IAGI,YAAY,CAAC,YAAY,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;CAGvE;AAED,sBAAsB;AACtB,qBAAa,oBAAqB,YAAW,eAAe;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,GAAE,MAAkB;IAEzD,OAAO,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM;CAGtC;AAED,4CAA4C;AAC5C,qBAAa,kBAAmB,YAAW,eAAe;IACzD,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM;CAGrC;AAED,mBAAmB;AACnB,qBAAa,kBAAmB,YAAW,aAAa;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,GAAE,WAAsB;IAE1D,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,cAAc;CAUjE"}
@@ -0,0 +1,49 @@
1
+ import { hasAccess } from '../config.js';
2
+ /** 認証なし (ローカル開発用) */
3
+ export class NoopAuthProvider {
4
+ defaultContext;
5
+ constructor(defaultContext = {
6
+ userId: 'local',
7
+ roles: [],
8
+ claims: {},
9
+ }) {
10
+ this.defaultContext = defaultContext;
11
+ }
12
+ async authenticate(_credentials) {
13
+ return this.defaultContext;
14
+ }
15
+ }
16
+ /** 固定 tenantId を返す */
17
+ export class StaticTenantResolver {
18
+ tenantId;
19
+ constructor(tenantId = 'default') {
20
+ this.tenantId = tenantId;
21
+ }
22
+ resolve(_context) {
23
+ return this.tenantId;
24
+ }
25
+ }
26
+ /** userId をそのまま tenantId として使う (Phase 1) */
27
+ export class UserTenantResolver {
28
+ resolve(context) {
29
+ return context.userId;
30
+ }
31
+ }
32
+ /** 固定アクセスレベルで判定 */
33
+ export class StaticAccessPolicy {
34
+ level;
35
+ constructor(level = 'schema') {
36
+ this.level = level;
37
+ }
38
+ check(context, operation) {
39
+ const effective = context.accessLevel ?? this.level;
40
+ if (hasAccess(effective, operation.requiredAccess)) {
41
+ return { allowed: true };
42
+ }
43
+ return {
44
+ allowed: false,
45
+ reason: `Requires "${operation.requiredAccess}" access, current: "${effective}"`,
46
+ };
47
+ }
48
+ }
49
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/auth/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAOzC,qBAAqB;AACrB,MAAM,OAAO,gBAAgB;IAEV;IADlB,YACkB,iBAA8B;QAC9C,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;KACV;QAJgB,mBAAc,GAAd,cAAc,CAI9B;IACC,CAAC;IAEJ,KAAK,CAAC,YAAY,CAAC,YAA6B;QAC/C,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;CACD;AAED,sBAAsB;AACtB,MAAM,OAAO,oBAAoB;IACH;IAA7B,YAA6B,WAAmB,SAAS;QAA5B,aAAQ,GAAR,QAAQ,CAAoB;IAAG,CAAC;IAE7D,OAAO,CAAC,QAAqB;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD;AAED,4CAA4C;AAC5C,MAAM,OAAO,kBAAkB;IAC9B,OAAO,CAAC,OAAoB;QAC3B,OAAO,OAAO,CAAC,MAAM,CAAC;IACvB,CAAC;CACD;AAED,mBAAmB;AACnB,MAAM,OAAO,kBAAkB;IACD;IAA7B,YAA6B,QAAqB,QAAQ;QAA7B,UAAK,GAAL,KAAK,CAAwB;IAAG,CAAC;IAE9D,KAAK,CAAC,OAAoB,EAAE,SAAoB;QAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC;QACpD,IAAI,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;YACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,aAAa,SAAS,CAAC,cAAc,uBAAuB,SAAS,GAAG;SAChF,CAAC;IACH,CAAC;CACD"}
@@ -0,0 +1,8 @@
1
+ import { ViyvDbError } from '../errors.js';
2
+ export declare class AuthenticationError extends ViyvDbError {
3
+ constructor(message: string);
4
+ }
5
+ export declare class AuthorizationError extends ViyvDbError {
6
+ constructor(operation: string, reason: string);
7
+ }
8
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/auth/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,qBAAa,mBAAoB,SAAQ,WAAW;gBACvC,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,kBAAmB,SAAQ,WAAW;gBACtC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI7C"}
@@ -0,0 +1,14 @@
1
+ import { ViyvDbError } from '../errors.js';
2
+ export class AuthenticationError extends ViyvDbError {
3
+ constructor(message) {
4
+ super(message, 'AUTHENTICATION_FAILED');
5
+ this.name = 'AuthenticationError';
6
+ }
7
+ }
8
+ export class AuthorizationError extends ViyvDbError {
9
+ constructor(operation, reason) {
10
+ super(`Authorization denied for "${operation}": ${reason}`, 'AUTHORIZATION_DENIED');
11
+ this.name = 'AuthorizationError';
12
+ }
13
+ }
14
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/auth/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IACnD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACnC,CAAC;CACD;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAClD,YAAY,SAAiB,EAAE,MAAc;QAC5C,KAAK,CAAC,6BAA6B,SAAS,MAAM,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC;QACpF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAClC,CAAC;CACD"}
@@ -0,0 +1,7 @@
1
+ export type { IAuthProvider } from './auth-provider.js';
2
+ export type { ITenantResolver } from './tenant-resolver.js';
3
+ export type { IAccessPolicy, AccessDecision } from './access-policy.js';
4
+ export type { AuthContext, AuthCredentials, Operation } from './types.js';
5
+ export { AuthenticationError, AuthorizationError } from './errors.js';
6
+ export { NoopAuthProvider, StaticTenantResolver, UserTenantResolver, StaticAccessPolicy, } from './defaults.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGxE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG1E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Errors
2
+ export { AuthenticationError, AuthorizationError } from './errors.js';
3
+ // Default implementations
4
+ export { NoopAuthProvider, StaticTenantResolver, UserTenantResolver, StaticAccessPolicy, } from './defaults.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAQA,SAAS;AACT,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtE,0BAA0B;AAC1B,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AuthContext } from './types.js';
2
+ /** AuthContext → tenant_id マッピング (純粋関数、I/O なし) */
3
+ export interface ITenantResolver {
4
+ resolve(context: AuthContext): string;
5
+ }
6
+ //# sourceMappingURL=tenant-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-resolver.d.ts","sourceRoot":"","sources":["../../src/auth/tenant-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC/B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAAC;CACtC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tenant-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-resolver.js","sourceRoot":"","sources":["../../src/auth/tenant-resolver.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import type { AccessLevel } from '../types.js';
2
+ /** 認証済みコンテキスト。リクエストのライフサイクルを通じて運搬される。 */
3
+ export interface AuthContext {
4
+ readonly userId: string;
5
+ readonly orgId?: string;
6
+ readonly teamId?: string;
7
+ readonly roles: readonly string[];
8
+ readonly accessLevel?: AccessLevel;
9
+ readonly claims: Readonly<Record<string, unknown>>;
10
+ }
11
+ /** 認証クレデンシャル (discriminated union) */
12
+ export type AuthCredentials = {
13
+ readonly type: 'bearer';
14
+ readonly token: string;
15
+ } | {
16
+ readonly type: 'api-key';
17
+ readonly key: string;
18
+ } | {
19
+ readonly type: 'none';
20
+ };
21
+ /** 認可チェック対象の操作 */
22
+ export interface Operation {
23
+ readonly name: string;
24
+ readonly requiredAccess: AccessLevel;
25
+ readonly targetTable?: string;
26
+ }
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAED,sCAAsC;AACtC,MAAM,MAAM,eAAe,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7B,kBAAkB;AAClB,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ export declare const AccessLevelSchema: z.ZodEnum<["read", "data", "schema"]>;
3
+ export declare const BaseConfigSchema: z.ZodObject<{
4
+ accessLevel: z.ZodDefault<z.ZodEnum<["read", "data", "schema"]>>;
5
+ queryTimeoutMs: z.ZodDefault<z.ZodNumber>;
6
+ rowLimit: z.ZodDefault<z.ZodNumber>;
7
+ autoInitialize: z.ZodDefault<z.ZodBoolean>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ accessLevel: "read" | "data" | "schema";
10
+ queryTimeoutMs: number;
11
+ rowLimit: number;
12
+ autoInitialize: boolean;
13
+ }, {
14
+ accessLevel?: "read" | "data" | "schema" | undefined;
15
+ queryTimeoutMs?: number | undefined;
16
+ rowLimit?: number | undefined;
17
+ autoInitialize?: boolean | undefined;
18
+ }>;
19
+ export type BaseConfig = z.infer<typeof BaseConfigSchema>;
20
+ /** Check if `current` access level satisfies `required` */
21
+ export declare function hasAccess(current: string, required: string): boolean;
22
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB,uCAAqC,CAAC;AAEpE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAK3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,2DAA2D;AAC3D,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGpE"}
package/dist/config.js ADDED
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export const AccessLevelSchema = z.enum(['read', 'data', 'schema']);
3
+ export const BaseConfigSchema = z.object({
4
+ accessLevel: AccessLevelSchema.default('schema'),
5
+ queryTimeoutMs: z.number().positive().default(30_000),
6
+ rowLimit: z.number().positive().default(1_000),
7
+ autoInitialize: z.boolean().default(true),
8
+ });
9
+ /** Check if `current` access level satisfies `required` */
10
+ export function hasAccess(current, required) {
11
+ const levels = ['read', 'data', 'schema'];
12
+ return levels.indexOf(current) >= levels.indexOf(required);
13
+ }
14
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACzC,CAAC,CAAC;AAIH,2DAA2D;AAC3D,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,QAAgB;IAC1D,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,29 @@
1
+ export interface IEmbeddingProvider {
2
+ embed(texts: string[]): Promise<number[][]>;
3
+ readonly dimensions: number;
4
+ readonly modelId: string;
5
+ }
6
+ export interface SemanticSearchOptions {
7
+ query: string;
8
+ tables?: string[];
9
+ limit?: number;
10
+ threshold?: number;
11
+ }
12
+ export interface SemanticSearchResult {
13
+ tableName: string;
14
+ tablePurpose: string | null;
15
+ row: Record<string, unknown>;
16
+ similarity: number;
17
+ rowId: string;
18
+ }
19
+ export interface ISemanticSearchService {
20
+ semanticSearch(options: SemanticSearchOptions): Promise<SemanticSearchResult[]>;
21
+ embedRows(table: string, rowIds: string[]): Promise<void>;
22
+ deleteEmbeddings(rowIds: string[]): Promise<void>;
23
+ }
24
+ export interface EmbeddingColumnMeta {
25
+ name: string;
26
+ description?: string | null;
27
+ }
28
+ export declare function buildEmbeddingText(tableName: string, purpose: string | null, columns: EmbeddingColumnMeta[], row: Record<string, unknown>): string;
29
+ //# sourceMappingURL=embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../src/embedding.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IAClC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACtC,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAChF,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAID,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,EAAE,mBAAmB,EAAE,EAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1B,MAAM,CAOR"}
@@ -0,0 +1,10 @@
1
+ // ── Interfaces ──
2
+ export function buildEmbeddingText(tableName, purpose, columns, row) {
3
+ const header = purpose ? `${tableName} (${purpose})` : tableName;
4
+ const fields = columns
5
+ .filter((c) => row[c.name] != null && row[c.name] !== '')
6
+ .map((c) => `${c.name}=${String(row[c.name])}`)
7
+ .join(', ');
8
+ return `${header}: ${fields}`;
9
+ }
10
+ //# sourceMappingURL=embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../src/embedding.ts"],"names":[],"mappings":"AAAA,mBAAmB;AAoCnB,MAAM,UAAU,kBAAkB,CACjC,SAAiB,EACjB,OAAsB,EACtB,OAA8B,EAC9B,GAA4B;IAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,MAAM,MAAM,GAAG,OAAO;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SACxD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;SAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,23 @@
1
+ export declare class ViyvDbError extends Error {
2
+ readonly code: string;
3
+ constructor(message: string, code: string);
4
+ }
5
+ export declare class AccessDeniedError extends ViyvDbError {
6
+ constructor(operation: string, required: string, current: string);
7
+ }
8
+ export declare class TableNotFoundError extends ViyvDbError {
9
+ constructor(table: string);
10
+ }
11
+ export declare class SystemTableError extends ViyvDbError {
12
+ constructor(table: string);
13
+ }
14
+ export declare class MigrationError extends ViyvDbError {
15
+ constructor(message: string);
16
+ }
17
+ export declare class SqlValidationError extends ViyvDbError {
18
+ constructor(message: string);
19
+ }
20
+ export declare class SemanticSearchNotEnabledError extends ViyvDbError {
21
+ constructor();
22
+ }
23
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;aAGpB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAK7B;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACrC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAOhE;AAED,qBAAa,kBAAmB,SAAQ,WAAW;gBACtC,KAAK,EAAE,MAAM;CAIzB;AAED,qBAAa,gBAAiB,SAAQ,WAAW;gBACpC,KAAK,EAAE,MAAM;CAOzB;AAED,qBAAa,cAAe,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,kBAAmB,SAAQ,WAAW;gBACtC,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,6BAA8B,SAAQ,WAAW;;CAK7D"}
package/dist/errors.js ADDED
@@ -0,0 +1,45 @@
1
+ export class ViyvDbError extends Error {
2
+ code;
3
+ constructor(message, code) {
4
+ super(message);
5
+ this.code = code;
6
+ this.name = 'ViyvDbError';
7
+ }
8
+ }
9
+ export class AccessDeniedError extends ViyvDbError {
10
+ constructor(operation, required, current) {
11
+ super(`Access denied: "${operation}" requires "${required}" level, current: "${current}"`, 'ACCESS_DENIED');
12
+ this.name = 'AccessDeniedError';
13
+ }
14
+ }
15
+ export class TableNotFoundError extends ViyvDbError {
16
+ constructor(table) {
17
+ super(`Table not found: "${table}"`, 'TABLE_NOT_FOUND');
18
+ this.name = 'TableNotFoundError';
19
+ }
20
+ }
21
+ export class SystemTableError extends ViyvDbError {
22
+ constructor(table) {
23
+ super(`Cannot modify system table: "${table}". Tables prefixed with "_viyv_" are managed internally.`, 'SYSTEM_TABLE');
24
+ this.name = 'SystemTableError';
25
+ }
26
+ }
27
+ export class MigrationError extends ViyvDbError {
28
+ constructor(message) {
29
+ super(message, 'MIGRATION_ERROR');
30
+ this.name = 'MigrationError';
31
+ }
32
+ }
33
+ export class SqlValidationError extends ViyvDbError {
34
+ constructor(message) {
35
+ super(message, 'SQL_VALIDATION');
36
+ this.name = 'SqlValidationError';
37
+ }
38
+ }
39
+ export class SemanticSearchNotEnabledError extends ViyvDbError {
40
+ constructor() {
41
+ super('Semantic search is not enabled on this service', 'SEMANTIC_SEARCH_NOT_ENABLED');
42
+ this.name = 'SemanticSearchNotEnabledError';
43
+ }
44
+ }
45
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGpB;IAFjB,YACC,OAAe,EACC,IAAY;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,SAAI,GAAJ,IAAI,CAAQ;QAG5B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC3B,CAAC;CACD;AAED,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IACjD,YAAY,SAAiB,EAAE,QAAgB,EAAE,OAAe;QAC/D,KAAK,CACJ,mBAAmB,SAAS,eAAe,QAAQ,sBAAsB,OAAO,GAAG,EACnF,eAAe,CACf,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACjC,CAAC;CACD;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAClD,YAAY,KAAa;QACxB,KAAK,CAAC,qBAAqB,KAAK,GAAG,EAAE,iBAAiB,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAClC,CAAC;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAChD,YAAY,KAAa;QACxB,KAAK,CACJ,gCAAgC,KAAK,0DAA0D,EAC/F,cAAc,CACd,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IAChC,CAAC;CACD;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC9C,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC9B,CAAC;CACD;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAClD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAClC,CAAC;CACD;AAED,MAAM,OAAO,6BAA8B,SAAQ,WAAW;IAC7D;QACC,KAAK,CAAC,gDAAgD,EAAE,6BAA6B,CAAC,CAAC;QACvF,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC7C,CAAC;CACD"}
@@ -0,0 +1,12 @@
1
+ export type { IDatabaseService, IDatabaseServiceFactory } from './services/index.js';
2
+ export * from './types.js';
3
+ export * from './migration.js';
4
+ export * from './errors.js';
5
+ export * from './validation.js';
6
+ export { BaseConfigSchema, AccessLevelSchema, hasAccess } from './config.js';
7
+ export type { BaseConfig } from './config.js';
8
+ export { classifySql } from './sql-classifier.js';
9
+ export type { SqlType } from './sql-classifier.js';
10
+ export * from './auth/index.js';
11
+ export * from './embedding.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACrF,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export * from './types.js';
2
+ export * from './migration.js';
3
+ export * from './errors.js';
4
+ export * from './validation.js';
5
+ export { BaseConfigSchema, AccessLevelSchema, hasAccess } from './config.js';
6
+ export { classifySql } from './sql-classifier.js';
7
+ export * from './auth/index.js';
8
+ export * from './embedding.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface TableMetadata {
2
+ tableName: string;
3
+ columnName: string;
4
+ purpose: string | null;
5
+ description: string | null;
6
+ createdBy: string | null;
7
+ createdAt: string;
8
+ updatedAt: string;
9
+ }
10
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export interface Migration {
2
+ version: string;
3
+ description: string;
4
+ upSql: string;
5
+ downSql: string;
6
+ appliedAt: string;
7
+ appliedBy: string | null;
8
+ reason: string;
9
+ }
10
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { RawQueryResult, RawTableDetail, RawTableInfo } from '../types.js';
2
+ export interface DatabasePort {
3
+ execute(sql: string, params?: unknown[]): RawQueryResult;
4
+ executeInTransaction(statements: Array<{
5
+ sql: string;
6
+ params?: unknown[];
7
+ }>): void;
8
+ listUserTables(): RawTableInfo[];
9
+ getTableDetail(name: string): RawTableDetail;
10
+ tableExists(name: string): boolean;
11
+ getRowCount(table: string): number;
12
+ close(): void;
13
+ }
14
+ //# sourceMappingURL=database-port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-port.d.ts","sourceRoot":"","sources":["../../src/ports/database-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhF,MAAM,WAAW,YAAY;IAC5B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC;IACzD,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IACnF,cAAc,IAAI,YAAY,EAAE,CAAC;IACjC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC7C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,KAAK,IAAI,IAAI,CAAC;CACd"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=database-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-port.js","sourceRoot":"","sources":["../../src/ports/database-port.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export type { DatabasePort } from './database-port.js';
2
+ export type { MigrationGenerator } from './migration-generator.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { MigrationResult } from '../migration.js';
2
+ import type { ColumnDef, ColumnModification, CreateTableDef, IndexDef, RawTableDetail } from '../types.js';
3
+ export interface MigrationGenerator {
4
+ generateCreateTable(def: CreateTableDef): MigrationResult;
5
+ generateAddColumns(table: string, columns: ColumnDef[]): MigrationResult;
6
+ generateModifyColumns(table: string, mods: ColumnModification[], currentDetail: RawTableDetail): MigrationResult;
7
+ generateDropColumns(table: string, columns: string[], currentDetail: RawTableDetail): MigrationResult;
8
+ generateDropTable(currentDetail: RawTableDetail): MigrationResult;
9
+ generateAddIndex(table: string, index: IndexDef): MigrationResult;
10
+ }
11
+ //# sourceMappingURL=migration-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-generator.d.ts","sourceRoot":"","sources":["../../src/ports/migration-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EACX,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,cAAc,EACd,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,kBAAkB;IAClC,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,eAAe,CAAC;IAC1D,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC;IACzE,qBAAqB,CACpB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,kBAAkB,EAAE,EAC1B,aAAa,EAAE,cAAc,GAC3B,eAAe,CAAC;IACnB,mBAAmB,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,aAAa,EAAE,cAAc,GAC3B,eAAe,CAAC;IACnB,iBAAiB,CAAC,aAAa,EAAE,cAAc,GAAG,eAAe,CAAC;IAClE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,eAAe,CAAC;CAClE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=migration-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-generator.js","sourceRoot":"","sources":["../../src/ports/migration-generator.ts"],"names":[],"mappings":""}
package/dist/rpc.d.ts ADDED
@@ -0,0 +1,105 @@
1
+ import type { SemanticSearchOptions, SemanticSearchResult } from './embedding.js';
2
+ import type { Migration } from './migration.js';
3
+ import type { AlterAction, CreateTableDef, InsertResult, MutationResult, QueryResult, QueryTableOptions, SchemaMode, SchemaOptions, SchemaResult } from './types.js';
4
+ export declare const RPC_VERSION: "2025-03-17";
5
+ export type RpcMethod = 'getSchema' | 'createTable' | 'alterTable' | 'dropTable' | 'insert' | 'update' | 'delete' | 'upsert' | 'query' | 'executeSql' | 'queryTable' | 'getMigrationInfo' | 'rollbackMigration' | 'importCsv' | 'semanticSearch';
6
+ export interface RpcMethodParams {
7
+ getSchema: {
8
+ mode: SchemaMode;
9
+ options?: SchemaOptions;
10
+ };
11
+ createTable: {
12
+ def: CreateTableDef;
13
+ reason: string;
14
+ appliedBy?: string;
15
+ };
16
+ alterTable: {
17
+ table: string;
18
+ action: AlterAction;
19
+ reason: string;
20
+ appliedBy?: string;
21
+ };
22
+ dropTable: {
23
+ table: string;
24
+ reason: string;
25
+ appliedBy?: string;
26
+ };
27
+ insert: {
28
+ table: string;
29
+ rows: Record<string, unknown>[];
30
+ };
31
+ update: {
32
+ table: string;
33
+ set: Record<string, unknown>;
34
+ where: Record<string, unknown>;
35
+ };
36
+ delete: {
37
+ table: string;
38
+ where: Record<string, unknown>;
39
+ };
40
+ upsert: {
41
+ table: string;
42
+ rows: Record<string, unknown>[];
43
+ conflictColumns: string[];
44
+ };
45
+ query: {
46
+ sql: string;
47
+ params?: unknown[];
48
+ };
49
+ executeSql: {
50
+ sql: string;
51
+ params?: unknown[];
52
+ accessLevel?: string;
53
+ };
54
+ queryTable: {
55
+ table: string;
56
+ options?: QueryTableOptions;
57
+ };
58
+ getMigrationInfo: Record<string, never>;
59
+ rollbackMigration: {
60
+ targetVersion: string;
61
+ };
62
+ importCsv: {
63
+ table: string;
64
+ csv: string;
65
+ purpose?: string;
66
+ };
67
+ semanticSearch: {
68
+ options: SemanticSearchOptions;
69
+ };
70
+ }
71
+ export interface RpcMethodResults {
72
+ getSchema: SchemaResult;
73
+ createTable: undefined;
74
+ alterTable: undefined;
75
+ dropTable: undefined;
76
+ insert: InsertResult;
77
+ update: MutationResult;
78
+ delete: MutationResult;
79
+ upsert: InsertResult;
80
+ query: QueryResult;
81
+ executeSql: QueryResult;
82
+ queryTable: QueryResult;
83
+ getMigrationInfo: Migration[];
84
+ rollbackMigration: undefined;
85
+ importCsv: InsertResult;
86
+ semanticSearch: SemanticSearchResult[];
87
+ }
88
+ export interface RpcRequest<M extends RpcMethod = RpcMethod> {
89
+ version: typeof RPC_VERSION;
90
+ method: M;
91
+ params: RpcMethodParams[M];
92
+ }
93
+ export interface RpcErrorBody {
94
+ code: string;
95
+ message: string;
96
+ name: string;
97
+ }
98
+ export type RpcResponse<M extends RpcMethod = RpcMethod> = {
99
+ ok: true;
100
+ result: RpcMethodResults[M];
101
+ } | {
102
+ ok: false;
103
+ error: RpcErrorBody;
104
+ };
105
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
package/dist/rpc.js ADDED
@@ -0,0 +1,2 @@
1
+ export const RPC_VERSION = '2025-03-17';
2
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,WAAW,GAAG,YAAqB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { SemanticSearchOptions, SemanticSearchResult } from '../embedding.js';
2
+ import type { Migration } from '../migration.js';
3
+ import type { AlterAction, CreateTableDef, InsertResult, MutationResult, QueryResult, QueryTableOptions, SchemaMode, SchemaOptions, SchemaResult } from '../types.js';
4
+ export interface IDatabaseService {
5
+ initialize(): Promise<void>;
6
+ close(): Promise<void>;
7
+ getSchema(mode: SchemaMode, options?: SchemaOptions): Promise<SchemaResult>;
8
+ createTable(def: CreateTableDef, reason: string, appliedBy?: string): Promise<void>;
9
+ alterTable(table: string, action: AlterAction, reason: string, appliedBy?: string): Promise<void>;
10
+ dropTable(table: string, reason: string, appliedBy?: string): Promise<void>;
11
+ insert(table: string, rows: Record<string, unknown>[]): Promise<InsertResult>;
12
+ update(table: string, set: Record<string, unknown>, where: Record<string, unknown>): Promise<MutationResult>;
13
+ delete(table: string, where: Record<string, unknown>): Promise<MutationResult>;
14
+ upsert(table: string, rows: Record<string, unknown>[], conflictColumns: string[]): Promise<InsertResult>;
15
+ query(sql: string, params?: unknown[]): Promise<QueryResult>;
16
+ executeSql(sql: string, params?: unknown[], accessLevel?: string): Promise<QueryResult>;
17
+ queryTable(table: string, options?: QueryTableOptions): Promise<QueryResult>;
18
+ getMigrationInfo(): Promise<Migration[]>;
19
+ rollbackMigration(targetVersion: string): Promise<void>;
20
+ semanticSearch?(options: SemanticSearchOptions): Promise<SemanticSearchResult[]>;
21
+ }
22
+ /** テナント別サービスファクトリ (server 用、マルチテナント対応) */
23
+ export interface IDatabaseServiceFactory {
24
+ forTenant(tenantId: string): Promise<IDatabaseService>;
25
+ close(): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=database-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-service.d.ts","sourceRoot":"","sources":["../../src/services/database-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,YAAY,EACZ,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAChC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5E,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9E,MAAM,CACL,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/E,MAAM,CACL,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,eAAe,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,YAAY,CAAC,CAAC;IAGzB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7D,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAGxF,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAG7E,gBAAgB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxD,cAAc,CAAC,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;CACjF;AAED,0CAA0C;AAC1C,MAAM,WAAW,uBAAuB;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=database-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-service.js","sourceRoot":"","sources":["../../src/services/database-service.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export type { IDatabaseService, IDatabaseServiceFactory } from './database-service.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type SqlType = 'select' | 'dml' | 'ddl' | 'other';
2
+ /** Classify a SQL statement by its type */
3
+ export declare function classifySql(sql: string): SqlType;
4
+ //# sourceMappingURL=sql-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-classifier.d.ts","sourceRoot":"","sources":["../src/sql-classifier.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzD,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAuBhD"}
@@ -0,0 +1,22 @@
1
+ /** Classify a SQL statement by its type */
2
+ export function classifySql(sql) {
3
+ const trimmed = sql
4
+ .trim()
5
+ .replace(/^--[^\n]*\n/g, '')
6
+ .trim();
7
+ const upper = trimmed.toUpperCase();
8
+ // SELECT or read operations
9
+ if (/^(SELECT|WITH|EXPLAIN)\b/i.test(upper)) {
10
+ return 'select';
11
+ }
12
+ // DML
13
+ if (/^(INSERT|UPDATE|DELETE)\b/i.test(upper)) {
14
+ return 'dml';
15
+ }
16
+ // DDL
17
+ if (/^(CREATE|ALTER|DROP)\b/i.test(upper)) {
18
+ return 'ddl';
19
+ }
20
+ return 'other';
21
+ }
22
+ //# sourceMappingURL=sql-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-classifier.js","sourceRoot":"","sources":["../src/sql-classifier.ts"],"names":[],"mappings":"AAEA,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,GAAG;SACjB,IAAI,EAAE;SACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,IAAI,EAAE,CAAC;IACT,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEpC,4BAA4B;IAC5B,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM;IACN,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM;IACN,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC"}
@@ -0,0 +1,136 @@
1
+ export interface CreateTableDef {
2
+ name: string;
3
+ columns: ColumnDef[];
4
+ purpose: string;
5
+ indexes?: IndexDef[];
6
+ }
7
+ export interface ColumnDef {
8
+ name: string;
9
+ type: string;
10
+ nullable?: boolean;
11
+ defaultValue?: string;
12
+ primaryKey?: boolean;
13
+ unique?: boolean;
14
+ description?: string;
15
+ references?: {
16
+ table: string;
17
+ column: string;
18
+ };
19
+ }
20
+ export interface ColumnModification {
21
+ name: string;
22
+ newName?: string;
23
+ type?: string;
24
+ nullable?: boolean;
25
+ defaultValue?: string;
26
+ }
27
+ export interface IndexDef {
28
+ name?: string;
29
+ columns: string[];
30
+ unique?: boolean;
31
+ }
32
+ export type AlterAction = {
33
+ type: 'add_columns';
34
+ columns: ColumnDef[];
35
+ } | {
36
+ type: 'modify_columns';
37
+ modifications: ColumnModification[];
38
+ } | {
39
+ type: 'drop_columns';
40
+ columns: string[];
41
+ } | {
42
+ type: 'add_index';
43
+ index: IndexDef;
44
+ } | {
45
+ type: 'update_purpose';
46
+ purpose: string;
47
+ } | {
48
+ type: 'update_description';
49
+ column: string;
50
+ description: string;
51
+ };
52
+ export interface TableInfo {
53
+ name: string;
54
+ purpose: string | null;
55
+ columnCount: number;
56
+ rowCount: number;
57
+ }
58
+ export interface TableDetail {
59
+ name: string;
60
+ purpose: string | null;
61
+ columns: ColumnDetail[];
62
+ indexes: IndexInfo[];
63
+ foreignKeys: ForeignKeyInfo[];
64
+ rowCount: number;
65
+ }
66
+ export interface ColumnDetail {
67
+ name: string;
68
+ type: string;
69
+ nullable: boolean;
70
+ defaultValue: string | null;
71
+ primaryKey: boolean;
72
+ unique: boolean;
73
+ description: string | null;
74
+ }
75
+ export interface IndexInfo {
76
+ name: string;
77
+ columns: string[];
78
+ unique: boolean;
79
+ }
80
+ export interface ForeignKeyInfo {
81
+ from: string;
82
+ table: string;
83
+ to: string;
84
+ }
85
+ export interface QueryResult {
86
+ columns: string[];
87
+ rows: Record<string, unknown>[];
88
+ rowCount: number;
89
+ truncated: boolean;
90
+ }
91
+ export interface InsertResult {
92
+ insertedCount: number;
93
+ }
94
+ export interface MutationResult {
95
+ affectedRows: number;
96
+ }
97
+ export interface QueryTableOptions {
98
+ columns?: string[];
99
+ where?: Record<string, unknown>;
100
+ orderBy?: Array<{
101
+ column: string;
102
+ direction: 'asc' | 'desc';
103
+ }>;
104
+ limit?: number;
105
+ offset?: number;
106
+ }
107
+ export type AccessLevel = 'read' | 'data' | 'schema';
108
+ export type SchemaMode = 'list' | 'detail' | 'overview' | 'changelog';
109
+ export interface SchemaOptions {
110
+ tableName?: string;
111
+ limit?: number;
112
+ }
113
+ export type SchemaResult = {
114
+ mode: 'list';
115
+ tables: TableInfo[];
116
+ } | {
117
+ mode: 'detail';
118
+ table: TableDetail;
119
+ } | {
120
+ mode: 'overview';
121
+ tables: TableDetail[];
122
+ } | {
123
+ mode: 'changelog';
124
+ entries: SchemaLogEntry[];
125
+ };
126
+ export interface SchemaLogEntry {
127
+ id: number;
128
+ tableName: string;
129
+ operation: string;
130
+ sqlExecuted: string;
131
+ reason: string;
132
+ appliedBy: string | null;
133
+ appliedAt: string;
134
+ migrationVersion: string;
135
+ }
136
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export declare function isSystemTable(name: string): boolean;
2
+ export declare function isValidIdentifier(name: string): boolean;
3
+ export declare function validateTableName(name: string): void;
4
+ export declare function validateIdentifier(name: string): void;
5
+ export declare function guardSystemTable(name: string): void;
6
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOpD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAInD"}
@@ -0,0 +1,28 @@
1
+ import { SqlValidationError, SystemTableError } from './errors.js';
2
+ const SYSTEM_TABLE_PREFIX = '_viyv_';
3
+ const IDENTIFIER_RE = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
4
+ export function isSystemTable(name) {
5
+ return name.startsWith(SYSTEM_TABLE_PREFIX);
6
+ }
7
+ export function isValidIdentifier(name) {
8
+ return IDENTIFIER_RE.test(name);
9
+ }
10
+ export function validateTableName(name) {
11
+ if (isSystemTable(name)) {
12
+ throw new SystemTableError(name);
13
+ }
14
+ if (!isValidIdentifier(name)) {
15
+ throw new SqlValidationError(`Invalid table name: "${name}". Must be a valid SQL identifier.`);
16
+ }
17
+ }
18
+ export function validateIdentifier(name) {
19
+ if (!isValidIdentifier(name)) {
20
+ throw new SqlValidationError(`Invalid identifier: "${name}"`);
21
+ }
22
+ }
23
+ export function guardSystemTable(name) {
24
+ if (isSystemTable(name)) {
25
+ throw new SystemTableError(name);
26
+ }
27
+ }
28
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AACrC,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,IAAI,oCAAoC,CAAC,CAAC;IAChG,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,IAAI,GAAG,CAAC,CAAC;IAC/D,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;AACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "viyv-db-core",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Core types and interfaces for viyv-db",
6
+ "license": "MIT",
7
+ "author": "viyv",
8
+ "engines": {
9
+ "node": ">=20"
10
+ },
11
+ "main": "dist/index.js",
12
+ "types": "dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.js"
17
+ },
18
+ "./rpc": {
19
+ "types": "./dist/rpc.d.ts",
20
+ "default": "./dist/rpc.js"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "!dist/__tests__"
26
+ ],
27
+ "dependencies": {
28
+ "zod": "^3.23.0"
29
+ },
30
+ "devDependencies": {
31
+ "typescript": "^5.7.0",
32
+ "vitest": "^2.1.0"
33
+ },
34
+ "scripts": {
35
+ "build": "tsc",
36
+ "typecheck": "tsc --noEmit",
37
+ "test": "vitest run",
38
+ "clean": "rm -rf dist"
39
+ }
40
+ }