@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,15 @@
1
+ /**
2
+ * @superfunctions/db - Shared database adapter system
3
+ */
4
+ export { createAdapterFactory } from './adapter/factory.js';
5
+ export type { Adapter, TransactionAdapter, AdapterFactoryConfig, AdapterFactoryOptions, AdapterContext, HealthStatus, CreateParams, FindOneParams, FindManyParams, UpdateParams, DeleteParams, CreateManyParams, UpdateManyParams, DeleteManyParams, UpsertParams, CountParams, WhereClause, OrderBy, JoinConfig, TableSchema, FieldSchema, IndexSchema, ConstraintSchema, TableSchemaMap, ValidationResult, CreateSchemaParams, SchemaCreation, TransactionIsolation, LibraryOptions, Logger, AdapterImplementation, } from './adapter/types.js';
6
+ export { DEFAULT_CAPABILITIES, mergeCapabilities } from './adapter/capabilities.js';
7
+ export type { AdapterCapabilities } from './adapter/capabilities.js';
8
+ export { AdapterError, AdapterErrorCode, ConnectionError, ConstraintViolationError, NotFoundError, DuplicateKeyError, QueryFailedError, TransactionError, SchemaValidationError, OperationNotSupportedError, } from './adapter/errors.js';
9
+ export type { AdapterErrorOptions } from './adapter/errors.js';
10
+ export { NamespaceManager, createDefaultNamespaceManager, createNamespaceManager, } from './utils/namespace.js';
11
+ export type { NamespaceConfig } from './utils/namespace.js';
12
+ export { SchemaTracker, createSchemaTracker } from './migrations/schema-tracker.js';
13
+ export type { SchemaVersion } from './migrations/schema-tracker.js';
14
+ export { validateRecordAgainstSchema } from './migrations/runtime-validation.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5D,YAAY,EACV,OAAO,EACP,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,MAAM,EACN,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpF,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACpF,YAAY,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @superfunctions/db - Shared database adapter system
3
+ */
4
+ // Core factory
5
+ export { createAdapterFactory } from './adapter/factory.js';
6
+ // Capabilities
7
+ export { DEFAULT_CAPABILITIES, mergeCapabilities } from './adapter/capabilities.js';
8
+ // Errors
9
+ export { AdapterError, AdapterErrorCode, ConnectionError, ConstraintViolationError, NotFoundError, DuplicateKeyError, QueryFailedError, TransactionError, SchemaValidationError, OperationNotSupportedError, } from './adapter/errors.js';
10
+ // Utils
11
+ export { NamespaceManager, createDefaultNamespaceManager, createNamespaceManager, } from './utils/namespace.js';
12
+ // Schema Management
13
+ export { SchemaTracker, createSchemaTracker } from './migrations/schema-tracker.js';
14
+ export { validateRecordAgainstSchema } from './migrations/runtime-validation.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAe;AACf,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAqC5D,eAAe;AACf,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,SAAS;AACT,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAG7B,QAAQ;AACR,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAEpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Simple runtime validation helpers for records against a TableSchema.
3
+ * These are intentionally lightweight and not a replacement for Zod/Valibot.
4
+ */
5
+ import type { TableSchema, ValidationResult } from '../adapter/types.js';
6
+ export declare function validateRecordAgainstSchema(schema: TableSchema, record: Record<string, unknown>): ValidationResult;
7
+ //# sourceMappingURL=runtime-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-validation.d.ts","sourceRoot":"","sources":["../../src/migrations/runtime-validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAyBzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAQlH"}
@@ -0,0 +1,40 @@
1
+ function validateField(fieldKey, field, value) {
2
+ if (value == null) {
3
+ if (field.required)
4
+ return `Field ${fieldKey} is required`;
5
+ return null;
6
+ }
7
+ switch (field.type) {
8
+ case 'string':
9
+ return typeof value === 'string' ? null : `Field ${fieldKey} must be a string`;
10
+ case 'number':
11
+ return typeof value === 'number' ? null : `Field ${fieldKey} must be a number`;
12
+ case 'boolean':
13
+ return typeof value === 'boolean' ? null : `Field ${fieldKey} must be a boolean`;
14
+ case 'date':
15
+ return value instanceof Date || typeof value === 'string' ? null : `Field ${fieldKey} must be a date or ISO string`;
16
+ case 'json':
17
+ try {
18
+ JSON.stringify(value);
19
+ return null;
20
+ }
21
+ catch {
22
+ return `Field ${fieldKey} must be JSON-serializable`;
23
+ }
24
+ case 'bigint':
25
+ return typeof value === 'bigint' || typeof value === 'number' ? null : `Field ${fieldKey} must be bigint or number`;
26
+ default:
27
+ return null;
28
+ }
29
+ }
30
+ export function validateRecordAgainstSchema(schema, record) {
31
+ const errors = [];
32
+ for (const [key, field] of Object.entries(schema.fields)) {
33
+ const v = record[key];
34
+ const err = validateField(key, field, v);
35
+ if (err)
36
+ errors.push(err);
37
+ }
38
+ return errors.length === 0 ? { valid: true } : { valid: false, errors };
39
+ }
40
+ //# sourceMappingURL=runtime-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-validation.js","sourceRoot":"","sources":["../../src/migrations/runtime-validation.ts"],"names":[],"mappings":"AAMA,SAAS,aAAa,CAAC,QAAgB,EAAE,KAAU,EAAE,KAAc;IACjE,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,KAAK,CAAC,QAAQ;YAAE,OAAO,SAAS,QAAQ,cAAc,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ,mBAAmB,CAAC;QACjF,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ,mBAAmB,CAAC;QACjF,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ,oBAAoB,CAAC;QACnF,KAAK,MAAM;YACT,OAAO,KAAK,YAAY,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ,+BAA+B,CAAC;QACtH,KAAK,MAAM;YACT,IAAI,CAAC;gBAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,SAAS,QAAQ,4BAA4B,CAAC;YAAC,CAAC;QAC7G,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ,2BAA2B,CAAC;QACtH;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAmB,EAAE,MAA+B;IAC9F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,MAAM,CAAC,GAAI,MAAc,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,GAAG;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Schema version tracking for Superfunctions libraries
3
+ */
4
+ import type { Adapter } from '../adapter/types.js';
5
+ export interface SchemaVersion {
6
+ namespace: string;
7
+ version: number;
8
+ appliedAt: Date;
9
+ }
10
+ /**
11
+ * Schema tracker manages schema versions for libraries
12
+ */
13
+ export declare class SchemaTracker {
14
+ private adapter;
15
+ private readonly TRACKING_TABLE;
16
+ constructor(adapter: Adapter);
17
+ /**
18
+ * Get current schema version for a library
19
+ */
20
+ getVersion(namespace: string): Promise<number>;
21
+ /**
22
+ * Set schema version for a library
23
+ */
24
+ setVersion(namespace: string, version: number): Promise<void>;
25
+ /**
26
+ * Get all schema versions
27
+ */
28
+ getAllVersions(): Promise<SchemaVersion[]>;
29
+ /**
30
+ * Initialize tracking table
31
+ * This should be called once during setup
32
+ */
33
+ initialize(): Promise<void>;
34
+ /**
35
+ * Check if a library's schema is up to date
36
+ */
37
+ isUpToDate(namespace: string, requiredVersion: number): Promise<boolean>;
38
+ /**
39
+ * Check if a library's schema needs migration
40
+ */
41
+ needsMigration(namespace: string, requiredVersion: number): Promise<boolean>;
42
+ /**
43
+ * Get version status for a library
44
+ */
45
+ getVersionStatus(namespace: string, requiredVersion: number): Promise<{
46
+ namespace: string;
47
+ current: number;
48
+ required: number;
49
+ status: 'up-to-date' | 'outdated' | 'not-installed' | 'newer';
50
+ }>;
51
+ }
52
+ /**
53
+ * Create a schema tracker instance
54
+ */
55
+ export declare function createSchemaTracker(adapter: Adapter): SchemaTracker;
56
+ //# sourceMappingURL=schema-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-tracker.d.ts","sourceRoot":"","sources":["../../src/migrations/schema-tracker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,aAAa;IAGZ,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;gBAEjD,OAAO,EAAE,OAAO;IAEpC;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAapD;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBnE;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAYhD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK9E;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlF;;OAEG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,eAAe,GAAG,OAAO,CAAC;KAC/D,CAAC;CAqBH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAEnE"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Schema version tracking for Superfunctions libraries
3
+ */
4
+ /**
5
+ * Schema tracker manages schema versions for libraries
6
+ */
7
+ export class SchemaTracker {
8
+ adapter;
9
+ TRACKING_TABLE = '__superfunctions_schema_versions';
10
+ constructor(adapter) {
11
+ this.adapter = adapter;
12
+ }
13
+ /**
14
+ * Get current schema version for a library
15
+ */
16
+ async getVersion(namespace) {
17
+ try {
18
+ const result = await this.adapter.findOne({
19
+ model: this.TRACKING_TABLE,
20
+ where: [{ field: 'namespace', operator: 'eq', value: namespace }],
21
+ });
22
+ return result?.version ?? 0;
23
+ }
24
+ catch {
25
+ // Table doesn't exist yet or other error
26
+ return 0;
27
+ }
28
+ }
29
+ /**
30
+ * Set schema version for a library
31
+ */
32
+ async setVersion(namespace, version) {
33
+ try {
34
+ await this.adapter.upsert({
35
+ model: this.TRACKING_TABLE,
36
+ where: [{ field: 'namespace', operator: 'eq', value: namespace }],
37
+ create: {
38
+ namespace,
39
+ version,
40
+ appliedAt: new Date(),
41
+ },
42
+ update: {
43
+ version,
44
+ appliedAt: new Date(),
45
+ },
46
+ });
47
+ }
48
+ catch (error) {
49
+ throw new Error(`Failed to set schema version: ${error}`);
50
+ }
51
+ }
52
+ /**
53
+ * Get all schema versions
54
+ */
55
+ async getAllVersions() {
56
+ try {
57
+ return await this.adapter.findMany({
58
+ model: this.TRACKING_TABLE,
59
+ where: [],
60
+ orderBy: [{ field: 'namespace', direction: 'asc' }],
61
+ });
62
+ }
63
+ catch {
64
+ return [];
65
+ }
66
+ }
67
+ /**
68
+ * Initialize tracking table
69
+ * This should be called once during setup
70
+ */
71
+ async initialize() {
72
+ // The tracking table needs to be created manually or via migrations
73
+ // This is a no-op for now, as table creation is ORM-specific
74
+ }
75
+ /**
76
+ * Check if a library's schema is up to date
77
+ */
78
+ async isUpToDate(namespace, requiredVersion) {
79
+ const currentVersion = await this.getVersion(namespace);
80
+ return currentVersion >= requiredVersion;
81
+ }
82
+ /**
83
+ * Check if a library's schema needs migration
84
+ */
85
+ async needsMigration(namespace, requiredVersion) {
86
+ const currentVersion = await this.getVersion(namespace);
87
+ return currentVersion < requiredVersion;
88
+ }
89
+ /**
90
+ * Get version status for a library
91
+ */
92
+ async getVersionStatus(namespace, requiredVersion) {
93
+ const current = await this.getVersion(namespace);
94
+ let status;
95
+ if (current === 0) {
96
+ status = 'not-installed';
97
+ }
98
+ else if (current < requiredVersion) {
99
+ status = 'outdated';
100
+ }
101
+ else if (current > requiredVersion) {
102
+ status = 'newer';
103
+ }
104
+ else {
105
+ status = 'up-to-date';
106
+ }
107
+ return {
108
+ namespace,
109
+ current,
110
+ required: requiredVersion,
111
+ status,
112
+ };
113
+ }
114
+ }
115
+ /**
116
+ * Create a schema tracker instance
117
+ */
118
+ export function createSchemaTracker(adapter) {
119
+ return new SchemaTracker(adapter);
120
+ }
121
+ //# sourceMappingURL=schema-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-tracker.js","sourceRoot":"","sources":["../../src/migrations/schema-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Contract tests for adapter compliance
3
+ */
4
+ import type { Adapter, TableSchemaMap } from '../adapter/types.js';
5
+ export interface AdapterTestConfig {
6
+ adapter: Adapter;
7
+ namespace: string;
8
+ testSchema: TableSchemaMap;
9
+ capabilities?: string[];
10
+ beforeEach?: () => Promise<void>;
11
+ afterEach?: () => Promise<void>;
12
+ }
13
+ /**
14
+ * Test adapter contract compliance
15
+ * Use with your test framework (vitest, jest, etc.)
16
+ */
17
+ export declare function testAdapterContract(config: AdapterTestConfig): {
18
+ /**
19
+ * Test CRUD operations
20
+ */
21
+ testCRUD(): Promise<{
22
+ name: string;
23
+ test: () => Promise<void>;
24
+ }[]>;
25
+ /**
26
+ * Test batch operations
27
+ */
28
+ testBatch(): Promise<{
29
+ name: string;
30
+ test: () => Promise<void>;
31
+ }[]>;
32
+ /**
33
+ * Test advanced operations
34
+ */
35
+ testAdvanced(): Promise<{
36
+ name: string;
37
+ test: () => Promise<void>;
38
+ }[]>;
39
+ /**
40
+ * Test lifecycle operations
41
+ */
42
+ testLifecycle(): Promise<{
43
+ name: string;
44
+ test: () => Promise<void>;
45
+ }[]>;
46
+ /**
47
+ * Run all contract tests
48
+ */
49
+ runAll(): Promise<{
50
+ total: number;
51
+ passed: number;
52
+ failed: number;
53
+ errors: Array<{
54
+ name: string;
55
+ error: Error;
56
+ }>;
57
+ }>;
58
+ };
59
+ /**
60
+ * Helper function to run contract tests with a test framework
61
+ * Pass your test framework's describe, it, beforeEach, afterEach functions
62
+ */
63
+ export declare function describeAdapterContract(name: string, config: AdapterTestConfig, describe: any, it: any, beforeEach?: any, afterEach?: any): void;
64
+ //# sourceMappingURL=contract-tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-tests.d.ts","sourceRoot":"","sources":["../../src/testing/contract-tests.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,cAAc,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB;IAIzD;;OAEG;;cAE0B,MAAM;cAAQ,MAAM,OAAO,CAAC,IAAI,CAAC;;IAsI9D;;OAEG;;cAM0B,MAAM;cAAQ,MAAM,OAAO,CAAC,IAAI,CAAC;;IA4B9D;;OAEG;;cAE0B,MAAM;cAAQ,MAAM,OAAO,CAAC,IAAI,CAAC;;IAmE9D;;OAEG;;cAE0B,MAAM;cAAQ,MAAM,OAAO,CAAC,IAAI,CAAC;;IAiC9D;;OAEG;;;;;gBAae,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,KAAK,CAAA;SAAE,CAAC;;EA2B1D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,GAAG,EACb,EAAE,EAAE,GAAG,EACP,UAAU,CAAC,EAAE,GAAG,EAChB,SAAS,CAAC,EAAE,GAAG,QAuGhB"}