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.
- package/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +25 -0
- package/LICENSE +21 -0
- package/README.md +476 -0
- package/dist/ai-database-adapter.d.ts +49 -0
- package/dist/ai-database-adapter.d.ts.map +1 -0
- package/dist/ai-database-adapter.js +89 -0
- package/dist/ai-database-adapter.js.map +1 -0
- package/dist/errors.d.ts +47 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +72 -0
- package/dist/errors.js.map +1 -0
- package/dist/http-schemas.d.ts +165 -0
- package/dist/http-schemas.d.ts.map +1 -0
- package/dist/http-schemas.js +55 -0
- package/dist/http-schemas.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/linguistic.d.ts +54 -0
- package/dist/linguistic.d.ts.map +1 -0
- package/dist/linguistic.js +226 -0
- package/dist/linguistic.js.map +1 -0
- package/dist/memory-provider.d.ts +46 -0
- package/dist/memory-provider.d.ts.map +1 -0
- package/dist/memory-provider.js +279 -0
- package/dist/memory-provider.js.map +1 -0
- package/dist/ns-client.d.ts +88 -0
- package/dist/ns-client.d.ts.map +1 -0
- package/dist/ns-client.js +253 -0
- package/dist/ns-client.js.map +1 -0
- package/dist/ns-exports.d.ts +23 -0
- package/dist/ns-exports.d.ts.map +1 -0
- package/dist/ns-exports.js +21 -0
- package/dist/ns-exports.js.map +1 -0
- package/dist/ns.d.ts +60 -0
- package/dist/ns.d.ts.map +1 -0
- package/dist/ns.js +818 -0
- package/dist/ns.js.map +1 -0
- package/dist/r2-persistence.d.ts +112 -0
- package/dist/r2-persistence.d.ts.map +1 -0
- package/dist/r2-persistence.js +252 -0
- package/dist/r2-persistence.js.map +1 -0
- package/dist/schema-validation.d.ts +80 -0
- package/dist/schema-validation.d.ts.map +1 -0
- package/dist/schema-validation.js +233 -0
- package/dist/schema-validation.js.map +1 -0
- package/dist/types.d.ts +184 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +26 -0
- package/dist/types.js.map +1 -0
- package/package.json +55 -0
- package/src/ai-database-adapter.test.ts +610 -0
- package/src/ai-database-adapter.ts +189 -0
- package/src/benchmark.test.ts +109 -0
- package/src/errors.ts +91 -0
- package/src/http-schemas.ts +67 -0
- package/src/index.ts +87 -0
- package/src/linguistic.test.ts +1107 -0
- package/src/linguistic.ts +253 -0
- package/src/memory-provider.ts +470 -0
- package/src/ns-client.test.ts +1360 -0
- package/src/ns-client.ts +342 -0
- package/src/ns-exports.ts +23 -0
- package/src/ns.test.ts +1381 -0
- package/src/ns.ts +1215 -0
- package/src/provider.test.ts +675 -0
- package/src/r2-persistence.test.ts +263 -0
- package/src/r2-persistence.ts +367 -0
- package/src/schema-validation.test.ts +167 -0
- package/src/schema-validation.ts +330 -0
- package/src/types.ts +252 -0
- package/test/action-status.test.ts +42 -0
- package/test/batch-limits.test.ts +165 -0
- package/test/docs.test.ts +48 -0
- package/test/errors.test.ts +148 -0
- package/test/http-validation.test.ts +401 -0
- package/test/ns-client-errors.test.ts +208 -0
- package/test/ns-namespace.test.ts +307 -0
- package/test/performance.test.ts +168 -0
- package/test/schema-validation-error.test.ts +213 -0
- package/test/schema-validation.test.ts +440 -0
- package/test/search-escaping.test.ts +359 -0
- package/test/security.test.ts +322 -0
- package/tsconfig.json +10 -0
- 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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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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
|
+
}
|