@objectstack/objectql 4.0.4 → 4.0.5
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/dist/index.d.mts +468 -1113
- package/dist/index.d.ts +468 -1113
- package/dist/index.js +1271 -268
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1266 -268
- package/dist/index.mjs.map +1 -1
- package/package.json +32 -6
- package/.turbo/turbo-build.log +0 -22
- package/CHANGELOG.md +0 -720
- package/src/datasource-mapping.test.ts +0 -181
- package/src/engine.test.ts +0 -613
- package/src/engine.ts +0 -1668
- package/src/index.ts +0 -41
- package/src/kernel-factory.ts +0 -48
- package/src/metadata-facade.ts +0 -96
- package/src/plugin.integration.test.ts +0 -995
- package/src/plugin.ts +0 -534
- package/src/protocol-data.test.ts +0 -245
- package/src/protocol-discovery.test.ts +0 -213
- package/src/protocol-feed.test.ts +0 -303
- package/src/protocol-meta.test.ts +0 -440
- package/src/protocol.ts +0 -1242
- package/src/registry.test.ts +0 -494
- package/src/registry.ts +0 -716
- package/src/util.test.ts +0 -226
- package/src/util.ts +0 -219
- package/tsconfig.json +0 -10
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
-
|
|
3
|
-
import { describe, it, expect, beforeEach } from 'vitest';
|
|
4
|
-
import { ObjectQL } from './engine.js';
|
|
5
|
-
import { SchemaRegistry } from './registry.js';
|
|
6
|
-
|
|
7
|
-
// Mock driver for testing
|
|
8
|
-
const createMockDriver = (name: string) => ({
|
|
9
|
-
name,
|
|
10
|
-
version: '1.0.0',
|
|
11
|
-
supports: {},
|
|
12
|
-
connect: async () => {},
|
|
13
|
-
disconnect: async () => {},
|
|
14
|
-
checkHealth: async () => true,
|
|
15
|
-
find: async () => [],
|
|
16
|
-
findOne: async () => null,
|
|
17
|
-
create: async (obj: string, data: any) => ({ id: '1', ...data }),
|
|
18
|
-
update: async (obj: string, id: string, data: any) => ({ id, ...data }),
|
|
19
|
-
delete: async () => true,
|
|
20
|
-
count: async () => 0,
|
|
21
|
-
bulkCreate: async () => [],
|
|
22
|
-
bulkUpdate: async () => [],
|
|
23
|
-
bulkDelete: async () => {},
|
|
24
|
-
execute: async () => ({}),
|
|
25
|
-
findStream: async function* () {},
|
|
26
|
-
upsert: async (obj: string, data: any) => ({ id: '1', ...data }),
|
|
27
|
-
beginTransaction: async () => ({}),
|
|
28
|
-
commit: async () => {},
|
|
29
|
-
rollback: async () => {},
|
|
30
|
-
syncSchema: async () => {},
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
describe('DatasourceMapping', () => {
|
|
34
|
-
let engine: ObjectQL;
|
|
35
|
-
|
|
36
|
-
beforeEach(() => {
|
|
37
|
-
engine = new ObjectQL();
|
|
38
|
-
SchemaRegistry.reset();
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('should route objects by namespace', async () => {
|
|
42
|
-
const memoryDriver = createMockDriver('memory');
|
|
43
|
-
const tursoDriver = createMockDriver('turso');
|
|
44
|
-
|
|
45
|
-
engine.registerDriver(memoryDriver);
|
|
46
|
-
engine.registerDriver(tursoDriver, true); // default
|
|
47
|
-
|
|
48
|
-
// Configure mapping: crm namespace → memory
|
|
49
|
-
engine.setDatasourceMapping([
|
|
50
|
-
{ namespace: 'crm', datasource: 'memory' },
|
|
51
|
-
]);
|
|
52
|
-
|
|
53
|
-
// Register an object in crm namespace
|
|
54
|
-
SchemaRegistry.registerObject(
|
|
55
|
-
{
|
|
56
|
-
name: 'account',
|
|
57
|
-
fields: { name: { type: 'text' } },
|
|
58
|
-
},
|
|
59
|
-
'com.example.crm',
|
|
60
|
-
'crm',
|
|
61
|
-
'own'
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
// Test that it uses memory driver
|
|
65
|
-
const result = await engine.insert('account', { name: 'Test Account' });
|
|
66
|
-
expect(result).toBeDefined();
|
|
67
|
-
expect(result.name).toBe('Test Account');
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('should route objects by pattern', async () => {
|
|
71
|
-
const memoryDriver = createMockDriver('memory');
|
|
72
|
-
const tursoDriver = createMockDriver('turso');
|
|
73
|
-
|
|
74
|
-
engine.registerDriver(memoryDriver);
|
|
75
|
-
engine.registerDriver(tursoDriver, true);
|
|
76
|
-
|
|
77
|
-
// Configure mapping: sys_* pattern → turso
|
|
78
|
-
engine.setDatasourceMapping([
|
|
79
|
-
{ objectPattern: 'sys_*', datasource: 'turso' },
|
|
80
|
-
{ default: true, datasource: 'memory' },
|
|
81
|
-
]);
|
|
82
|
-
|
|
83
|
-
// Register system objects
|
|
84
|
-
SchemaRegistry.registerObject(
|
|
85
|
-
{
|
|
86
|
-
name: 'sys_user',
|
|
87
|
-
fields: { username: { type: 'text' } },
|
|
88
|
-
},
|
|
89
|
-
'com.objectstack.system',
|
|
90
|
-
'system',
|
|
91
|
-
'own'
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
const result = await engine.insert('sys_user', { username: 'admin' });
|
|
95
|
-
expect(result).toBeDefined();
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('should respect priority order', async () => {
|
|
99
|
-
const memoryDriver = createMockDriver('memory');
|
|
100
|
-
const tursoDriver = createMockDriver('turso');
|
|
101
|
-
|
|
102
|
-
engine.registerDriver(memoryDriver);
|
|
103
|
-
engine.registerDriver(tursoDriver);
|
|
104
|
-
|
|
105
|
-
// Higher priority rule should win
|
|
106
|
-
engine.setDatasourceMapping([
|
|
107
|
-
{ namespace: 'crm', datasource: 'memory', priority: 100 },
|
|
108
|
-
{ namespace: 'crm', datasource: 'turso', priority: 50 }, // Lower number = higher priority
|
|
109
|
-
]);
|
|
110
|
-
|
|
111
|
-
SchemaRegistry.registerObject(
|
|
112
|
-
{
|
|
113
|
-
name: 'account',
|
|
114
|
-
fields: { name: { type: 'text' } },
|
|
115
|
-
},
|
|
116
|
-
'com.example.crm',
|
|
117
|
-
'crm',
|
|
118
|
-
'own'
|
|
119
|
-
);
|
|
120
|
-
|
|
121
|
-
// Should use turso (priority 50) not memory (priority 100)
|
|
122
|
-
const result = await engine.insert('account', { name: 'Test' });
|
|
123
|
-
expect(result).toBeDefined();
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('should fallback to default rule', async () => {
|
|
127
|
-
const memoryDriver = createMockDriver('memory');
|
|
128
|
-
const tursoDriver = createMockDriver('turso');
|
|
129
|
-
|
|
130
|
-
engine.registerDriver(memoryDriver);
|
|
131
|
-
engine.registerDriver(tursoDriver);
|
|
132
|
-
|
|
133
|
-
engine.setDatasourceMapping([
|
|
134
|
-
{ namespace: 'auth', datasource: 'turso' },
|
|
135
|
-
{ default: true, datasource: 'memory' },
|
|
136
|
-
]);
|
|
137
|
-
|
|
138
|
-
// Register object in different namespace
|
|
139
|
-
SchemaRegistry.registerObject(
|
|
140
|
-
{
|
|
141
|
-
name: 'task',
|
|
142
|
-
fields: { title: { type: 'text' } },
|
|
143
|
-
},
|
|
144
|
-
'com.example.todo',
|
|
145
|
-
'todo',
|
|
146
|
-
'own'
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
// Should use memory (default)
|
|
150
|
-
const result = await engine.insert('task', { title: 'Do something' });
|
|
151
|
-
expect(result).toBeDefined();
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('should prefer object explicit datasource over mapping', async () => {
|
|
155
|
-
const memoryDriver = createMockDriver('memory');
|
|
156
|
-
const tursoDriver = createMockDriver('turso');
|
|
157
|
-
|
|
158
|
-
engine.registerDriver(memoryDriver);
|
|
159
|
-
engine.registerDriver(tursoDriver);
|
|
160
|
-
|
|
161
|
-
engine.setDatasourceMapping([
|
|
162
|
-
{ namespace: 'crm', datasource: 'memory' },
|
|
163
|
-
]);
|
|
164
|
-
|
|
165
|
-
// Object explicitly sets datasource
|
|
166
|
-
SchemaRegistry.registerObject(
|
|
167
|
-
{
|
|
168
|
-
name: 'account',
|
|
169
|
-
datasource: 'turso', // Explicit override
|
|
170
|
-
fields: { name: { type: 'text' } },
|
|
171
|
-
},
|
|
172
|
-
'com.example.crm',
|
|
173
|
-
'crm',
|
|
174
|
-
'own'
|
|
175
|
-
);
|
|
176
|
-
|
|
177
|
-
// Should use turso (explicit) not memory (mapping)
|
|
178
|
-
const result = await engine.insert('account', { name: 'Test' });
|
|
179
|
-
expect(result).toBeDefined();
|
|
180
|
-
});
|
|
181
|
-
});
|