@zauso-ai/capstan-db 0.2.0 → 0.3.1

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 (51) hide show
  1. package/dist/client.d.ts +3 -6
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +206 -27
  4. package/dist/client.js.map +1 -1
  5. package/dist/crud.d.ts +14 -0
  6. package/dist/crud.d.ts.map +1 -1
  7. package/dist/crud.js +49 -39
  8. package/dist/crud.js.map +1 -1
  9. package/dist/dialect.d.ts +25 -0
  10. package/dist/dialect.d.ts.map +1 -0
  11. package/dist/dialect.js +208 -0
  12. package/dist/dialect.js.map +1 -0
  13. package/dist/embedding.d.ts +63 -0
  14. package/dist/embedding.d.ts.map +1 -0
  15. package/dist/embedding.js +61 -0
  16. package/dist/embedding.js.map +1 -0
  17. package/dist/index.d.ts +12 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +6 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/migrate.d.ts +56 -23
  22. package/dist/migrate.d.ts.map +1 -1
  23. package/dist/migrate.js +350 -125
  24. package/dist/migrate.js.map +1 -1
  25. package/dist/model.d.ts +9 -0
  26. package/dist/model.d.ts.map +1 -1
  27. package/dist/model.js +13 -0
  28. package/dist/model.js.map +1 -1
  29. package/dist/naming.d.ts +37 -0
  30. package/dist/naming.d.ts.map +1 -0
  31. package/dist/naming.js +196 -0
  32. package/dist/naming.js.map +1 -0
  33. package/dist/runtime.d.ts +51 -0
  34. package/dist/runtime.d.ts.map +1 -0
  35. package/dist/runtime.js +490 -0
  36. package/dist/runtime.js.map +1 -0
  37. package/dist/schema.d.ts +2 -27
  38. package/dist/schema.d.ts.map +1 -1
  39. package/dist/schema.js +181 -197
  40. package/dist/schema.js.map +1 -1
  41. package/dist/search.d.ts +52 -0
  42. package/dist/search.d.ts.map +1 -0
  43. package/dist/search.js +110 -0
  44. package/dist/search.js.map +1 -0
  45. package/dist/types.d.ts +4 -2
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/write.d.ts +15 -0
  48. package/dist/write.d.ts.map +1 -0
  49. package/dist/write.js +156 -0
  50. package/dist/write.js.map +1 -0
  51. package/package.json +9 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,CAAW,EAAE,CAAW;IACrD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,2BAA2B,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,CACrD,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACjB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACjB,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,wBAAwB;IAEnD,MAAM,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC;IAC/B,OAAO,CAAC,GAAG,UAAU,CAAC;AACxB,CAAC;AAgBD;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CACzB,KAAe,EACf,KAAmB,EACnB,CAAS;IAET,MAAM,MAAM,GAAmB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClD,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;KAC9C,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAqBD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,WAAqB,EACrB,KAAmB,EACnB,IAA0B;IAE1B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IACxB,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,GAAG,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,GAAG,CAAC;IAE/C,4CAA4C;IAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAmB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAChD,MAAM,WAAW,GACf,WAAW,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAC;QAER,MAAM,YAAY,GAChB,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY;SACjE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,uEAAuE;AACvE,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO;QACL,GAAG,IAAI,GAAG,CACR,IAAI;aACD,WAAW,EAAE;aACb,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAC/B;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,UAAoB,EAAE,IAAY;IACxD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC;IACD,OAAO,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;AAClC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type ScalarType = "string" | "integer" | "number" | "boolean" | "date" | "datetime" | "text" | "json";
