@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.
- package/README.md +341 -0
- package/dist/adapter/capabilities.d.ts +51 -0
- package/dist/adapter/capabilities.d.ts.map +1 -0
- package/dist/adapter/capabilities.js +56 -0
- package/dist/adapter/capabilities.js.map +1 -0
- package/dist/adapter/errors.d.ts +111 -0
- package/dist/adapter/errors.d.ts.map +1 -0
- package/dist/adapter/errors.js +172 -0
- package/dist/adapter/errors.js.map +1 -0
- package/dist/adapter/factory.d.ts +10 -0
- package/dist/adapter/factory.d.ts.map +1 -0
- package/dist/adapter/factory.js +232 -0
- package/dist/adapter/factory.js.map +1 -0
- package/dist/adapter/types.d.ts +255 -0
- package/dist/adapter/types.d.ts.map +1 -0
- package/dist/adapter/types.js +5 -0
- package/dist/adapter/types.js.map +1 -0
- package/dist/adapters/drizzle/index.d.ts +20 -0
- package/dist/adapters/drizzle/index.d.ts.map +1 -0
- package/dist/adapters/drizzle/index.js +346 -0
- package/dist/adapters/drizzle/index.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/kysely/index.d.ts +18 -0
- package/dist/adapters/kysely/index.d.ts.map +1 -0
- package/dist/adapters/kysely/index.js +305 -0
- package/dist/adapters/kysely/index.js.map +1 -0
- package/dist/adapters/memory/index.d.ts +17 -0
- package/dist/adapters/memory/index.d.ts.map +1 -0
- package/dist/adapters/memory/index.js +362 -0
- package/dist/adapters/memory/index.js.map +1 -0
- package/dist/adapters/prisma/index.d.ts +16 -0
- package/dist/adapters/prisma/index.d.ts.map +1 -0
- package/dist/adapters/prisma/index.js +247 -0
- package/dist/adapters/prisma/index.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/runtime-validation.d.ts +7 -0
- package/dist/migrations/runtime-validation.d.ts.map +1 -0
- package/dist/migrations/runtime-validation.js +40 -0
- package/dist/migrations/runtime-validation.js.map +1 -0
- package/dist/migrations/schema-tracker.d.ts +56 -0
- package/dist/migrations/schema-tracker.d.ts.map +1 -0
- package/dist/migrations/schema-tracker.js +121 -0
- package/dist/migrations/schema-tracker.js.map +1 -0
- package/dist/testing/contract-tests.d.ts +64 -0
- package/dist/testing/contract-tests.d.ts.map +1 -0
- package/dist/testing/contract-tests.js +391 -0
- package/dist/testing/contract-tests.js.map +1 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mocks.d.ts +92 -0
- package/dist/testing/mocks.d.ts.map +1 -0
- package/dist/testing/mocks.js +197 -0
- package/dist/testing/mocks.js.map +1 -0
- package/dist/utils/namespace.d.ts +49 -0
- package/dist/utils/namespace.d.ts.map +1 -0
- package/dist/utils/namespace.js +85 -0
- package/dist/utils/namespace.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error system for adapters
|
|
3
|
+
*/
|
|
4
|
+
export var AdapterErrorCode;
|
|
5
|
+
(function (AdapterErrorCode) {
|
|
6
|
+
// Connection errors
|
|
7
|
+
AdapterErrorCode["CONNECTION_FAILED"] = "ADAPTER_CONNECTION_FAILED";
|
|
8
|
+
AdapterErrorCode["CONNECTION_TIMEOUT"] = "ADAPTER_CONNECTION_TIMEOUT";
|
|
9
|
+
AdapterErrorCode["CONNECTION_CLOSED"] = "ADAPTER_CONNECTION_CLOSED";
|
|
10
|
+
// Query errors
|
|
11
|
+
AdapterErrorCode["QUERY_FAILED"] = "ADAPTER_QUERY_FAILED";
|
|
12
|
+
AdapterErrorCode["QUERY_TIMEOUT"] = "ADAPTER_QUERY_TIMEOUT";
|
|
13
|
+
AdapterErrorCode["INVALID_QUERY"] = "ADAPTER_INVALID_QUERY";
|
|
14
|
+
// Data errors
|
|
15
|
+
AdapterErrorCode["CONSTRAINT_VIOLATION"] = "ADAPTER_CONSTRAINT_VIOLATION";
|
|
16
|
+
AdapterErrorCode["NOT_FOUND"] = "ADAPTER_NOT_FOUND";
|
|
17
|
+
AdapterErrorCode["DUPLICATE_KEY"] = "ADAPTER_DUPLICATE_KEY";
|
|
18
|
+
AdapterErrorCode["INVALID_DATA"] = "ADAPTER_INVALID_DATA";
|
|
19
|
+
// Transaction errors
|
|
20
|
+
AdapterErrorCode["TRANSACTION_FAILED"] = "ADAPTER_TRANSACTION_FAILED";
|
|
21
|
+
AdapterErrorCode["TRANSACTION_DEADLOCK"] = "ADAPTER_TRANSACTION_DEADLOCK";
|
|
22
|
+
// Schema errors
|
|
23
|
+
AdapterErrorCode["SCHEMA_INVALID"] = "ADAPTER_SCHEMA_INVALID";
|
|
24
|
+
AdapterErrorCode["SCHEMA_CONFLICT"] = "ADAPTER_SCHEMA_CONFLICT";
|
|
25
|
+
AdapterErrorCode["MIGRATION_FAILED"] = "ADAPTER_MIGRATION_FAILED";
|
|
26
|
+
// Operation errors
|
|
27
|
+
AdapterErrorCode["OPERATION_NOT_SUPPORTED"] = "ADAPTER_OPERATION_NOT_SUPPORTED";
|
|
28
|
+
AdapterErrorCode["BATCH_SIZE_EXCEEDED"] = "ADAPTER_BATCH_SIZE_EXCEEDED";
|
|
29
|
+
// Unknown
|
|
30
|
+
AdapterErrorCode["UNKNOWN_ERROR"] = "ADAPTER_UNKNOWN_ERROR";
|
|
31
|
+
})(AdapterErrorCode || (AdapterErrorCode = {}));
|
|
32
|
+
/**
|
|
33
|
+
* Base adapter error class
|
|
34
|
+
*/
|
|
35
|
+
export class AdapterError extends Error {
|
|
36
|
+
code;
|
|
37
|
+
options;
|
|
38
|
+
name = 'AdapterError';
|
|
39
|
+
timestamp;
|
|
40
|
+
constructor(code, message, options) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.code = code;
|
|
43
|
+
this.options = options;
|
|
44
|
+
this.timestamp = new Date();
|
|
45
|
+
// Maintain proper stack trace for where error was thrown (V8 only)
|
|
46
|
+
if (Error.captureStackTrace) {
|
|
47
|
+
Error.captureStackTrace(this, this.constructor);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
isRetryable() {
|
|
51
|
+
return this.options?.retryable ?? false;
|
|
52
|
+
}
|
|
53
|
+
toJSON() {
|
|
54
|
+
return {
|
|
55
|
+
name: this.name,
|
|
56
|
+
code: this.code,
|
|
57
|
+
message: this.message,
|
|
58
|
+
timestamp: this.timestamp.toISOString(),
|
|
59
|
+
context: this.options?.context,
|
|
60
|
+
retryable: this.isRetryable(),
|
|
61
|
+
severity: this.options?.severity ?? 'error',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
static from(error, code = AdapterErrorCode.UNKNOWN_ERROR) {
|
|
65
|
+
if (error instanceof AdapterError) {
|
|
66
|
+
return error;
|
|
67
|
+
}
|
|
68
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
69
|
+
return new AdapterError(code, message, { cause: error });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Connection error - fatal, retryable
|
|
74
|
+
*/
|
|
75
|
+
export class ConnectionError extends AdapterError {
|
|
76
|
+
name = 'ConnectionError';
|
|
77
|
+
constructor(message, options) {
|
|
78
|
+
super(AdapterErrorCode.CONNECTION_FAILED, message, {
|
|
79
|
+
...options,
|
|
80
|
+
severity: 'fatal',
|
|
81
|
+
retryable: true,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Constraint violation error - not retryable
|
|
87
|
+
*/
|
|
88
|
+
export class ConstraintViolationError extends AdapterError {
|
|
89
|
+
constraint;
|
|
90
|
+
name = 'ConstraintViolationError';
|
|
91
|
+
constructor(message, constraint) {
|
|
92
|
+
super(AdapterErrorCode.CONSTRAINT_VIOLATION, message, {
|
|
93
|
+
context: { constraint },
|
|
94
|
+
retryable: false,
|
|
95
|
+
});
|
|
96
|
+
this.constraint = constraint;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Not found error - not retryable
|
|
101
|
+
*/
|
|
102
|
+
export class NotFoundError extends AdapterError {
|
|
103
|
+
name = 'NotFoundError';
|
|
104
|
+
constructor(model, where) {
|
|
105
|
+
super(AdapterErrorCode.NOT_FOUND, `Record not found in ${model}`, {
|
|
106
|
+
context: { model, where },
|
|
107
|
+
retryable: false,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Duplicate key error - not retryable
|
|
113
|
+
*/
|
|
114
|
+
export class DuplicateKeyError extends AdapterError {
|
|
115
|
+
key;
|
|
116
|
+
name = 'DuplicateKeyError';
|
|
117
|
+
constructor(message, key) {
|
|
118
|
+
super(AdapterErrorCode.DUPLICATE_KEY, message, {
|
|
119
|
+
context: { key },
|
|
120
|
+
retryable: false,
|
|
121
|
+
});
|
|
122
|
+
this.key = key;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Query failed error - may be retryable
|
|
127
|
+
*/
|
|
128
|
+
export class QueryFailedError extends AdapterError {
|
|
129
|
+
name = 'QueryFailedError';
|
|
130
|
+
constructor(message, options) {
|
|
131
|
+
super(AdapterErrorCode.QUERY_FAILED, message, options);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Transaction failed error - may be retryable
|
|
136
|
+
*/
|
|
137
|
+
export class TransactionError extends AdapterError {
|
|
138
|
+
name = 'TransactionError';
|
|
139
|
+
constructor(message, options) {
|
|
140
|
+
super(AdapterErrorCode.TRANSACTION_FAILED, message, {
|
|
141
|
+
...options,
|
|
142
|
+
retryable: options?.retryable ?? true,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Schema validation error - not retryable
|
|
148
|
+
*/
|
|
149
|
+
export class SchemaValidationError extends AdapterError {
|
|
150
|
+
errors;
|
|
151
|
+
name = 'SchemaValidationError';
|
|
152
|
+
constructor(message, errors) {
|
|
153
|
+
super(AdapterErrorCode.SCHEMA_INVALID, message, {
|
|
154
|
+
context: { errors },
|
|
155
|
+
retryable: false,
|
|
156
|
+
});
|
|
157
|
+
this.errors = errors;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Operation not supported error - not retryable
|
|
162
|
+
*/
|
|
163
|
+
export class OperationNotSupportedError extends AdapterError {
|
|
164
|
+
name = 'OperationNotSupportedError';
|
|
165
|
+
constructor(operation, adapterName) {
|
|
166
|
+
super(AdapterErrorCode.OPERATION_NOT_SUPPORTED, `Operation '${operation}' is not supported by ${adapterName}`, {
|
|
167
|
+
context: { operation, adapterName },
|
|
168
|
+
retryable: false,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/adapter/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAN,IAAY,gBAgCX;AAhCD,WAAY,gBAAgB;IAC1B,oBAAoB;IACpB,mEAA+C,CAAA;IAC/C,qEAAiD,CAAA;IACjD,mEAA+C,CAAA;IAE/C,eAAe;IACf,yDAAqC,CAAA;IACrC,2DAAuC,CAAA;IACvC,2DAAuC,CAAA;IAEvC,cAAc;IACd,yEAAqD,CAAA;IACrD,mDAA+B,CAAA;IAC/B,2DAAuC,CAAA;IACvC,yDAAqC,CAAA;IAErC,qBAAqB;IACrB,qEAAiD,CAAA;IACjD,yEAAqD,CAAA;IAErD,gBAAgB;IAChB,6DAAyC,CAAA;IACzC,+DAA2C,CAAA;IAC3C,iEAA6C,CAAA;IAE7C,mBAAmB;IACnB,+EAA2D,CAAA;IAC3D,uEAAmD,CAAA;IAEnD,UAAU;IACV,2DAAuC,CAAA;AACzC,CAAC,EAhCW,gBAAgB,KAAhB,gBAAgB,QAgC3B;AASD;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAKnB;IAEA;IANO,IAAI,GAAW,cAAc,CAAC;IACvC,SAAS,CAAO;IAEhC,YACkB,IAAsB,EACtC,OAAe,EACC,OAA6B;QAE7C,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAkB;QAEtB,YAAO,GAAP,OAAO,CAAsB;QAG7C,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE5B,mEAAmE;QACnE,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC;IAC1C,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO;YAC9B,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;YAC7B,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,OAAO;SAC5C,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,KAAc,EAAE,IAAI,GAAG,gBAAgB,CAAC,aAAa;QAC/D,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IACtB,IAAI,GAAG,iBAAiB,CAAC;IAElD,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,EAAE;YACjD,GAAG,OAAO;YACV,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,YAAY;IAGX;IAFpB,IAAI,GAAG,0BAA0B,CAAC;IAE3D,YAAY,OAAe,EAAkB,UAAkB;QAC7D,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,EAAE;YACpD,OAAO,EAAE,EAAE,UAAU,EAAE;YACvB,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QAJwC,eAAU,GAAV,UAAU,CAAQ;IAK/D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IACpB,IAAI,GAAG,eAAe,CAAC;IAEhD,YAAY,KAAa,EAAE,KAAoB;QAC7C,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,uBAAuB,KAAK,EAAE,EAAE;YAChE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;YACzB,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IAGJ;IAFpB,IAAI,GAAG,mBAAmB,CAAC;IAEpD,YAAY,OAAe,EAAkB,GAAW;QACtD,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,EAAE;YAC7C,OAAO,EAAE,EAAE,GAAG,EAAE;YAChB,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QAJwC,QAAG,GAAH,GAAG,CAAQ;IAKxD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IACvB,IAAI,GAAG,kBAAkB,CAAC;IAEnD,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IACvB,IAAI,GAAG,kBAAkB,CAAC;IAEnD,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,EAAE;YAClD,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;SACtC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAGR;IAFpB,IAAI,GAAG,uBAAuB,CAAC;IAExD,YAAY,OAAe,EAAkB,MAAgB;QAC3D,KAAK,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,EAAE;YAC9C,OAAO,EAAE,EAAE,MAAM,EAAE;YACnB,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QAJwC,WAAM,GAAN,MAAM,CAAU;IAK7D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,YAAY;IACjC,IAAI,GAAG,4BAA4B,CAAC;IAE7D,YAAY,SAAiB,EAAE,WAAmB;QAChD,KAAK,CACH,gBAAgB,CAAC,uBAAuB,EACxC,cAAc,SAAS,yBAAyB,WAAW,EAAE,EAC7D;YACE,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;YACnC,SAAS,EAAE,KAAK;SACjB,CACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter factory for creating and wrapping adapters
|
|
3
|
+
*/
|
|
4
|
+
import type { Adapter, AdapterFactoryOptions, LibraryOptions } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create an adapter factory that wraps adapter implementations with
|
|
7
|
+
* automatic features like namespacing, transformations, and logging
|
|
8
|
+
*/
|
|
9
|
+
export declare function createAdapterFactory(options: AdapterFactoryOptions): (libraryOptions: LibraryOptions) => Adapter;
|
|
10
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/adapter/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,OAAO,EAEP,qBAAqB,EAGrB,cAAc,EAEf,MAAM,YAAY,CAAC;AAGpB;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAC7B,CAAC,cAAc,EAAE,cAAc,KAAK,OAAO,CAa7C"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter factory for creating and wrapping adapters
|
|
3
|
+
*/
|
|
4
|
+
import { mergeCapabilities } from './capabilities.js';
|
|
5
|
+
import { NamespaceManager } from '../utils/namespace.js';
|
|
6
|
+
/**
|
|
7
|
+
* Create an adapter factory that wraps adapter implementations with
|
|
8
|
+
* automatic features like namespacing, transformations, and logging
|
|
9
|
+
*/
|
|
10
|
+
export function createAdapterFactory(options) {
|
|
11
|
+
const { config, adapter: createAdapter } = options;
|
|
12
|
+
return (libraryOptions) => {
|
|
13
|
+
// Build context for the adapter
|
|
14
|
+
const context = buildAdapterContext(config, libraryOptions);
|
|
15
|
+
// Create the implementation
|
|
16
|
+
const implementation = createAdapter(context);
|
|
17
|
+
// Wrap with factory enhancements
|
|
18
|
+
return wrapAdapter(implementation, context, config);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build adapter context with helper functions and configuration
|
|
23
|
+
*/
|
|
24
|
+
function buildAdapterContext(config, libraryOptions) {
|
|
25
|
+
const namespace = libraryOptions.namespace ?? 'default';
|
|
26
|
+
const schema = libraryOptions.schema ?? {};
|
|
27
|
+
// Create namespace manager
|
|
28
|
+
const namespaceManager = new NamespaceManager({
|
|
29
|
+
enabled: config.namespace?.enabled ?? false,
|
|
30
|
+
separator: config.namespace?.separator ?? '_',
|
|
31
|
+
prefix: config.namespace?.prefix,
|
|
32
|
+
schemaSupport: config.namespace?.schemaSupport ?? false,
|
|
33
|
+
});
|
|
34
|
+
// Logger setup
|
|
35
|
+
const logger = createLogger(config.debug);
|
|
36
|
+
return {
|
|
37
|
+
options: libraryOptions,
|
|
38
|
+
schema,
|
|
39
|
+
// Model name helpers
|
|
40
|
+
getModelName: (model) => {
|
|
41
|
+
const tableName = config.usePlural ? pluralize(model) : model;
|
|
42
|
+
return namespaceManager.isEnabled()
|
|
43
|
+
? namespaceManager.apply(namespace, tableName)
|
|
44
|
+
: tableName;
|
|
45
|
+
},
|
|
46
|
+
getDefaultModelName: (model) => {
|
|
47
|
+
return config.usePlural ? pluralize(model) : model;
|
|
48
|
+
},
|
|
49
|
+
// Field name helpers
|
|
50
|
+
getFieldName: ({ model, field }) => {
|
|
51
|
+
const fieldSchema = schema[model]?.fields[field];
|
|
52
|
+
return fieldSchema?.fieldName ?? field;
|
|
53
|
+
},
|
|
54
|
+
getDefaultFieldName: ({ field }) => {
|
|
55
|
+
return field;
|
|
56
|
+
},
|
|
57
|
+
// Data transformers
|
|
58
|
+
transformInput: async (data, _model, action) => {
|
|
59
|
+
let transformed = { ...data };
|
|
60
|
+
// Apply key mapping (e.g., id -> _id for MongoDB)
|
|
61
|
+
if (config.mapKeysInput) {
|
|
62
|
+
for (const [from, to] of Object.entries(config.mapKeysInput)) {
|
|
63
|
+
if (from in transformed) {
|
|
64
|
+
transformed[to] = transformed[from];
|
|
65
|
+
delete transformed[from];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Custom ID generation
|
|
70
|
+
if (action === 'create' &&
|
|
71
|
+
config.customIdGenerator &&
|
|
72
|
+
!config.disableIdGeneration &&
|
|
73
|
+
!transformed.id) {
|
|
74
|
+
transformed.id = config.customIdGenerator();
|
|
75
|
+
}
|
|
76
|
+
return transformed;
|
|
77
|
+
},
|
|
78
|
+
transformOutput: async (data, _model) => {
|
|
79
|
+
if (!data)
|
|
80
|
+
return data;
|
|
81
|
+
let transformed = { ...data };
|
|
82
|
+
// Apply key mapping (e.g., _id -> id for MongoDB)
|
|
83
|
+
if (config.mapKeysOutput) {
|
|
84
|
+
for (const [from, to] of Object.entries(config.mapKeysOutput)) {
|
|
85
|
+
if (from in transformed) {
|
|
86
|
+
transformed[to] = transformed[from];
|
|
87
|
+
delete transformed[from];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return transformed;
|
|
92
|
+
},
|
|
93
|
+
log: logger,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Wrap adapter implementation with factory enhancements
|
|
98
|
+
*/
|
|
99
|
+
function wrapAdapter(implementation, context, config) {
|
|
100
|
+
const capabilities = mergeCapabilities(config.capabilities ?? {});
|
|
101
|
+
return {
|
|
102
|
+
// Metadata
|
|
103
|
+
id: config.adapterId,
|
|
104
|
+
name: config.adapterName ?? config.adapterId,
|
|
105
|
+
version: '1.0.0',
|
|
106
|
+
capabilities,
|
|
107
|
+
// CRUD operations with transformation
|
|
108
|
+
async create(params) {
|
|
109
|
+
context.log.debug('create', params);
|
|
110
|
+
const transformed = await context.transformInput(params.data, params.model, 'create');
|
|
111
|
+
const result = await implementation.create({ ...params, data: transformed });
|
|
112
|
+
return context.transformOutput(result, params.model);
|
|
113
|
+
},
|
|
114
|
+
async findOne(params) {
|
|
115
|
+
context.log.debug('findOne', params);
|
|
116
|
+
const result = await implementation.findOne(params);
|
|
117
|
+
return result ? context.transformOutput(result, params.model) : null;
|
|
118
|
+
},
|
|
119
|
+
async findMany(params) {
|
|
120
|
+
context.log.debug('findMany', params);
|
|
121
|
+
const results = await implementation.findMany(params);
|
|
122
|
+
return Promise.all(results.map((r) => context.transformOutput(r, params.model)));
|
|
123
|
+
},
|
|
124
|
+
async update(params) {
|
|
125
|
+
context.log.debug('update', params);
|
|
126
|
+
const transformed = await context.transformInput(params.data, params.model, 'update');
|
|
127
|
+
const result = await implementation.update({ ...params, data: transformed });
|
|
128
|
+
return context.transformOutput(result, params.model);
|
|
129
|
+
},
|
|
130
|
+
async delete(params) {
|
|
131
|
+
context.log.debug('delete', params);
|
|
132
|
+
return implementation.delete(params);
|
|
133
|
+
},
|
|
134
|
+
// Batch operations
|
|
135
|
+
async createMany(params) {
|
|
136
|
+
context.log.debug('createMany', params);
|
|
137
|
+
const transformed = await Promise.all(params.data.map((d) => context.transformInput(d, params.model, 'create')));
|
|
138
|
+
const results = await implementation.createMany({ ...params, data: transformed });
|
|
139
|
+
return Promise.all(results.map((r) => context.transformOutput(r, params.model)));
|
|
140
|
+
},
|
|
141
|
+
async updateMany(params) {
|
|
142
|
+
context.log.debug('updateMany', params);
|
|
143
|
+
const transformed = await context.transformInput(params.data, params.model, 'update');
|
|
144
|
+
return implementation.updateMany({ ...params, data: transformed });
|
|
145
|
+
},
|
|
146
|
+
async deleteMany(params) {
|
|
147
|
+
context.log.debug('deleteMany', params);
|
|
148
|
+
return implementation.deleteMany(params);
|
|
149
|
+
},
|
|
150
|
+
// Advanced operations
|
|
151
|
+
async upsert(params) {
|
|
152
|
+
context.log.debug('upsert', params);
|
|
153
|
+
const transformedCreate = await context.transformInput(params.create, params.model, 'create');
|
|
154
|
+
const transformedUpdate = await context.transformInput(params.update, params.model, 'update');
|
|
155
|
+
const result = await implementation.upsert({
|
|
156
|
+
...params,
|
|
157
|
+
create: transformedCreate,
|
|
158
|
+
update: transformedUpdate,
|
|
159
|
+
});
|
|
160
|
+
return context.transformOutput(result, params.model);
|
|
161
|
+
},
|
|
162
|
+
async count(params) {
|
|
163
|
+
context.log.debug('count', params);
|
|
164
|
+
return implementation.count(params);
|
|
165
|
+
},
|
|
166
|
+
// Transaction support
|
|
167
|
+
async transaction(callback) {
|
|
168
|
+
context.log.debug('transaction');
|
|
169
|
+
return implementation.transaction(callback);
|
|
170
|
+
},
|
|
171
|
+
// Lifecycle
|
|
172
|
+
async initialize() {
|
|
173
|
+
context.log.info('Initializing adapter');
|
|
174
|
+
return implementation.initialize();
|
|
175
|
+
},
|
|
176
|
+
async isHealthy() {
|
|
177
|
+
return implementation.isHealthy();
|
|
178
|
+
},
|
|
179
|
+
async close() {
|
|
180
|
+
context.log.info('Closing adapter');
|
|
181
|
+
return implementation.close();
|
|
182
|
+
},
|
|
183
|
+
// Schema management
|
|
184
|
+
async getSchemaVersion(namespace) {
|
|
185
|
+
return implementation.getSchemaVersion(namespace);
|
|
186
|
+
},
|
|
187
|
+
async setSchemaVersion(namespace, version) {
|
|
188
|
+
return implementation.setSchemaVersion(namespace, version);
|
|
189
|
+
},
|
|
190
|
+
async validateSchema(schema) {
|
|
191
|
+
return implementation.validateSchema(schema);
|
|
192
|
+
},
|
|
193
|
+
// Optional schema creation
|
|
194
|
+
createSchema: implementation.createSchema
|
|
195
|
+
? async (params) => implementation.createSchema(params)
|
|
196
|
+
: undefined,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Create logger based on debug configuration
|
|
201
|
+
*/
|
|
202
|
+
function createLogger(debug) {
|
|
203
|
+
const isDebug = typeof debug === 'boolean' ? debug : debug?.logQueries ?? false;
|
|
204
|
+
const noop = () => { };
|
|
205
|
+
if (!isDebug) {
|
|
206
|
+
return {
|
|
207
|
+
debug: noop,
|
|
208
|
+
info: noop,
|
|
209
|
+
warn: console.warn.bind(console),
|
|
210
|
+
error: console.error.bind(console),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
debug: console.debug.bind(console),
|
|
215
|
+
info: console.info.bind(console),
|
|
216
|
+
warn: console.warn.bind(console),
|
|
217
|
+
error: console.error.bind(console),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Simple pluralize helper
|
|
222
|
+
*/
|
|
223
|
+
function pluralize(word) {
|
|
224
|
+
if (word.endsWith('y') && !word.endsWith('ay') && !word.endsWith('ey') && !word.endsWith('oy') && !word.endsWith('uy')) {
|
|
225
|
+
return word.slice(0, -1) + 'ies';
|
|
226
|
+
}
|
|
227
|
+
if (word.endsWith('s') || word.endsWith('x') || word.endsWith('z') || word.endsWith('ch') || word.endsWith('sh')) {
|
|
228
|
+
return word + 'es';
|
|
229
|
+
}
|
|
230
|
+
return word + 's';
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/adapter/factory.ts"],"names":[],"mappings":"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"}
|