@hotfusion/modeller 0.0.2 → 0.0.4
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/README.md +32 -454
- package/dist/connector.js +47 -22
- package/dist/connector.js.map +1 -1
- package/dist/server.js +10 -11
- package/dist/server.js.map +1 -1
- package/dist/types/connector.d.ts.map +1 -1
- package/docs/CORE.md +191 -0
- package/docs/ERRORS.md +90 -0
- package/docs/MODEL.md +296 -0
- package/docs/PATTERNS.md +182 -0
- package/docs/SERVER.md +88 -0
- package/docs/UTILITIES.md +111 -0
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -1,29 +1,26 @@
|
|
|
1
1
|
# @hotfusion/modeller
|
|
2
2
|
|
|
3
|
-
A schema-first
|
|
3
|
+
A schema-first data layer for Node.js, built as a three-layer chain:
|
|
4
4
|
|
|
5
|
-
```
|
|
6
|
-
|
|
5
|
+
```
|
|
6
|
+
┌──────────────┐ data primitives — schema, validation, CRUD,
|
|
7
|
+
│ core.ts │ indexes, persistence adapter, trash
|
|
8
|
+
└──────┬───────┘
|
|
9
|
+
│ extends
|
|
10
|
+
┌──────▼───────┐ behavior — hooks, workers, methods, uploads,
|
|
11
|
+
│ model.ts │ streams, events, subscriptions, logging
|
|
12
|
+
└──────┬───────┘
|
|
13
|
+
│ consumed by
|
|
14
|
+
┌──────▼───────┐ transport — HTTP + WebSocket exposure of any model
|
|
15
|
+
│ server.ts │ (auth, sessions, socket fan-out)
|
|
16
|
+
└──────────────┘
|
|
7
17
|
```
|
|
8
18
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
## Table of Contents
|
|
19
|
+
Each layer is usable on its own. Pick the layer that matches the problem you're solving.
|
|
12
20
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- [Hooks](#hooks)
|
|
17
|
-
- [Workers](#workers)
|
|
18
|
-
- [Methods](#methods)
|
|
19
|
-
- [Uploads](#uploads)
|
|
20
|
-
- [Streams](#streams)
|
|
21
|
-
- [Events & Subscriptions](#events--subscriptions)
|
|
22
|
-
- [Internal Event Emitter](#internal-event-emitter)
|
|
23
|
-
- [Extensions](#extensions)
|
|
24
|
-
- [Adapter (Persistence)](#adapter-persistence)
|
|
25
|
-
- [Logging](#logging)
|
|
26
|
-
- [Trash](#trash)
|
|
21
|
+
```ts
|
|
22
|
+
import { Adapter, Model, Server, Bundler, KeyGen } from '@hotfusion/modeller';
|
|
23
|
+
```
|
|
27
24
|
|
|
28
25
|
---
|
|
29
26
|
|
|
@@ -43,451 +40,32 @@ const users = new Model('users', {
|
|
|
43
40
|
}
|
|
44
41
|
});
|
|
45
42
|
|
|
46
|
-
await users.insert({ email: 'alex@hotfusion.ca', name: 'Alex' });
|
|
47
|
-
const found = await users.get({ email: 'alex@hotfusion.ca' });
|
|
48
|
-
const list = await users.list({}, { start: 0, count: 50 });
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## Schema
|
|
54
|
-
|
|
55
|
-
Schemas are JSON Schema (AJV-compatible) with a few Modeller-specific keywords:
|
|
56
|
-
|
|
57
|
-
| Keyword | Effect |
|
|
58
|
-
|-------------|-------------------------------------------------------------------------|
|
|
59
|
-
| `unique` | Enforces uniqueness across all documents on `insert` / `update`. |
|
|
60
|
-
| `private` | Field is stripped from read responses unless `{ private: true }` is set.|
|
|
61
|
-
| `index` | Builds an in-memory index on the field for fast lookups. |
|
|
62
|
-
| `protected` | Reserved for transport-layer protection (consumed by `Server`). |
|
|
63
|
-
| `hidden` | Hint for client-side rendering. Not enforced by the core. |
|
|
64
|
-
| `default` | Standard JSON Schema default. |
|
|
65
|
-
| `model` | (async) References another model by id for FK-style validation. |
|
|
66
|
-
|
|
67
|
-
`$ref` is resolved against `$defs` / `definitions`, and against any `schemes` passed to the constructor. A `$ref` of the form `someModel?key=_id&label=name` is rewritten into a model reference with display metadata.
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## CRUD Methods
|
|
72
|
-
|
|
73
|
-
All CRUD methods are async, fire `before:*` / `after:*` hooks, validate against the schema, and emit an event on the internal emitter.
|
|
74
|
-
|
|
75
|
-
### `insert(key?, ...patches, opts?)`
|
|
76
|
-
|
|
77
|
-
Merges `key` and any number of patch objects into a single document, validates it, assigns an `_id` (BSON `ObjectId`), and stores it.
|
|
78
|
-
|
|
79
|
-
```ts
|
|
80
|
-
await users.insert({ email: 'alex@hotfusion.ca' }, { name: 'Alex' });
|
|
81
|
-
await users.insert({ email: 'admin@hotfusion.ca' }, { role: 'admin' }, { private: true });
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
- Returns the inserted document. `private: true` includes `private` fields in the response.
|
|
85
|
-
- Throws `{ code: 'VALIDATION_ERROR', errors }` or `{ code: 'UNIQUE_VIOLATION', field }`.
|
|
86
|
-
|
|
87
|
-
### `update(key, updates, opts?)`
|
|
88
|
-
|
|
89
|
-
Finds a document by `key` (mingo query), shallow-merges `updates`, re-validates, and saves.
|
|
90
|
-
|
|
91
|
-
```ts
|
|
92
|
-
await users.update({ _id: id }, { name: 'Alex H.' });
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Returns the merged document, or `null` if no match. Same error codes as `insert`.
|
|
96
|
-
|
|
97
|
-
### `delete(key)`
|
|
98
|
-
|
|
99
|
-
Removes the document matching `key`. If `trash` is not disabled and an adapter is configured, the document is moved to the in-memory trash bin.
|
|
100
|
-
|
|
101
|
-
```ts
|
|
102
|
-
await users.delete({ _id: id }); // → { _id } or null
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### `get(key, opts?)`
|
|
106
|
-
|
|
107
|
-
Returns a single document or `null`. Pass `{ private: true }` to include private fields.
|
|
108
|
-
|
|
109
|
-
```ts
|
|
110
|
-
await users.get({ email: 'alex@hotfusion.ca' });
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### `list(query?, opts?)`
|
|
114
|
-
|
|
115
|
-
Paginated, **exact-match** query (mingo).
|
|
116
|
-
|
|
117
|
-
```ts
|
|
118
|
-
await users.list({ role: 'admin' }, { start: 0, count: 25 });
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
Default `count` is 10. Fires `before:list` and `after:list` with the query as payload `data`.
|
|
122
|
-
|
|
123
|
-
### `find(query?, opts?)`
|
|
124
|
-
|
|
125
|
-
Like `list`, but **strings match as case-insensitive substrings**. Non-string values match exactly.
|
|
126
|
-
|
|
127
|
-
```ts
|
|
128
|
-
await users.find({ name: 'al' }, { max: 10 });
|
|
129
|
-
// matches 'Alex', 'Albert', ...
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
Default `max` is 10. Does **not** fire hooks.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Hooks
|
|
137
|
-
|
|
138
|
-
Hooks run before or after a CRUD operation. They can short-circuit an operation by throwing, mutate the payload, or perform side effects. Hooks support both synchronous and asynchronous callbacks.
|
|
139
|
-
|
|
140
|
-
### Registering
|
|
141
|
-
|
|
142
|
-
```ts
|
|
143
|
-
users.hook({
|
|
144
|
-
id : 'normalize-email',
|
|
145
|
-
on : 'before:insert',
|
|
146
|
-
callback : async ({ data }) => {
|
|
147
|
-
if (data?.email) data.email = data.email.toLowerCase();
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
Multiple events can share a callback:
|
|
153
|
-
|
|
154
|
-
```ts
|
|
155
|
-
users.hook({
|
|
156
|
-
id : 'audit',
|
|
157
|
-
on : ['after:insert', 'after:update', 'after:delete'],
|
|
158
|
-
callback : ({ operation, key, data }) => audit.log(operation, key, data)
|
|
159
|
-
});
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Removing
|
|
163
|
-
|
|
164
|
-
```ts
|
|
165
|
-
users.unhook('normalize-email');
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### Hook events
|
|
169
|
-
|
|
170
|
-
| Event | Payload fields |
|
|
171
|
-
|-------------------|-----------------------------------------------|
|
|
172
|
-
| `before:insert` | `operation`, `timing`, `data` |
|
|
173
|
-
| `after:insert` | `operation`, `timing`, `data`, `key: { _id }` |
|
|
174
|
-
| `before:update` | `operation`, `timing`, `key`, `data` |
|
|
175
|
-
| `after:update` | `operation`, `timing`, `key`, `data` |
|
|
176
|
-
| `before:delete` | `operation`, `timing`, `key` |
|
|
177
|
-
| `after:delete` | `operation`, `timing`, `key`, `data` |
|
|
178
|
-
| `before:list` | `operation`, `timing`, `data` (= query) |
|
|
179
|
-
| `after:list` | `operation`, `timing`, `data` (= query) |
|
|
180
|
-
|
|
181
|
-
Note: `find` does not fire hooks; `get` does not fire hooks.
|
|
182
|
-
|
|
183
|
-
### Scheduled hooks
|
|
184
|
-
|
|
185
|
-
Pass `schedule: <ms>` to defer execution via `setTimeout`. Scheduled hooks are fire-and-forget — they don't block the operation and their errors aren't propagated.
|
|
186
|
-
|
|
187
|
-
```ts
|
|
188
43
|
users.hook({
|
|
189
|
-
id
|
|
190
|
-
on
|
|
191
|
-
|
|
192
|
-
callback : ({ data }) => mailer.send(data.email, 'welcome')
|
|
193
|
-
});
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Throwing from a hook
|
|
197
|
-
|
|
198
|
-
A non-scheduled hook that throws aborts the operation. The error is logged and re-thrown to the caller.
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
|
-
## Workers
|
|
203
|
-
|
|
204
|
-
Workers are interval-based background tasks bound to the model. They can be named (managed individually) or unsigned (managed in bulk).
|
|
205
|
-
|
|
206
|
-
### Registering
|
|
207
|
-
|
|
208
|
-
```ts
|
|
209
|
-
users.worker({
|
|
210
|
-
id : 'sync',
|
|
211
|
-
interval : 30_000,
|
|
212
|
-
immediate : true, // run once on start, default true
|
|
213
|
-
handler : async (model) => {
|
|
214
|
-
await model.pull();
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
Omit `id` for an unsigned worker:
|
|
220
|
-
|
|
221
|
-
```ts
|
|
222
|
-
users.worker({ interval: 60_000, handler: () => cleanup() });
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
### Lifecycle
|
|
226
|
-
|
|
227
|
-
```ts
|
|
228
|
-
users.start(); // start all workers (named + unsigned)
|
|
229
|
-
users.start('sync'); // start a specific named worker
|
|
230
|
-
users.stop(); // stop all
|
|
231
|
-
users.stop('sync'); // stop a specific named worker
|
|
232
|
-
users.isRunning('sync'); // → boolean
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
Errors thrown inside a worker handler are caught and logged at `error` level — they never crash the interval.
|
|
236
|
-
|
|
237
|
-
---
|
|
238
|
-
|
|
239
|
-
## Methods
|
|
240
|
-
|
|
241
|
-
Methods are named, schemaless RPC-style operations attached to the model. Use them for anything that doesn't fit the CRUD shape.
|
|
242
|
-
|
|
243
|
-
```ts
|
|
244
|
-
users.method({
|
|
245
|
-
id : 'resetPassword',
|
|
246
|
-
handler : async ({ email, newPassword }, model, ctx) => {
|
|
247
|
-
const user = await model.get({ email });
|
|
248
|
-
if (!user) throw { code: 'NOT_FOUND' };
|
|
249
|
-
return model.update({ _id: user._id }, { password: newPassword });
|
|
250
|
-
}
|
|
44
|
+
id: 'normalize-email',
|
|
45
|
+
on: 'before:insert',
|
|
46
|
+
callback: ({ data }) => { data.email = data.email.toLowerCase(); }
|
|
251
47
|
});
|
|
252
48
|
|
|
253
|
-
await users.
|
|
254
|
-
users.getMethods(); // → ['resetPassword']
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
`call` throws `{ code: 'METHOD_NOT_FOUND', id }` if the method isn't registered.
|
|
258
|
-
|
|
259
|
-
---
|
|
260
|
-
|
|
261
|
-
## Uploads
|
|
262
|
-
|
|
263
|
-
Uploads receive a `Buffer` plus a `fields` map (typically multipart form fields).
|
|
264
|
-
|
|
265
|
-
```ts
|
|
266
|
-
users.upload({
|
|
267
|
-
id : 'avatar',
|
|
268
|
-
handler : async (file, fields, model) => {
|
|
269
|
-
const path = await storage.put(file, fields.filename);
|
|
270
|
-
return model.update({ _id: fields.userId }, { avatar: path });
|
|
271
|
-
}
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
await users.callUpload('avatar', buffer, { userId, filename: 'me.png' });
|
|
275
|
-
users.getUploads(); // → ['avatar']
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
---
|
|
279
|
-
|
|
280
|
-
## Streams
|
|
281
|
-
|
|
282
|
-
Streams are similar to uploads but expect chunked `Buffer` data with arbitrary `meta`.
|
|
283
|
-
|
|
284
|
-
```ts
|
|
285
|
-
users.stream({
|
|
286
|
-
id : 'import',
|
|
287
|
-
handler : async (chunk, meta, model) => {
|
|
288
|
-
for (const row of parseCsv(chunk)) await model.insert(row);
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
await users.callStream('import', chunk, { source: 'crm' });
|
|
293
|
-
users.getStreams(); // → ['import']
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
## Events & Subscriptions
|
|
299
|
-
|
|
300
|
-
Events are named, schema-validated handlers that clients subscribe to. Unlike `method` (one-shot RPC), events are designed for fan-out to multiple subscribers, scoped by query.
|
|
301
|
-
|
|
302
|
-
### Defining an event
|
|
303
|
-
|
|
304
|
-
```ts
|
|
305
|
-
users.event({
|
|
306
|
-
id : 'roleChanged',
|
|
307
|
-
schema : {
|
|
308
|
-
type : 'object',
|
|
309
|
-
required : ['_id', 'role'],
|
|
310
|
-
properties: {
|
|
311
|
-
_id : { type: 'string' },
|
|
312
|
-
role : { type: 'string', enum: ['user', 'admin'] }
|
|
313
|
-
}
|
|
314
|
-
},
|
|
315
|
-
handler : async ({ _id, role }, model, ctx) => {
|
|
316
|
-
return model.update({ _id }, { role });
|
|
317
|
-
}
|
|
318
|
-
});
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
If `schema` is set, args are validated before the handler runs. Validation errors throw `{ code: 'VALIDATION_ERROR', errors }`.
|
|
322
|
-
|
|
323
|
-
### Subscribing
|
|
324
|
-
|
|
325
|
-
A subscription is keyed by a normalized query — same query keys/values produce the same subscription instance.
|
|
326
|
-
|
|
327
|
-
```ts
|
|
328
|
-
const { subscription, subId } = users.subscribe({ role: 'admin' });
|
|
329
|
-
|
|
330
|
-
subscription.on('publish', payload => {
|
|
331
|
-
console.log('admin update:', payload);
|
|
332
|
-
});
|
|
333
|
-
|
|
334
|
-
// shorthand — returns just the subscription
|
|
335
|
-
const sub = users.subscription({ role: 'admin' });
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
### Dispatching an event from a subscription
|
|
339
|
-
|
|
340
|
-
`dispatch` validates args (if a schema is set) and runs the matching event handler.
|
|
341
|
-
|
|
342
|
-
```ts
|
|
343
|
-
await sub.dispatch('roleChanged', { _id, role: 'admin' }, ctx);
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
Throws `{ code: 'EVENT_NOT_FOUND', id }` if the event isn't registered.
|
|
347
|
-
|
|
348
|
-
### Publishing to subscribers
|
|
349
|
-
|
|
350
|
-
`publish` is your fan-out hook — it emits to every listener attached via `on('publish', ...)` for that subscription.
|
|
351
|
-
|
|
352
|
-
```ts
|
|
353
|
-
sub.publish({ type: 'role-changed', _id, role: 'admin' });
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
A common pattern is calling `publish` from inside an `after:update` hook to notify everyone watching that slice of the model.
|
|
357
|
-
|
|
358
|
-
### Inspection / cleanup
|
|
359
|
-
|
|
360
|
-
```ts
|
|
361
|
-
sub.getEvents(); // → ['roleChanged']
|
|
362
|
-
users.unsubscribe({ role: 'admin' });
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
---
|
|
366
|
-
|
|
367
|
-
## Internal Event Emitter
|
|
368
|
-
|
|
369
|
-
Separate from the subscription system, every model is also an `EventEmitter`. CRUD operations emit on this emitter directly — useful for in-process listeners that don't need query scoping.
|
|
370
|
-
|
|
371
|
-
```ts
|
|
372
|
-
users.on('insert', doc => console.log('inserted', doc));
|
|
373
|
-
users.on('update', ({ key, data }) => console.log('updated', key, data));
|
|
374
|
-
users.on('delete', result => console.log('deleted', result));
|
|
375
|
-
users.on('log', entry => console.log(entry)); // log feed
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
`on`, `off`, `once`, `emit` are all available. Built-in events: `insert`, `update`, `delete`, `log`.
|
|
379
|
-
|
|
380
|
-
---
|
|
381
|
-
|
|
382
|
-
## Extensions
|
|
383
|
-
|
|
384
|
-
Pass `extensions: [...]` in the constructor options to mount sub-models as named properties on the parent.
|
|
385
|
-
|
|
386
|
-
```ts
|
|
387
|
-
const ssh = new Model('ssh', sshSchema);
|
|
388
|
-
const users = new Model('users', userSchema, { extensions: [ssh] });
|
|
389
|
-
|
|
390
|
-
users.ssh.insert({ host: '...', port: 22, username: 'root' });
|
|
391
|
-
users.getExtensions(); // → [Model('ssh')]
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
The mount key is `extension.id`.
|
|
395
|
-
|
|
396
|
-
---
|
|
397
|
-
|
|
398
|
-
## Adapter (Persistence)
|
|
399
|
-
|
|
400
|
-
Models are in-memory by default. Provide an `Adapter` subclass to persist on every write and rehydrate on `pull()`.
|
|
401
|
-
|
|
402
|
-
```ts
|
|
403
|
-
import { Adapter, Model } from '@hotfusion/modeller';
|
|
404
|
-
|
|
405
|
-
class FileAdapter extends Adapter {
|
|
406
|
-
constructor(id) {
|
|
407
|
-
super(id);
|
|
408
|
-
this.path = `./data/${id}.json`;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
async sync(id, doc) {
|
|
412
|
-
// called on every insert / update / delete
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
async pull() {
|
|
416
|
-
// return the array of documents to load into memory
|
|
417
|
-
return JSON.parse(await fs.readFile(this.path, 'utf8'));
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
const users = new Model('users', schema, { adapter: FileAdapter });
|
|
422
|
-
await users.pull(); // hydrate before serving traffic
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
When an adapter is configured, deletes are also moved to the trash bin (unless you pass `trash: false` in options).
|
|
426
|
-
|
|
427
|
-
---
|
|
428
|
-
|
|
429
|
-
## Logging
|
|
430
|
-
|
|
431
|
-
A built-in logger surfaces hook, worker, method, event, and CRUD activity. Configure it at construction time:
|
|
432
|
-
|
|
433
|
-
```ts
|
|
434
|
-
const users = new Model('users', schema, {
|
|
435
|
-
level : 'debug', // 'debug' | 'info' | 'warn' | 'error' | 'silent'
|
|
436
|
-
timestamp : true,
|
|
437
|
-
features : { hook: true, worker: true, method: true, event: false, crud: true },
|
|
438
|
-
onEntry : entry => myLogger.log(entry)
|
|
439
|
-
});
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
Or supply a custom adapter:
|
|
443
|
-
|
|
444
|
-
```ts
|
|
445
|
-
{
|
|
446
|
-
logAdapter: { log: entry => myStore.append(entry) }
|
|
447
|
-
}
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
You can also listen to `'log'` on the model itself:
|
|
451
|
-
|
|
452
|
-
```ts
|
|
453
|
-
users.on('log', entry => sink.write(entry));
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
Each entry includes `level`, `feature`, `modelId`, `message`, `callSite`, `timestamp`, and optional `data`.
|
|
457
|
-
|
|
458
|
-
---
|
|
459
|
-
|
|
460
|
-
## Trash
|
|
461
|
-
|
|
462
|
-
When an adapter is configured, deletes go to an in-memory trash bin keyed by `_id`.
|
|
463
|
-
|
|
464
|
-
```ts
|
|
465
|
-
await users.delete({ _id });
|
|
466
|
-
|
|
467
|
-
// elsewhere — direct trash access isn't exposed on Model yet,
|
|
468
|
-
// but Trash supports: restore, has, get, permanentDelete, empty,
|
|
469
|
-
// size, list({ start, count }), find(query), findAll(query).
|
|
49
|
+
await users.insert({ email: 'alex@hotfusion.ca', name: 'Alex' });
|
|
470
50
|
```
|
|
471
51
|
|
|
472
|
-
Pass `{ trash: false }` in model options to disable.
|
|
473
|
-
|
|
474
52
|
---
|
|
475
53
|
|
|
476
|
-
##
|
|
54
|
+
## Documentation
|
|
477
55
|
|
|
478
|
-
|
|
56
|
+
| Section | Covers |
|
|
57
|
+
|--------------------------------------|-----------------------------------------------------------------------|
|
|
58
|
+
| [Core layer](./docs/CORE.md) | Schema, validator, CRUD primitives, indexes, adapter, trash. |
|
|
59
|
+
| [Model layer](./docs/MODEL.md) | Hooks, workers, methods, uploads, streams, events, subscriptions, logging, extensions. |
|
|
60
|
+
| [Server layer](./docs/SERVER.md) | HTTP + WebSocket transport, auth, server events, public API. |
|
|
61
|
+
| [Utilities](./docs/UTILITIES.md) | `Bundler`, `KeyGen`, `Adapter`, encryption, JWT helpers. |
|
|
62
|
+
| [Errors](./docs/ERRORS.md) | Error codes thrown by the framework. |
|
|
63
|
+
| [Common patterns](./docs/PATTERNS.md)| Recipes for publish-on-update, FK validation, extensions, workers. |
|
|
479
64
|
|
|
480
|
-
|
|
481
|
-
|---------------------|-------------------------------------------------|
|
|
482
|
-
| `VALIDATION_ERROR` | AJV failed on `insert` / `update` / event args |
|
|
483
|
-
| `UNIQUE_VIOLATION` | A `unique` field collided |
|
|
484
|
-
| `METHOD_NOT_FOUND` | `call('id', ...)` with unregistered id |
|
|
485
|
-
| `UPLOAD_NOT_FOUND` | `callUpload('id', ...)` with unregistered id |
|
|
486
|
-
| `STREAM_NOT_FOUND` | `callStream('id', ...)` with unregistered id |
|
|
487
|
-
| `EVENT_NOT_FOUND` | `subscription.dispatch('id', ...)` mismatch |
|
|
65
|
+
Start with **Model** if you're building an app. Drop down to **Core** when you need to understand schema or persistence semantics. Read **Server** when you're ready to expose models over the network.
|
|
488
66
|
|
|
489
67
|
---
|
|
490
68
|
|
|
491
69
|
## License
|
|
492
70
|
|
|
493
|
-
UNLICENSED — internal HotFusion project.
|
|
71
|
+
UNLICENSED — internal HotFusion project.
|
package/dist/connector.js
CHANGED
|
@@ -227,37 +227,62 @@ class Connector {
|
|
|
227
227
|
}
|
|
228
228
|
async stream(path, files, meta, onProgress) {
|
|
229
229
|
const CHUNK_SIZE = 256 * 1024;
|
|
230
|
+
const ACK_TIMEOUT_MS = 30_000;
|
|
231
|
+
const COMPLETE_TIMEOUT_MS = 120_000;
|
|
230
232
|
const [id, scope, method] = path.replace(/^\//, '').split('/');
|
|
231
233
|
const results = [];
|
|
234
|
+
const waitFor = (event, timeoutMs) => new Promise((resolve, reject) => {
|
|
235
|
+
const onEvent = (data) => { clearTimeout(timer); resolve(data); };
|
|
236
|
+
const timer = setTimeout(() => {
|
|
237
|
+
this._socket.off(event, onEvent);
|
|
238
|
+
reject(new Error(`Timeout waiting for ${event} after ${timeoutMs}ms`));
|
|
239
|
+
}, timeoutMs);
|
|
240
|
+
this._socket.once(event, onEvent);
|
|
241
|
+
});
|
|
232
242
|
for (const file of files) {
|
|
233
243
|
const uploadId = Math.random().toString(36).slice(2) + Date.now();
|
|
234
244
|
const buffer = await file.arrayBuffer();
|
|
235
245
|
const totalChunks = Math.ceil(buffer.byteLength / CHUNK_SIZE);
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
246
|
+
// Arm complete/error listeners up front
|
|
247
|
+
const completePromise = new Promise((resolve, reject) => {
|
|
248
|
+
const onComplete = (data) => { cleanup(); resolve(data); };
|
|
249
|
+
const onError = (err) => { cleanup(); reject(new Error(typeof err === 'string' ? err : (err?.message ?? String(err)))); };
|
|
250
|
+
const timer = setTimeout(() => { cleanup(); reject(new Error(`Upload ${uploadId} timed out`)); }, COMPLETE_TIMEOUT_MS);
|
|
251
|
+
const cleanup = () => {
|
|
252
|
+
clearTimeout(timer);
|
|
253
|
+
this._socket.off(`upload:complete:${uploadId}`, onComplete);
|
|
254
|
+
this._socket.off(`upload:error:${uploadId}`, onError);
|
|
255
|
+
};
|
|
256
|
+
this._socket.once(`upload:complete:${uploadId}`, onComplete);
|
|
257
|
+
this._socket.once(`upload:error:${uploadId}`, onError);
|
|
247
258
|
});
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
259
|
+
try {
|
|
260
|
+
// 1. Send start, WAIT for server to ack it's ready
|
|
261
|
+
const startedWait = waitFor(`upload:started:${uploadId}`, ACK_TIMEOUT_MS);
|
|
262
|
+
this._socket.emit('upload:start', {
|
|
263
|
+
uploadId,
|
|
264
|
+
id,
|
|
265
|
+
scope,
|
|
266
|
+
method,
|
|
267
|
+
meta: { ...meta, filename: file.name },
|
|
268
|
+
totalChunks,
|
|
253
269
|
});
|
|
254
|
-
|
|
270
|
+
await startedWait;
|
|
271
|
+
// 2. Now safe to send chunks
|
|
272
|
+
for (let i = 0; i < totalChunks; i++) {
|
|
273
|
+
const chunk = buffer.slice(i * CHUNK_SIZE, (i + 1) * CHUNK_SIZE);
|
|
274
|
+
const ack = waitFor(`upload:ack:${uploadId}:${i}`, ACK_TIMEOUT_MS);
|
|
275
|
+
this._socket.emit('upload:chunk', { uploadId, index: i, data: chunk });
|
|
276
|
+
await ack;
|
|
277
|
+
onProgress?.(i + 1, totalChunks, file);
|
|
278
|
+
}
|
|
279
|
+
const result = await completePromise;
|
|
280
|
+
results.push(result);
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
this._socket.emit('upload:abort', { uploadId });
|
|
284
|
+
throw err;
|
|
255
285
|
}
|
|
256
|
-
const result = await new Promise((resolve, reject) => {
|
|
257
|
-
this._socket.once(`upload:complete:${uploadId}`, resolve);
|
|
258
|
-
this._socket.once(`upload:error:${uploadId}`, reject);
|
|
259
|
-
});
|
|
260
|
-
results.push(result);
|
|
261
286
|
}
|
|
262
287
|
return results;
|
|
263
288
|
}
|
package/dist/connector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":";;;AAAA,uDAA4C;AAC5C,iDAA2C;AAE3C,iCAAiC;AAiBjC,iFAAiF;AAEjF,MAAM,UAAU;IACK,OAAO,CAAU;IAC1B,KAAK,CAAiC;IAE9C,YAAY,OAAe,EAAE,KAAc;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAK,KAAK,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,KAAa,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAE/C,IAAY,OAAO;QACf,MAAM,CAAC,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;QACzE,IAAI,IAAI,CAAC,KAAK;YAAE,CAAC,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5D,OAAO,CAAC,CAAC;IACb,CAAC;IAED,KAAK,CAAC,OAAO,CAAU,MAAc,EAAE,IAAY,EAAE,IAA0B;QAC3E,MAAM,GAAG,GAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAE5D,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,IAAI,IAAI;gBAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACV,IAAI,OAAO,GAAG,GAAG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnE,IAAI,CAAC;oBACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;oBAC9B,IAAI,IAAI,EAAE,KAAK;wBAAE,OAAO,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxG,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,MAAM,GAAG,CAAC,IAAI,EAAgB,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAU,IAAY,IAA6C,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnH,KAAK,CAAC,IAAI,CAAU,IAAY,EAAE,IAAyB,IAAgB,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CAC3H;AAED,iFAAiF;AAEjF,MAAa,SAAS;IACV,OAAO,CAAgB;IACvB,KAAK,CAAsB;IAC3B,QAAQ,GAA+D,IAAI,4BAAY,EAAE,CAAC;IAC1F,QAAQ,GAA+D,IAAI,GAAG,EAAE,CAAC;IACjF,SAAS,GAA8D,IAAI,CAAC;IAC5E,aAAa,GAA0D,IAAI,GAAG,EAAE,CAAC;IACxE,IAAI,CAAU;IAI/B,YAAY,GAAW;QACnB,IAAI,CAAC,IAAI,GAAI,GAAG,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACjD,gBAAS,CAAC,MAAM,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,6EAA6E;IAE7E,YAAY;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,EAAE,CAAG,KAAa,EAAE,QAAkC,IAAU,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IACnH,GAAG,CAAE,KAAa,EAAE,QAAkC,IAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IACnH,IAAI,CAAC,KAAa,EAAE,QAAkC,IAAU,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IAEnH,6EAA6E;IAErE,UAAU,CAAC,EAAU,EAAE,KAAa,EAAE,KAA0B,EAAE,KAAa,EAAE,IAAS;QAC9F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,WAAW,CAAC,EAAU,EAAE,KAAa,EAAE,KAA0B,EAAE,MAAgB;QACvF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAS,IAAI,CAAC,EAAE,CAAC,GAAU,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;IACP,CAAC;IAED,6EAA6E;IAE7E,SAAS,CAAC,EAAU,EAAE,KAAa,EAAE,QAA6B,EAAE,EAAE,QAAiC;QACnG,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAO,EAAE,EAAE;gBAC9E,IAAI,GAAG,KAAK,EAAE,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK;oBAAE,OAAO;gBAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBAExC,MAAM,YAAY,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;gBAE/C,IAAI,QAAQ,EAAE,CAAC;oBACX,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;oBAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,OAAY,EAAE,EAAE;oBAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC;gBAEH,MAAM,KAAK,GAAgD,EAAE,CAAC;gBAC9D,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;oBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE;wBAC7B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;oBACjF,CAAC,CAAC,CAAC;gBACP,CAAC;gBAED,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CAAC,EAAU,EAAE,KAAa,EAAE,QAA6B,EAAE,EAAE,QAAmC;QACvG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAU,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,YAAY,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;QAE/C,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;;YAC1C,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAE7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,OAAO;QACT,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAEzC,MAAM,OAAO,GAAI,MAAM,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAEtC,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,EAAE;YAC1B,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;gBAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;gBAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC;QAEF,IAAI,CAAC,SAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;YACxC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,OAAO,GAAG,IAAA,qBAAE,EAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAEnD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAO,EAAE,EAAE;oBAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1C,IAAI,CAAC,OAAO;wBAAE,OAAO;oBACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC7B,IAAI,KAAK;wBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;wBACtB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAU,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAS,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC;IACP,CAAC;IAED,UAAU,KAAW,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAElD,6EAA6E;IAE7E,KAAK,CAAC,SAAS,CAAU,IAAY,EAAE,IAA0B,EAAE,OAAwB;QACvF,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5D,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CACpB,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,0BAA0B,EACnD,IAAI,EACJ,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,EAC3B,OAAO,EAAE,MAAM,EAAE,UAAU,CAC9B,CAAC;QACN,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QACrE,MAAM,KAAK,GAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,UAAU,EAAE,CAAC,CAAC;QAC/E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9G,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAU,IAAY,EAAE,IAAyB,EAAE,OAAwB;QACjF,IAAI,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAClD,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CACpB,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,0BAA0B,EACnD,IAAI,EACJ,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,EAC3B,OAAO,EAAE,MAAM,EAAE,UAAU,CAC9B,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAU,IAAY,IAAgB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1E,kBAAkB,CAAC,IAAY;QAC3B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;IAC9D,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,QAAgB;QAC9C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,SAAS,CAAC,UAAkB;QACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,GAAG,GAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,SAAS,UAAU,EAAE,CAAC;YAChE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC;YACjE,IAAI,CAAC,KAAK;gBAAE,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,CAAC,CAAe,EAAE,EAAE;gBAChC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACxC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC/C,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,MAAM,CACR,IAAmB,EACnB,MAAgC,EAChC,OAAmC,EAAE,EACrC,UAA+D;QAE/D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAC7B,IAAI,EACJ,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAC5B,IAAI,EACJ,UAAU,CACb,CAAC;YACF,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,CAAS,EAAE,EAAE;gBACvC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,MAAM,CACR,IAAmB,EACnB,KAAmB,EACnB,IAAgC,EAChC,UAA+D;QAE/D,MAAM,UAAU,GAAY,GAAG,GAAG,IAAI,CAAC;QACvC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrE,MAAM,MAAM,GAAQ,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;YAE9D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,OAAO,CAAM,OAAO,CAAC,EAAE;gBACnD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;gBACxD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC9B,QAAQ;gBACR,EAAE;gBACF,KAAK;gBACL,MAAM;gBACN,IAAI,EAAS,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE;gBAC7C,WAAW;aACd,CAAC,CAAC;YAEH,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;gBACjE,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;oBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,QAAQ,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;oBAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3E,CAAC,CAAC,CAAC;gBACH,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YAC3C,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,QAAQ,EAAE,EAAI,MAAM,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,6EAA6E;IAErE,UAAU,CAAC,GAAQ,EAAE,OAAc,EAAE;QACzC,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACpB,IAAI,IAAI,EAAE,MAAM,YAAY,IAAI;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;;oBACrF,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,YAAY,IAAI;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;;oBAC/F,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,UAAU,CAAC,GAAQ,EAAE,IAAW,EAAE,KAAU;QAChD,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED,6EAA6E;IAE7E,IAAI,MAAM,KAAyB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,IAAI,QAAQ,KAAuB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAE3D,WAAW,KAAyB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,WAAW,CAAC,CAAC,CAAC,CAAC;CACvF;AAnTD,8BAmTC"}
|
|
1
|
+
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"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"}
|