1
+ export type ScalarType = "string" | "integer" | "number" | "boolean" | "date" | "datetime" | "text" | "json" | "vector";
2
2
  export interface FieldDefinition {
3
3
  type: ScalarType;
4
4
  required?: boolean;
@@ -7,6 +7,8 @@ export interface FieldDefinition {
7
7
  min?: number;
8
8
  max?: number;
9
9
  enum?: readonly string[];
10
+ /** Number of dimensions for vector fields */
11
+ dimensions?: number;
10
12
  /** Auto-set to current time on update */
11
13
  updatedAt?: boolean;
12
14
  /** Auto-generate UUID */
@@ -32,7 +34,7 @@ export interface ModelDefinition {
32
34
  relations: Record<string, RelationDefinition>;
33
35
  indexes: IndexDefinition[];
34
36
  }
35
- export type DbProvider = "sqlite" | "postgres" | "mysql";
37
+ export type DbProvider = "sqlite" | "postgres" | "mysql" | "libsql";
36
38
  export interface DatabaseConfig {
37
39
  provider: DbProvider;
38
40
  url: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7G,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yBAAyB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE7E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC9C,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,UAAU,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAExH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yBAAyB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE7E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC9C,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,UAAU,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb"}
@@ -0,0 +1,15 @@
1
+ import type { EmbeddingConfig } from "./embedding.js";
2
+ import type { ModelDefinition } from "./types.js";
3
+ export interface PrepareWriteOptions {
4
+ now?: Date;
5
+ embeddings?: Array<EmbeddingConfig & {
6
+ modelName?: string;
7
+ }> | (EmbeddingConfig & {
8
+ modelName?: string;
9
+ });
10
+ }
11
+ type RecordInput = Record<string, unknown>;
12
+ export declare function prepareCreateData(model: ModelDefinition, input: RecordInput, options?: PrepareWriteOptions): Promise<RecordInput>;
13
+ export declare function prepareUpdateData(model: ModelDefinition, input: RecordInput, options?: PrepareWriteOptions): Promise<RecordInput>;
14
+ export {};
15
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,UAAU,CAAC,EAAE,KAAK,CAAC,eAAe,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,CAAC,eAAe,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3G;AAED,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA4L3C,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAEtB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAEtB"}
package/dist/write.js ADDED
@@ -0,0 +1,156 @@
1
+ import { cloneDefaultValue } from "./naming.js";
2
+ function assertKnownFields(model, input) {
3
+ for (const key of Object.keys(input)) {
4
+ if (!(key in model.fields)) {
5
+ throw new Error(`Unknown field "${key}" for model "${model.name}".`);
6
+ }
7
+ }
8
+ }
9
+ function validateFieldValue(model, fieldName, field, value) {
10
+ if (value === undefined)
11
+ return;
12
+ if (value === null) {
13
+ if (field.required || field.updatedAt || field.autoId) {
14
+ throw new Error(`Field "${model.name}.${fieldName}" cannot be null.`);
15
+ }
16
+ return;
17
+ }
18
+ switch (field.type) {
19
+ case "string":
20
+ case "text":
21
+ if (typeof value !== "string") {
22
+ throw new Error(`Field "${model.name}.${fieldName}" must be a string.`);
23
+ }
24
+ if (field.min !== undefined && value.length < field.min) {
25
+ throw new Error(`Field "${model.name}.${fieldName}" must be at least ${field.min} characters.`);
26
+ }
27
+ if (field.max !== undefined && value.length > field.max) {
28
+ throw new Error(`Field "${model.name}.${fieldName}" must be at most ${field.max} characters.`);
29
+ }
30
+ break;
31
+ case "date":
32
+ if (typeof value !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(value)) {
33
+ throw new Error(`Field "${model.name}.${fieldName}" must be a YYYY-MM-DD string.`);
34
+ }
35
+ break;
36
+ case "datetime":
37
+ if (typeof value !== "string" || Number.isNaN(Date.parse(value))) {
38
+ throw new Error(`Field "${model.name}.${fieldName}" must be a valid datetime string.`);
39
+ }
40
+ break;
41
+ case "integer":
42
+ if (typeof value !== "number" || !Number.isInteger(value)) {
43
+ throw new Error(`Field "${model.name}.${fieldName}" must be an integer.`);
44
+ }
45
+ if (field.min !== undefined && value < field.min) {
46
+ throw new Error(`Field "${model.name}.${fieldName}" must be at least ${field.min}.`);
47
+ }
48
+ if (field.max !== undefined && value > field.max) {
49
+ throw new Error(`Field "${model.name}.${fieldName}" must be at most ${field.max}.`);
50
+ }
51
+ break;
52
+ case "number":
53
+ if (typeof value !== "number" || Number.isNaN(value)) {
54
+ throw new Error(`Field "${model.name}.${fieldName}" must be a number.`);
55
+ }
56
+ if (field.min !== undefined && value < field.min) {
57
+ throw new Error(`Field "${model.name}.${fieldName}" must be at least ${field.min}.`);
58
+ }
59
+ if (field.max !== undefined && value > field.max) {
60
+ throw new Error(`Field "${model.name}.${fieldName}" must be at most ${field.max}.`);
61
+ }
62
+ break;
63
+ case "boolean":
64
+ if (typeof value !== "boolean") {
65
+ throw new Error(`Field "${model.name}.${fieldName}" must be a boolean.`);
66
+ }
67
+ break;
68
+ case "vector":
69
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== "number" || Number.isNaN(entry))) {
70
+ throw new Error(`Field "${model.name}.${fieldName}" must be a numeric vector.`);
71
+ }
72
+ if (field.dimensions !== undefined && value.length !== field.dimensions) {
73
+ throw new Error(`Field "${model.name}.${fieldName}" must contain exactly ${field.dimensions} dimensions.`);
74
+ }
75
+ break;
76
+ case "json":
77
+ break;
78
+ }
79
+ if (field.enum && !field.enum.includes(value)) {
80
+ throw new Error(`Field "${model.name}.${fieldName}" must be one of: ${field.enum.join(", ")}.`);
81
+ }
82
+ }
83
+ function validateRequiredFields(model, payload) {
84
+ for (const [fieldName, field] of Object.entries(model.fields)) {
85
+ if ((field.required || field.updatedAt || field.autoId) && payload[fieldName] === undefined) {
86
+ throw new Error(`Missing required field "${model.name}.${fieldName}".`);
87
+ }
88
+ }
89
+ }
90
+ function nowValue(field, now) {
91
+ switch (field.type) {
92
+ case "date":
93
+ return now.toISOString().slice(0, 10);
94
+ case "datetime":
95
+ return now.toISOString();
96
+ default:
97
+ return now.toISOString();
98
+ }
99
+ }
100
+ function embeddingConfigsForModel(model, embeddings) {
101
+ const list = embeddings === undefined ? [] : Array.isArray(embeddings) ? embeddings : [embeddings];
102
+ return list.filter((config) => config.modelName === undefined || config.modelName === model.name);
103
+ }
104
+ async function applyEmbeddings(model, payload, embeddings) {
105
+ for (const config of embeddingConfigsForModel(model, embeddings)) {
106
+ const sourceValue = payload[config.sourceField];
107
+ if (sourceValue === undefined || sourceValue === null)
108
+ continue;
109
+ if (typeof sourceValue !== "string") {
110
+ throw new Error(`Embedding source field "${config.sourceField}" on model "${model.name}" must resolve to a string.`);
111
+ }
112
+ const vectors = await config.adapter.embed([sourceValue]);
113
+ const vector = vectors[0];
114
+ if (!vector) {
115
+ throw new Error(`Embedding adapter for model "${model.name}" returned no embedding for "${config.sourceField}".`);
116
+ }
117
+ const vectorField = model.fields[config.vectorField];
118
+ if (vectorField?.dimensions !== undefined && vector.length !== vectorField.dimensions) {
119
+ throw new Error(`Embedding dimensions mismatch for "${model.name}.${config.vectorField}": expected ${vectorField.dimensions}, received ${vector.length}.`);
120
+ }
121
+ payload[config.vectorField] = vector;
122
+ }
123
+ }
124
+ async function prepareWrite(mode, model, input, options) {
125
+ const now = options?.now ?? new Date();
126
+ const payload = { ...input };
127
+ assertKnownFields(model, payload);
128
+ for (const [fieldName, field] of Object.entries(model.fields)) {
129
+ if (mode === "create") {
130
+ if (field.autoId && payload[fieldName] === undefined) {
131
+ payload[fieldName] = globalThis.crypto.randomUUID();
132
+ }
133
+ if (payload[fieldName] === undefined && field.default !== undefined) {
134
+ payload[fieldName] = field.default === "now" ? nowValue(field, now) : cloneDefaultValue(field.default);
135
+ }
136
+ }
137
+ if (field.updatedAt) {
138
+ payload[fieldName] = nowValue(field, now);
139
+ }
140
+ }
141
+ await applyEmbeddings(model, payload, options?.embeddings);
142
+ if (mode === "create") {
143
+ validateRequiredFields(model, payload);
144
+ }
145
+ for (const [fieldName, field] of Object.entries(model.fields)) {
146
+ validateFieldValue(model, fieldName, field, payload[fieldName]);
147
+ }
148
+ return payload;
149
+ }
150
+ export async function prepareCreateData(model, input, options) {
151
+ return prepareWrite("create", model, input, options);
152
+ }
153
+ export async function prepareUpdateData(model, input, options) {
154
+ return prepareWrite("update", model, input, options);
155
+ }
156
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zauso-ai/capstan-db",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -12,11 +12,13 @@
12
12
  },
13
13
  "scripts": {
14
14
  "build": "tsc -p tsconfig.json",
15
- "typecheck": "tsc -p tsconfig.json --noEmit"
15
+ "typecheck": "tsc -p tsconfig.json --noEmit",
16
+ "clean": "rm -rf dist"
16
17
  },
17
18
  "peerDependencies": {
18
- "drizzle-orm": "^0.44.0",
19
- "better-sqlite3": "^11.0.0",
19
+ "drizzle-orm": ">=0.44.0",
20
+ "better-sqlite3": ">=9.0.0",
21
+ "@libsql/client": ">=0.15.0",
20
22
  "pg": "^8.0.0",
21
23
  "mysql2": "^3.0.0"
22
24
  },
@@ -27,6 +29,9 @@
27
29
  "better-sqlite3": {
28
30
  "optional": true
29
31
  },
32
+ "@libsql/client": {
33
+ "optional": true
34
+ },
30
35
  "pg": {
31
36
  "optional": true
32
37
  },