@superfunctions/db 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 (66) hide show
  1. package/README.md +341 -0
  2. package/dist/adapter/capabilities.d.ts +51 -0
  3. package/dist/adapter/capabilities.d.ts.map +1 -0
  4. package/dist/adapter/capabilities.js +56 -0
  5. package/dist/adapter/capabilities.js.map +1 -0
  6. package/dist/adapter/errors.d.ts +111 -0
  7. package/dist/adapter/errors.d.ts.map +1 -0
  8. package/dist/adapter/errors.js +172 -0
  9. package/dist/adapter/errors.js.map +1 -0
  10. package/dist/adapter/factory.d.ts +10 -0
  11. package/dist/adapter/factory.d.ts.map +1 -0
  12. package/dist/adapter/factory.js +232 -0
  13. package/dist/adapter/factory.js.map +1 -0
  14. package/dist/adapter/types.d.ts +255 -0
  15. package/dist/adapter/types.d.ts.map +1 -0
  16. package/dist/adapter/types.js +5 -0
  17. package/dist/adapter/types.js.map +1 -0
  18. package/dist/adapters/drizzle/index.d.ts +20 -0
  19. package/dist/adapters/drizzle/index.d.ts.map +1 -0
  20. package/dist/adapters/drizzle/index.js +346 -0
  21. package/dist/adapters/drizzle/index.js.map +1 -0
  22. package/dist/adapters/index.d.ts +12 -0
  23. package/dist/adapters/index.d.ts.map +1 -0
  24. package/dist/adapters/index.js +12 -0
  25. package/dist/adapters/index.js.map +1 -0
  26. package/dist/adapters/kysely/index.d.ts +18 -0
  27. package/dist/adapters/kysely/index.d.ts.map +1 -0
  28. package/dist/adapters/kysely/index.js +305 -0
  29. package/dist/adapters/kysely/index.js.map +1 -0
  30. package/dist/adapters/memory/index.d.ts +17 -0
  31. package/dist/adapters/memory/index.d.ts.map +1 -0
  32. package/dist/adapters/memory/index.js +362 -0
  33. package/dist/adapters/memory/index.js.map +1 -0
  34. package/dist/adapters/prisma/index.d.ts +16 -0
  35. package/dist/adapters/prisma/index.d.ts.map +1 -0
  36. package/dist/adapters/prisma/index.js +247 -0
  37. package/dist/adapters/prisma/index.js.map +1 -0
  38. package/dist/index.d.ts +15 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +15 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/migrations/runtime-validation.d.ts +7 -0
  43. package/dist/migrations/runtime-validation.d.ts.map +1 -0
  44. package/dist/migrations/runtime-validation.js +40 -0
  45. package/dist/migrations/runtime-validation.js.map +1 -0
  46. package/dist/migrations/schema-tracker.d.ts +56 -0
  47. package/dist/migrations/schema-tracker.d.ts.map +1 -0
  48. package/dist/migrations/schema-tracker.js +121 -0
  49. package/dist/migrations/schema-tracker.js.map +1 -0
  50. package/dist/testing/contract-tests.d.ts +64 -0
  51. package/dist/testing/contract-tests.d.ts.map +1 -0
  52. package/dist/testing/contract-tests.js +391 -0
  53. package/dist/testing/contract-tests.js.map +1 -0
  54. package/dist/testing/index.d.ts +10 -0
  55. package/dist/testing/index.d.ts.map +1 -0
  56. package/dist/testing/index.js +10 -0
  57. package/dist/testing/index.js.map +1 -0
  58. package/dist/testing/mocks.d.ts +92 -0
  59. package/dist/testing/mocks.d.ts.map +1 -0
  60. package/dist/testing/mocks.js +197 -0
  61. package/dist/testing/mocks.js.map +1 -0
  62. package/dist/utils/namespace.d.ts +49 -0
  63. package/dist/utils/namespace.d.ts.map +1 -0
  64. package/dist/utils/namespace.js +85 -0
  65. package/dist/utils/namespace.js.map +1 -0
  66. package/package.json +87 -0
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Mock adapter for testing with call tracking
3
+ */
4
+ import { DEFAULT_CAPABILITIES } from '../adapter/capabilities.js';
5
+ import { OperationNotSupportedError } from '../adapter/errors.js';
6
+ /**
7
+ * Mock adapter for testing
8
+ * Records all method calls and allows inspection
9
+ */
10
+ export class MockAdapter {
11
+ calls = [];
12
+ responses = new Map();
13
+ errors = new Map();
14
+ id = 'mock';
15
+ name = 'Mock Adapter';
16
+ version = '1.0.0';
17
+ capabilities = DEFAULT_CAPABILITIES;
18
+ /**
19
+ * Set a mock response for a specific method
20
+ */
21
+ setResponse(method, response) {
22
+ this.responses.set(method, response);
23
+ }
24
+ /**
25
+ * Set an error to throw for a specific method
26
+ */
27
+ setError(method, error) {
28
+ this.errors.set(method, error);
29
+ }
30
+ /**
31
+ * Record a method call
32
+ */
33
+ recordCall(method, params) {
34
+ this.calls.push({
35
+ method,
36
+ params,
37
+ timestamp: new Date(),
38
+ });
39
+ }
40
+ /**
41
+ * Get a mock response or throw error if configured
42
+ */
43
+ getResponse(method, defaultValue) {
44
+ if (this.errors.has(method)) {
45
+ throw this.errors.get(method);
46
+ }
47
+ if (this.responses.has(method)) {
48
+ return this.responses.get(method);
49
+ }
50
+ return defaultValue;
51
+ }
52
+ // CRUD operations
53
+ async create(params) {
54
+ this.recordCall('create', params);
55
+ return this.getResponse('create', { id: 'mock-id', ...params.data });
56
+ }
57
+ async findOne(params) {
58
+ this.recordCall('findOne', params);
59
+ return this.getResponse('findOne', null);
60
+ }
61
+ async findMany(params) {
62
+ this.recordCall('findMany', params);
63
+ return this.getResponse('findMany', []);
64
+ }
65
+ async update(params) {
66
+ this.recordCall('update', params);
67
+ return this.getResponse('update', { ...params.data });
68
+ }
69
+ async delete(params) {
70
+ this.recordCall('delete', params);
71
+ this.getResponse('delete', undefined);
72
+ }
73
+ // Batch operations
74
+ async createMany(params) {
75
+ this.recordCall('createMany', params);
76
+ return this.getResponse('createMany', params.data.map((d, i) => ({ id: `mock-id-${i}`, ...d })));
77
+ }
78
+ async updateMany(params) {
79
+ this.recordCall('updateMany', params);
80
+ return this.getResponse('updateMany', 0);
81
+ }
82
+ async deleteMany(params) {
83
+ this.recordCall('deleteMany', params);
84
+ return this.getResponse('deleteMany', 0);
85
+ }
86
+ // Advanced operations
87
+ async upsert(params) {
88
+ this.recordCall('upsert', params);
89
+ return this.getResponse('upsert', { id: 'mock-id', ...params.create });
90
+ }
91
+ async count(params) {
92
+ this.recordCall('count', params);
93
+ return this.getResponse('count', 0);
94
+ }
95
+ // Transaction support
96
+ async transaction(_callback) {
97
+ this.recordCall('transaction', {});
98
+ throw new OperationNotSupportedError('transaction', 'Mock Adapter');
99
+ }
100
+ // Lifecycle
101
+ async initialize() {
102
+ this.recordCall('initialize', {});
103
+ }
104
+ async isHealthy() {
105
+ this.recordCall('isHealthy', {});
106
+ return this.getResponse('isHealthy', {
107
+ healthy: true,
108
+ uptime: 0,
109
+ });
110
+ }
111
+ async close() {
112
+ this.recordCall('close', {});
113
+ }
114
+ // Schema management
115
+ async getSchemaVersion(namespace) {
116
+ this.recordCall('getSchemaVersion', { namespace });
117
+ return this.getResponse('getSchemaVersion', 0);
118
+ }
119
+ async setSchemaVersion(namespace, version) {
120
+ this.recordCall('setSchemaVersion', { namespace, version });
121
+ }
122
+ async validateSchema(_schema) {
123
+ this.recordCall('validateSchema', { schema: _schema });
124
+ return this.getResponse('validateSchema', { valid: true });
125
+ }
126
+ // Test helpers
127
+ /**
128
+ * Get all calls for a specific method
129
+ */
130
+ getCalls(method) {
131
+ return method ? this.calls.filter((c) => c.method === method) : this.calls;
132
+ }
133
+ /**
134
+ * Get the last call for a specific method
135
+ */
136
+ getLastCall(method) {
137
+ const calls = this.getCalls(method);
138
+ return calls[calls.length - 1];
139
+ }
140
+ /**
141
+ * Check if a method was called
142
+ */
143
+ wasCalled(method) {
144
+ return this.calls.some((c) => c.method === method);
145
+ }
146
+ /**
147
+ * Check how many times a method was called
148
+ */
149
+ getCallCount(method) {
150
+ return this.getCalls(method).length;
151
+ }
152
+ /**
153
+ * Clear all recorded calls
154
+ */
155
+ clearCalls() {
156
+ this.calls = [];
157
+ }
158
+ /**
159
+ * Clear all mock responses and errors
160
+ */
161
+ clearMocks() {
162
+ this.responses.clear();
163
+ this.errors.clear();
164
+ }
165
+ /**
166
+ * Reset the mock adapter completely
167
+ */
168
+ reset() {
169
+ this.clearCalls();
170
+ this.clearMocks();
171
+ }
172
+ /**
173
+ * Verify that a method was called with specific parameters
174
+ */
175
+ verifyCall(method, params) {
176
+ const calls = this.getCalls(method);
177
+ if (calls.length === 0)
178
+ return false;
179
+ if (!params)
180
+ return true;
181
+ return calls.some((call) => {
182
+ for (const [key, value] of Object.entries(params)) {
183
+ if (JSON.stringify(call.params[key]) !== JSON.stringify(value)) {
184
+ return false;
185
+ }
186
+ }
187
+ return true;
188
+ });
189
+ }
190
+ }
191
+ /**
192
+ * Create a mock adapter instance
193
+ */
194
+ export function createMockAdapter() {
195
+ return new MockAdapter();
196
+ }
197
+ //# sourceMappingURL=mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/testing/mocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Namespace manager for table name isolation
3
+ */
4
+ export interface NamespaceConfig {
5
+ enabled: boolean;
6
+ separator: string;
7
+ prefix?: string;
8
+ schemaSupport?: boolean;
9
+ }
10
+ export declare class NamespaceManager {
11
+ private readonly config;
12
+ constructor(config: NamespaceConfig);
13
+ /**
14
+ * Apply namespace to table name
15
+ *
16
+ * Examples:
17
+ * - apply('sendFn', 'email_log') → 'sendFn_email_log'
18
+ * - apply('webFn', 'jobs') → 'webFn_jobs'
19
+ */
20
+ apply(libraryName: string, tableName: string): string;
21
+ /**
22
+ * Get PostgreSQL schema name
23
+ */
24
+ getSchema(libraryName: string): string | undefined;
25
+ /**
26
+ * Parse namespaced table name
27
+ */
28
+ parse(namespacedName: string): {
29
+ namespace?: string;
30
+ table: string;
31
+ };
32
+ /**
33
+ * Check if namespace is enabled
34
+ */
35
+ isEnabled(): boolean;
36
+ /**
37
+ * Get configuration
38
+ */
39
+ getConfig(): Readonly<NamespaceConfig>;
40
+ }
41
+ /**
42
+ * Create a default namespace manager with no namespacing
43
+ */
44
+ export declare function createDefaultNamespaceManager(): NamespaceManager;
45
+ /**
46
+ * Create a namespace manager with common configuration
47
+ */
48
+ export declare function createNamespaceManager(enabled: boolean, options?: Partial<Omit<NamespaceConfig, 'enabled'>>): NamespaceManager;
49
+ //# sourceMappingURL=namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/utils/namespace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,MAAM,EAAE,eAAe;IAOnC;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAiBrD;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQlD;;OAEG;IACH,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAYpE;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC;CAGvC;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,gBAAgB,CAKhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,GAClD,gBAAgB,CAOlB"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Namespace manager for table name isolation
3
+ */
4
+ export class NamespaceManager {
5
+ config;
6
+ constructor(config) {
7
+ this.config = {
8
+ ...config,
9
+ separator: config.separator || '_',
10
+ };
11
+ }
12
+ /**
13
+ * Apply namespace to table name
14
+ *
15
+ * Examples:
16
+ * - apply('sendFn', 'email_log') → 'sendFn_email_log'
17
+ * - apply('webFn', 'jobs') → 'webFn_jobs'
18
+ */
19
+ apply(libraryName, tableName) {
20
+ if (!this.config.enabled) {
21
+ return tableName;
22
+ }
23
+ const parts = [];
24
+ if (this.config.prefix) {
25
+ parts.push(this.config.prefix);
26
+ }
27
+ parts.push(libraryName);
28
+ parts.push(tableName);
29
+ return parts.join(this.config.separator);
30
+ }
31
+ /**
32
+ * Get PostgreSQL schema name
33
+ */
34
+ getSchema(libraryName) {
35
+ if (!this.config.schemaSupport) {
36
+ return undefined;
37
+ }
38
+ return this.config.prefix ? `${this.config.prefix}_${libraryName}` : libraryName;
39
+ }
40
+ /**
41
+ * Parse namespaced table name
42
+ */
43
+ parse(namespacedName) {
44
+ if (!this.config.enabled) {
45
+ return { table: namespacedName };
46
+ }
47
+ const parts = namespacedName.split(this.config.separator);
48
+ const table = parts.pop();
49
+ const namespace = parts.join(this.config.separator);
50
+ return { namespace, table };
51
+ }
52
+ /**
53
+ * Check if namespace is enabled
54
+ */
55
+ isEnabled() {
56
+ return this.config.enabled;
57
+ }
58
+ /**
59
+ * Get configuration
60
+ */
61
+ getConfig() {
62
+ return this.config;
63
+ }
64
+ }
65
+ /**
66
+ * Create a default namespace manager with no namespacing
67
+ */
68
+ export function createDefaultNamespaceManager() {
69
+ return new NamespaceManager({
70
+ enabled: false,
71
+ separator: '_',
72
+ });
73
+ }
74
+ /**
75
+ * Create a namespace manager with common configuration
76
+ */
77
+ export function createNamespaceManager(enabled, options) {
78
+ return new NamespaceManager({
79
+ enabled,
80
+ separator: options?.separator ?? '_',
81
+ prefix: options?.prefix,
82
+ schemaSupport: options?.schemaSupport,
83
+ });
84
+ }
85
+ //# sourceMappingURL=namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/utils/namespace.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,OAAO,gBAAgB;IACV,MAAM,CAAkB;IAEzC,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,MAAM;YACT,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,GAAG;SACnC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,WAAmB,EAAE,SAAiB;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,WAAmB;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IACnF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAsB;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEpD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,OAAO,IAAI,gBAAgB,CAAC;QAC1B,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAgB,EAChB,OAAmD;IAEnD,OAAO,IAAI,gBAAgB,CAAC;QAC1B,OAAO;QACP,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,GAAG;QACpC,MAAM,EAAE,OAAO,EAAE,MAAM;QACvB,aAAa,EAAE,OAAO,EAAE,aAAa;KACtC,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@superfunctions/db",
3
+ "version": "0.1.0",
4
+ "description": "Shared database adapter system for building useful backend libraries",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./adapters": {
14
+ "types": "./dist/adapters/index.d.ts",
15
+ "default": "./dist/adapters/index.js"
16
+ },
17
+ "./testing": {
18
+ "types": "./dist/testing/index.d.ts",
19
+ "default": "./dist/testing/index.js"
20
+ },
21
+ "./types": {
22
+ "types": "./dist/adapter/types.d.ts"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsc",
30
+ "test": "vitest",
31
+ "test:watch": "vitest --watch",
32
+ "lint": "echo 'lint not configured'",
33
+ "typecheck": "tsc --noEmit",
34
+ "clean": "rm -rf dist"
35
+ },
36
+ "peerDependencies": {
37
+ "@prisma/client": ">=6.0.0",
38
+ "drizzle-orm": ">=0.35.0",
39
+ "kysely": ">=0.28.0",
40
+ "mongodb": ">=6.0.0"
41
+ },
42
+ "peerDependenciesMeta": {
43
+ "drizzle-orm": {
44
+ "optional": true
45
+ },
46
+ "kysely": {
47
+ "optional": true
48
+ },
49
+ "@prisma/client": {
50
+ "optional": true
51
+ },
52
+ "mongodb": {
53
+ "optional": true
54
+ }
55
+ },
56
+ "devDependencies": {
57
+ "@types/better-sqlite3": "^7.6.13",
58
+ "@types/node": "^22.0.0",
59
+ "better-sqlite3": "^12.5.0",
60
+ "drizzle-orm": "^0.35.0",
61
+ "typescript": "^5.6.0",
62
+ "vitest": "^3.2.4"
63
+ },
64
+ "keywords": [
65
+ "database",
66
+ "adapter",
67
+ "orm",
68
+ "drizzle",
69
+ "prisma",
70
+ "kysely",
71
+ "mongodb",
72
+ "superfunctions"
73
+ ],
74
+ "author": "21nCo",
75
+ "license": "MIT",
76
+ "bugs": {
77
+ "url": "https://github.com/21nCo/conduct/issues"
78
+ },
79
+ "repository": {
80
+ "type": "git",
81
+ "url": "git+https://github.com/21nCo/super-functions.git",
82
+ "directory": "packages/db"
83
+ },
84
+ "publishConfig": {
85
+ "access": "public"
86
+ }
87
+ }