digital-objects 1.0.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 (87) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +25 -0
  3. package/LICENSE +21 -0
  4. package/README.md +476 -0
  5. package/dist/ai-database-adapter.d.ts +49 -0
  6. package/dist/ai-database-adapter.d.ts.map +1 -0
  7. package/dist/ai-database-adapter.js +89 -0
  8. package/dist/ai-database-adapter.js.map +1 -0
  9. package/dist/errors.d.ts +47 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +72 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/http-schemas.d.ts +165 -0
  14. package/dist/http-schemas.d.ts.map +1 -0
  15. package/dist/http-schemas.js +55 -0
  16. package/dist/http-schemas.js.map +1 -0
  17. package/dist/index.d.ts +29 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +32 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/linguistic.d.ts +54 -0
  22. package/dist/linguistic.d.ts.map +1 -0
  23. package/dist/linguistic.js +226 -0
  24. package/dist/linguistic.js.map +1 -0
  25. package/dist/memory-provider.d.ts +46 -0
  26. package/dist/memory-provider.d.ts.map +1 -0
  27. package/dist/memory-provider.js +279 -0
  28. package/dist/memory-provider.js.map +1 -0
  29. package/dist/ns-client.d.ts +88 -0
  30. package/dist/ns-client.d.ts.map +1 -0
  31. package/dist/ns-client.js +253 -0
  32. package/dist/ns-client.js.map +1 -0
  33. package/dist/ns-exports.d.ts +23 -0
  34. package/dist/ns-exports.d.ts.map +1 -0
  35. package/dist/ns-exports.js +21 -0
  36. package/dist/ns-exports.js.map +1 -0
  37. package/dist/ns.d.ts +60 -0
  38. package/dist/ns.d.ts.map +1 -0
  39. package/dist/ns.js +818 -0
  40. package/dist/ns.js.map +1 -0
  41. package/dist/r2-persistence.d.ts +112 -0
  42. package/dist/r2-persistence.d.ts.map +1 -0
  43. package/dist/r2-persistence.js +252 -0
  44. package/dist/r2-persistence.js.map +1 -0
  45. package/dist/schema-validation.d.ts +80 -0
  46. package/dist/schema-validation.d.ts.map +1 -0
  47. package/dist/schema-validation.js +233 -0
  48. package/dist/schema-validation.js.map +1 -0
  49. package/dist/types.d.ts +184 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +26 -0
  52. package/dist/types.js.map +1 -0
  53. package/package.json +55 -0
  54. package/src/ai-database-adapter.test.ts +610 -0
  55. package/src/ai-database-adapter.ts +189 -0
  56. package/src/benchmark.test.ts +109 -0
  57. package/src/errors.ts +91 -0
  58. package/src/http-schemas.ts +67 -0
  59. package/src/index.ts +87 -0
  60. package/src/linguistic.test.ts +1107 -0
  61. package/src/linguistic.ts +253 -0
  62. package/src/memory-provider.ts +470 -0
  63. package/src/ns-client.test.ts +1360 -0
  64. package/src/ns-client.ts +342 -0
  65. package/src/ns-exports.ts +23 -0
  66. package/src/ns.test.ts +1381 -0
  67. package/src/ns.ts +1215 -0
  68. package/src/provider.test.ts +675 -0
  69. package/src/r2-persistence.test.ts +263 -0
  70. package/src/r2-persistence.ts +367 -0
  71. package/src/schema-validation.test.ts +167 -0
  72. package/src/schema-validation.ts +330 -0
  73. package/src/types.ts +252 -0
  74. package/test/action-status.test.ts +42 -0
  75. package/test/batch-limits.test.ts +165 -0
  76. package/test/docs.test.ts +48 -0
  77. package/test/errors.test.ts +148 -0
  78. package/test/http-validation.test.ts +401 -0
  79. package/test/ns-client-errors.test.ts +208 -0
  80. package/test/ns-namespace.test.ts +307 -0
  81. package/test/performance.test.ts +168 -0
  82. package/test/schema-validation-error.test.ts +213 -0
  83. package/test/schema-validation.test.ts +440 -0
  84. package/test/search-escaping.test.ts +359 -0
  85. package/test/security.test.ts +322 -0
  86. package/tsconfig.json +10 -0
  87. package/wrangler.jsonc +16 -0
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Runtime schema validation for Digital Objects
3
+ *
4
+ * Validates Thing data against Noun schemas when validation is enabled.
5
+ * Provides clear, actionable error messages with field paths and suggestions.
6
+ */
7
+ /**
8
+ * Type guard to check if a field definition is an extended definition (object with type)
9
+ */
10
+ function isExtendedFieldDefinition(def) {
11
+ return typeof def === 'object' && def !== null && 'type' in def;
12
+ }
13
+ /**
14
+ * Get the actual JavaScript type of a value for validation purposes
15
+ */
16
+ function getActualType(value) {
17
+ if (value === null)
18
+ return 'null';
19
+ if (Array.isArray(value))
20
+ return 'array';
21
+ if (value instanceof Date)
22
+ return 'date';
23
+ return typeof value;
24
+ }
25
+ /**
26
+ * Get a suggestion for fixing a type mismatch error
27
+ */
28
+ function getSuggestion(expected, actual, value) {
29
+ // String to number
30
+ if (expected === 'number' && actual === 'string') {
31
+ const num = Number(value);
32
+ if (!isNaN(num)) {
33
+ return `Convert to number: ${num}`;
34
+ }
35
+ return 'Provide a valid number';
36
+ }
37
+ // Number to string
38
+ if (expected === 'string' && actual === 'number') {
39
+ return `Convert to string: "${value}"`;
40
+ }
41
+ // String to boolean
42
+ if (expected === 'boolean' && actual === 'string') {
43
+ const str = String(value).toLowerCase();
44
+ if (str === 'true' || str === 'false') {
45
+ return `Convert to boolean: ${str === 'true'}`;
46
+ }
47
+ return 'Use true or false';
48
+ }
49
+ // Array expected
50
+ if (expected === 'array' && actual !== 'array') {
51
+ return 'Wrap value in an array: [value]';
52
+ }
53
+ // Object expected
54
+ if (expected === 'object' && actual !== 'object') {
55
+ return 'Provide an object: { ... }';
56
+ }
57
+ // Date/datetime (expected string-based type but got wrong type)
58
+ if ((expected === 'date' || expected === 'datetime') && actual !== 'string') {
59
+ return 'Provide a valid ISO 8601 date string';
60
+ }
61
+ // URL (expected string-based type but got wrong type)
62
+ if (expected === 'url' && actual !== 'string') {
63
+ return 'Provide a valid URL starting with http:// or https://';
64
+ }
65
+ // Markdown
66
+ if (expected === 'markdown' && actual !== 'string') {
67
+ return 'Provide a string containing markdown content';
68
+ }
69
+ return undefined;
70
+ }
71
+ /**
72
+ * Create a validation error with consistent formatting
73
+ */
74
+ function createError(field, code, expected, received, value) {
75
+ let message;
76
+ switch (code) {
77
+ case 'REQUIRED_FIELD':
78
+ message = `Missing required field '${field}'`;
79
+ break;
80
+ case 'TYPE_MISMATCH':
81
+ message = `Field '${field}' has wrong type: expected ${expected}, got ${received}`;
82
+ break;
83
+ case 'INVALID_FORMAT':
84
+ message = `Field '${field}' has invalid format: expected ${expected}`;
85
+ break;
86
+ case 'UNKNOWN_FIELD':
87
+ message = `Unknown field '${field}'`;
88
+ break;
89
+ }
90
+ const error = {
91
+ field,
92
+ message,
93
+ expected,
94
+ received,
95
+ code,
96
+ };
97
+ // Add suggestion if available
98
+ const suggestion = getSuggestion(expected, received, value);
99
+ if (suggestion) {
100
+ error.suggestion = suggestion;
101
+ }
102
+ return error;
103
+ }
104
+ /**
105
+ * Internal validation logic that collects errors
106
+ *
107
+ * @param data - The data to validate
108
+ * @param schema - The schema to validate against
109
+ * @param path - Current field path for nested objects
110
+ * @returns Array of validation errors
111
+ */
112
+ function collectErrors(data, schema, path = '') {
113
+ const errors = [];
114
+ for (const [field, def] of Object.entries(schema)) {
115
+ const fieldPath = path ? `${path}.${field}` : field;
116
+ const value = data[field];
117
+ // Handle extended field definitions (object with type and required)
118
+ if (isExtendedFieldDefinition(def)) {
119
+ // Check required fields
120
+ if (def.required && (value === undefined || value === null)) {
121
+ errors.push(createError(fieldPath, 'REQUIRED_FIELD', def.type, value === null ? 'null' : 'undefined', value));
122
+ continue;
123
+ }
124
+ // Skip validation if field is not present and not required
125
+ if (value === undefined)
126
+ continue;
127
+ // Type validation
128
+ const actualType = getActualType(value);
129
+ // Special handling for string-based types that should validate as strings
130
+ const stringBasedTypes = ['date', 'datetime', 'url', 'markdown', 'json'];
131
+ const normalizedExpected = stringBasedTypes.includes(def.type) ? 'string' : def.type;
132
+ if (normalizedExpected !== actualType) {
133
+ errors.push(createError(fieldPath, 'TYPE_MISMATCH', def.type, actualType, value));
134
+ }
135
+ }
136
+ else {
137
+ // Simple field type (string like 'string', 'number', etc.)
138
+ // These are not required by default and just validate type if present
139
+ if (value === undefined)
140
+ continue;
141
+ const actualType = getActualType(value);
142
+ const expectedType = def.replace('?', ''); // Remove optional marker
143
+ // Skip relation types (contain '.')
144
+ if (expectedType.includes('.'))
145
+ continue;
146
+ // Skip bracket-wrapped relation types
147
+ if (expectedType.startsWith('[') && expectedType.endsWith(']'))
148
+ continue;
149
+ // Special handling for string-based types that should validate as strings
150
+ const stringBasedTypes = ['date', 'datetime', 'url', 'markdown', 'json'];
151
+ const normalizedExpected = stringBasedTypes.includes(expectedType) ? 'string' : expectedType;
152
+ if (normalizedExpected !== actualType) {
153
+ errors.push(createError(fieldPath, 'TYPE_MISMATCH', expectedType, actualType, value));
154
+ }
155
+ }
156
+ }
157
+ return errors;
158
+ }
159
+ /**
160
+ * Format validation errors for display in error messages
161
+ */
162
+ function formatErrors(errors) {
163
+ if (errors.length === 0)
164
+ return '';
165
+ const lines = errors.map((e) => {
166
+ let line = ` - ${e.message}`;
167
+ if (e.suggestion) {
168
+ line += ` (${e.suggestion})`;
169
+ }
170
+ return line;
171
+ });
172
+ return lines.join('\n');
173
+ }
174
+ /**
175
+ * Validates data against a schema definition without throwing
176
+ *
177
+ * Use this for pre-flight validation to check if data is valid
178
+ * before attempting create/update operations.
179
+ *
180
+ * @param data - The data to validate
181
+ * @param schema - The schema to validate against (from Noun.schema)
182
+ * @returns ValidationResult with valid boolean and errors array
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * const result = validateOnly(userData, userSchema)
187
+ * if (!result.valid) {
188
+ * console.log('Validation errors:', result.errors)
189
+ * // Handle errors gracefully
190
+ * }
191
+ * ```
192
+ */
193
+ export function validateOnly(data, schema) {
194
+ if (!schema) {
195
+ return { valid: true, errors: [] };
196
+ }
197
+ const errors = collectErrors(data, schema);
198
+ return {
199
+ valid: errors.length === 0,
200
+ errors,
201
+ };
202
+ }
203
+ /**
204
+ * Validates data against a schema definition
205
+ *
206
+ * @param data - The data to validate
207
+ * @param schema - The schema to validate against (from Noun.schema)
208
+ * @param options - Validation options (validate: true to enable)
209
+ * @throws Error if validation fails with detailed error messages
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * // Enable validation with options
214
+ * await provider.create('User', userData, undefined, { validate: true })
215
+ *
216
+ * // Error message example:
217
+ * // Validation failed (2 errors):
218
+ * // - Missing required field 'email'
219
+ * // - Field 'age' has wrong type: expected number, got string (Convert to number: 25)
220
+ * ```
221
+ */
222
+ export function validateData(data, schema, options) {
223
+ // Skip validation if not enabled or no schema
224
+ if (!options?.validate || !schema)
225
+ return;
226
+ const errors = collectErrors(data, schema);
227
+ if (errors.length > 0) {
228
+ const errorCount = errors.length === 1 ? '1 error' : `${errors.length} errors`;
229
+ const formatted = formatErrors(errors);
230
+ throw new Error(`Validation failed (${errorCount}):\n${formatted}`);
231
+ }
232
+ }
233
+ //# sourceMappingURL=schema-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validation.js","sourceRoot":"","sources":["../src/schema-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Core types for Digital Objects
3
+ *
4
+ * A unified nouns/verbs/things/actions model that provides:
5
+ * - Linguistic consistency (singular/plural, conjugations)
6
+ * - Entity definitions (Nouns) and instances (Things)
7
+ * - Action definitions (Verbs) and instances (Actions)
8
+ * - Graph relationships through Actions
9
+ * - Event sourcing and audit trails
10
+ */
11
+ /**
12
+ * Query limit constants to prevent memory exhaustion
13
+ */
14
+ export declare const DEFAULT_LIMIT = 100;
15
+ export declare const MAX_LIMIT = 1000;
16
+ /**
17
+ * Direction for graph traversal
18
+ */
19
+ export type Direction = 'in' | 'out' | 'both';
20
+ /**
21
+ * Validates direction parameter for graph traversal methods.
22
+ * @throws Error if direction is not 'in', 'out', or 'both'
23
+ */
24
+ export declare function validateDirection(direction: string): Direction;
25
+ /**
26
+ * Noun - Entity type definition with linguistic forms
27
+ */
28
+ export interface Noun {
29
+ name: string;
30
+ singular: string;
31
+ plural: string;
32
+ slug: string;
33
+ description?: string;
34
+ schema?: Record<string, FieldDefinition>;
35
+ createdAt: Date;
36
+ }
37
+ export interface NounDefinition {
38
+ name: string;
39
+ singular?: string;
40
+ plural?: string;
41
+ description?: string;
42
+ schema?: Record<string, FieldDefinition>;
43
+ }
44
+ /**
45
+ * Verb - Action definition with all conjugations
46
+ */
47
+ export interface Verb {
48
+ name: string;
49
+ action: string;
50
+ act: string;
51
+ activity: string;
52
+ event: string;
53
+ reverseBy?: string;
54
+ reverseAt?: string;
55
+ reverseIn?: string;
56
+ inverse?: string;
57
+ description?: string;
58
+ createdAt: Date;
59
+ }
60
+ export interface VerbDefinition {
61
+ name: string;
62
+ action?: string;
63
+ act?: string;
64
+ activity?: string;
65
+ event?: string;
66
+ reverseBy?: string;
67
+ reverseAt?: string;
68
+ reverseIn?: string;
69
+ inverse?: string;
70
+ description?: string;
71
+ }
72
+ /**
73
+ * Thing - Entity instance
74
+ */
75
+ export interface Thing<T = Record<string, unknown>> {
76
+ id: string;
77
+ noun: string;
78
+ data: T;
79
+ createdAt: Date;
80
+ updatedAt: Date;
81
+ }
82
+ /**
83
+ * Action - Events + Relationships + Audit Trail (unified!)
84
+ *
85
+ * An action represents:
86
+ * - A graph edge (subject --verb--> object)
87
+ * - An event (something happened)
88
+ * - An audit record (who did what when)
89
+ */
90
+ export interface Action<T = Record<string, unknown>> {
91
+ id: string;
92
+ verb: string;
93
+ subject?: string;
94
+ object?: string;
95
+ data?: T;
96
+ status: ActionStatus;
97
+ createdAt: Date;
98
+ completedAt?: Date;
99
+ }
100
+ export type ActionStatus = 'pending' | 'active' | 'completed' | 'failed' | 'cancelled';
101
+ /**
102
+ * Field definition for schemas
103
+ *
104
+ * Can be either a simple type string or an extended definition with options
105
+ */
106
+ export type FieldDefinition = SimpleFieldType | ExtendedFieldDefinition;
107
+ /**
108
+ * Simple field type - just a type string
109
+ */
110
+ export type SimpleFieldType = PrimitiveType | `${string}.${string}` | `[${string}.${string}]` | `${PrimitiveType}?`;
111
+ /**
112
+ * Extended field definition with options like required, default, etc.
113
+ */
114
+ export interface ExtendedFieldDefinition {
115
+ type: PrimitiveType | 'object' | 'array';
116
+ required?: boolean;
117
+ default?: unknown;
118
+ }
119
+ export type PrimitiveType = 'string' | 'number' | 'boolean' | 'date' | 'datetime' | 'json' | 'markdown' | 'url';
120
+ /**
121
+ * Validation options for create/update operations
122
+ */
123
+ export interface ValidationOptions {
124
+ validate?: boolean;
125
+ }
126
+ /**
127
+ * List options for queries
128
+ */
129
+ export interface ListOptions {
130
+ limit?: number;
131
+ offset?: number;
132
+ where?: Record<string, unknown>;
133
+ orderBy?: string;
134
+ order?: 'asc' | 'desc';
135
+ }
136
+ /**
137
+ * Action query options
138
+ */
139
+ export interface ActionOptions extends ListOptions {
140
+ verb?: string;
141
+ subject?: string;
142
+ object?: string;
143
+ status?: ActionStatus | ActionStatus[];
144
+ }
145
+ /**
146
+ * DigitalObjectsProvider - Core storage interface
147
+ *
148
+ * Implementations: MemoryProvider, NS (DurableObject)
149
+ */
150
+ export interface DigitalObjectsProvider {
151
+ defineNoun(def: NounDefinition): Promise<Noun>;
152
+ getNoun(name: string): Promise<Noun | null>;
153
+ listNouns(): Promise<Noun[]>;
154
+ defineVerb(def: VerbDefinition): Promise<Verb>;
155
+ getVerb(name: string): Promise<Verb | null>;
156
+ listVerbs(): Promise<Verb[]>;
157
+ create<T>(noun: string, data: T, id?: string, options?: ValidationOptions): Promise<Thing<T>>;
158
+ get<T>(id: string): Promise<Thing<T> | null>;
159
+ list<T>(noun: string, options?: ListOptions): Promise<Thing<T>[]>;
160
+ find<T>(noun: string, where: Partial<T>): Promise<Thing<T>[]>;
161
+ update<T>(id: string, data: Partial<T>, options?: ValidationOptions): Promise<Thing<T>>;
162
+ delete(id: string): Promise<boolean>;
163
+ search<T>(query: string, options?: ListOptions): Promise<Thing<T>[]>;
164
+ perform<T>(verb: string, subject?: string, object?: string, data?: T): Promise<Action<T>>;
165
+ getAction<T>(id: string): Promise<Action<T> | null>;
166
+ listActions<T>(options?: ActionOptions): Promise<Action<T>[]>;
167
+ deleteAction(id: string): Promise<boolean>;
168
+ related<T>(id: string, verb?: string, direction?: Direction, options?: ListOptions): Promise<Thing<T>[]>;
169
+ edges<T>(id: string, verb?: string, direction?: Direction, options?: ListOptions): Promise<Action<T>[]>;
170
+ createMany<T>(noun: string, items: T[]): Promise<Thing<T>[]>;
171
+ updateMany<T>(updates: Array<{
172
+ id: string;
173
+ data: Partial<T>;
174
+ }>): Promise<Thing<T>[]>;
175
+ deleteMany(ids: string[]): Promise<boolean[]>;
176
+ performMany<T>(actions: Array<{
177
+ verb: string;
178
+ subject?: string;
179
+ object?: string;
180
+ data?: T;
181
+ }>): Promise<Action<T>[]>;
182
+ close?(): Promise<void>;
183
+ }
184
+ //# 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,26 @@
1
+ /**
2
+ * Core types for Digital Objects
3
+ *
4
+ * A unified nouns/verbs/things/actions model that provides:
5
+ * - Linguistic consistency (singular/plural, conjugations)
6
+ * - Entity definitions (Nouns) and instances (Things)
7
+ * - Action definitions (Verbs) and instances (Actions)
8
+ * - Graph relationships through Actions
9
+ * - Event sourcing and audit trails
10
+ */
11
+ /**
12
+ * Query limit constants to prevent memory exhaustion
13
+ */
14
+ export const DEFAULT_LIMIT = 100;
15
+ export const MAX_LIMIT = 1000;
16
+ /**
17
+ * Validates direction parameter for graph traversal methods.
18
+ * @throws Error if direction is not 'in', 'out', or 'both'
19
+ */
20
+ export function validateDirection(direction) {
21
+ if (direction !== 'in' && direction !== 'out' && direction !== 'both') {
22
+ throw new Error(`Invalid direction: "${direction}". Must be "in", "out", or "both".`);
23
+ }
24
+ return direction;
25
+ }
26
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA;AAO7B;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,oCAAoC,CAAC,CAAA;IACvF,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "digital-objects",
3
+ "version": "1.0.0",
4
+ "description": "Unified storage primitive for AI primitives - nouns, verbs, things, actions",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./ns": {
14
+ "import": "./dist/ns-exports.js",
15
+ "types": "./dist/ns-exports.d.ts"
16
+ }
17
+ },
18
+ "keywords": [
19
+ "digital-objects",
20
+ "durable-objects",
21
+ "cloudflare",
22
+ "sqlite",
23
+ "graph",
24
+ "entity",
25
+ "nouns",
26
+ "verbs",
27
+ "things",
28
+ "actions",
29
+ "linguistics"
30
+ ],
31
+ "scripts": {
32
+ "build": "tsc -p tsconfig.json",
33
+ "dev": "tsc -p tsconfig.json --watch",
34
+ "test": "vitest",
35
+ "typecheck": "tsc --noEmit",
36
+ "deploy": "wrangler deploy"
37
+ },
38
+ "dependencies": {
39
+ "@org.ai/types": "2.1.3",
40
+ "zod": "^3.23.0"
41
+ },
42
+ "devDependencies": {
43
+ "@cloudflare/workers-types": "^4.20240925.0",
44
+ "wrangler": "^3.79.0",
45
+ "vitest": "^2.0.0"
46
+ },
47
+ "peerDependencies": {
48
+ "vitest": "^2.0.0"
49
+ },
50
+ "peerDependenciesMeta": {
51
+ "vitest": {
52
+ "optional": true
53
+ }
54
+ }
55
+ }