@sylphx/lens-solid 2.2.4 → 2.2.6
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.js +445 -2
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -5,7 +5,450 @@ var DSL_MARKER = Symbol("reify");
|
|
|
5
5
|
// ../../node_modules/.bun/@sylphx+reify-core@0.1.2/node_modules/@sylphx/reify-core/dist/evaluator.js
|
|
6
6
|
var plugins = new Map;
|
|
7
7
|
// ../core/dist/index.js
|
|
8
|
+
class FieldType {
|
|
9
|
+
_nullable = false;
|
|
10
|
+
_optional = false;
|
|
11
|
+
_default;
|
|
12
|
+
_resolutionMode = "exposed";
|
|
13
|
+
_resolver;
|
|
14
|
+
_subscriptionResolver;
|
|
15
|
+
nullable() {
|
|
16
|
+
const clone = Object.create(this);
|
|
17
|
+
clone._nullable = true;
|
|
18
|
+
return clone;
|
|
19
|
+
}
|
|
20
|
+
optional() {
|
|
21
|
+
const clone = Object.create(this);
|
|
22
|
+
clone._optional = true;
|
|
23
|
+
return clone;
|
|
24
|
+
}
|
|
25
|
+
default(value) {
|
|
26
|
+
const clone = Object.create(this);
|
|
27
|
+
clone._default = value;
|
|
28
|
+
return clone;
|
|
29
|
+
}
|
|
30
|
+
isNullable() {
|
|
31
|
+
return this._nullable;
|
|
32
|
+
}
|
|
33
|
+
isOptional() {
|
|
34
|
+
return this._optional;
|
|
35
|
+
}
|
|
36
|
+
getDefault() {
|
|
37
|
+
return this._default;
|
|
38
|
+
}
|
|
39
|
+
serialize(value) {
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
deserialize(value) {
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
resolve(fn) {
|
|
46
|
+
const clone = Object.create(this);
|
|
47
|
+
clone._resolutionMode = "resolve";
|
|
48
|
+
clone._resolver = fn;
|
|
49
|
+
return clone;
|
|
50
|
+
}
|
|
51
|
+
subscribe(fn) {
|
|
52
|
+
const clone = Object.create(this);
|
|
53
|
+
clone._resolutionMode = "subscribe";
|
|
54
|
+
clone._subscriptionResolver = fn;
|
|
55
|
+
return clone;
|
|
56
|
+
}
|
|
57
|
+
hasResolver() {
|
|
58
|
+
return this._resolutionMode === "resolve" && this._resolver !== undefined;
|
|
59
|
+
}
|
|
60
|
+
hasSubscription() {
|
|
61
|
+
return this._resolutionMode === "subscribe" && this._subscriptionResolver !== undefined;
|
|
62
|
+
}
|
|
63
|
+
getResolutionMode() {
|
|
64
|
+
return this._resolutionMode;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
class IdType extends FieldType {
|
|
69
|
+
_type = "id";
|
|
70
|
+
_tsType;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
class StringType extends FieldType {
|
|
74
|
+
_type = "string";
|
|
75
|
+
_tsType;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
class IntType extends FieldType {
|
|
79
|
+
_type = "int";
|
|
80
|
+
_tsType;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
class FloatType extends FieldType {
|
|
84
|
+
_type = "float";
|
|
85
|
+
_tsType;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
class BooleanType extends FieldType {
|
|
89
|
+
_type = "boolean";
|
|
90
|
+
_tsType;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
class DateTimeType extends FieldType {
|
|
94
|
+
_type = "datetime";
|
|
95
|
+
_tsType;
|
|
96
|
+
serialize(value) {
|
|
97
|
+
if (!(value instanceof Date)) {
|
|
98
|
+
throw new Error(`Expected Date instance, got ${typeof value}`);
|
|
99
|
+
}
|
|
100
|
+
return value.toISOString();
|
|
101
|
+
}
|
|
102
|
+
deserialize(value) {
|
|
103
|
+
if (typeof value !== "string") {
|
|
104
|
+
throw new Error(`Expected string, got ${typeof value}`);
|
|
105
|
+
}
|
|
106
|
+
const date = new Date(value);
|
|
107
|
+
if (Number.isNaN(date.getTime())) {
|
|
108
|
+
throw new Error(`Invalid date string: ${value}`);
|
|
109
|
+
}
|
|
110
|
+
return date;
|
|
111
|
+
}
|
|
112
|
+
validate(value) {
|
|
113
|
+
return value instanceof Date && !Number.isNaN(value.getTime());
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
class DecimalType extends FieldType {
|
|
118
|
+
_type = "decimal";
|
|
119
|
+
_tsType;
|
|
120
|
+
serialize(value) {
|
|
121
|
+
if (typeof value !== "number" || Number.isNaN(value)) {
|
|
122
|
+
throw new Error(`Expected number, got ${typeof value}`);
|
|
123
|
+
}
|
|
124
|
+
return value.toString();
|
|
125
|
+
}
|
|
126
|
+
deserialize(value) {
|
|
127
|
+
if (typeof value !== "string") {
|
|
128
|
+
throw new Error(`Expected string, got ${typeof value}`);
|
|
129
|
+
}
|
|
130
|
+
const num = Number.parseFloat(value);
|
|
131
|
+
if (Number.isNaN(num)) {
|
|
132
|
+
throw new Error(`Invalid decimal string: ${value}`);
|
|
133
|
+
}
|
|
134
|
+
return num;
|
|
135
|
+
}
|
|
136
|
+
validate(value) {
|
|
137
|
+
return typeof value === "number" && !Number.isNaN(value) && Number.isFinite(value);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
class DateType extends FieldType {
|
|
142
|
+
_type = "date";
|
|
143
|
+
_tsType;
|
|
144
|
+
serialize(value) {
|
|
145
|
+
if (!(value instanceof Date)) {
|
|
146
|
+
throw new Error(`Expected Date instance, got ${typeof value}`);
|
|
147
|
+
}
|
|
148
|
+
return value.toISOString().split("T")[0];
|
|
149
|
+
}
|
|
150
|
+
deserialize(value) {
|
|
151
|
+
if (typeof value !== "string") {
|
|
152
|
+
throw new Error(`Expected string, got ${typeof value}`);
|
|
153
|
+
}
|
|
154
|
+
const date = new Date(`${value}T00:00:00.000Z`);
|
|
155
|
+
if (Number.isNaN(date.getTime())) {
|
|
156
|
+
throw new Error(`Invalid date string: ${value}`);
|
|
157
|
+
}
|
|
158
|
+
return date;
|
|
159
|
+
}
|
|
160
|
+
validate(value) {
|
|
161
|
+
return value instanceof Date && !Number.isNaN(value.getTime());
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
class BigIntType extends FieldType {
|
|
166
|
+
_type = "bigint";
|
|
167
|
+
_tsType;
|
|
168
|
+
serialize(value) {
|
|
169
|
+
if (typeof value !== "bigint") {
|
|
170
|
+
throw new Error(`Expected bigint, got ${typeof value}`);
|
|
171
|
+
}
|
|
172
|
+
return value.toString();
|
|
173
|
+
}
|
|
174
|
+
deserialize(value) {
|
|
175
|
+
if (typeof value !== "string") {
|
|
176
|
+
throw new Error(`Expected string, got ${typeof value}`);
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
return BigInt(value);
|
|
180
|
+
} catch {
|
|
181
|
+
throw new Error(`Invalid bigint string: ${value}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
validate(value) {
|
|
185
|
+
return typeof value === "bigint";
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
class BytesType extends FieldType {
|
|
190
|
+
_type = "bytes";
|
|
191
|
+
_tsType;
|
|
192
|
+
serialize(value) {
|
|
193
|
+
if (!(value instanceof Uint8Array)) {
|
|
194
|
+
throw new Error(`Expected Uint8Array, got ${typeof value}`);
|
|
195
|
+
}
|
|
196
|
+
if (typeof btoa === "function") {
|
|
197
|
+
return btoa(String.fromCharCode(...value));
|
|
198
|
+
}
|
|
199
|
+
return Buffer.from(value).toString("base64");
|
|
200
|
+
}
|
|
201
|
+
deserialize(value) {
|
|
202
|
+
if (typeof value !== "string") {
|
|
203
|
+
throw new Error(`Expected string, got ${typeof value}`);
|
|
204
|
+
}
|
|
205
|
+
if (typeof atob === "function") {
|
|
206
|
+
const binary = atob(value);
|
|
207
|
+
const bytes = new Uint8Array(binary.length);
|
|
208
|
+
for (let i = 0;i < binary.length; i++) {
|
|
209
|
+
bytes[i] = binary.charCodeAt(i);
|
|
210
|
+
}
|
|
211
|
+
return bytes;
|
|
212
|
+
}
|
|
213
|
+
return new Uint8Array(Buffer.from(value, "base64"));
|
|
214
|
+
}
|
|
215
|
+
validate(value) {
|
|
216
|
+
return value instanceof Uint8Array;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
class JsonType extends FieldType {
|
|
221
|
+
_type = "json";
|
|
222
|
+
_tsType;
|
|
223
|
+
serialize(value) {
|
|
224
|
+
return value;
|
|
225
|
+
}
|
|
226
|
+
deserialize(value) {
|
|
227
|
+
return value;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
class EnumType extends FieldType {
|
|
232
|
+
values;
|
|
233
|
+
_type = "enum";
|
|
234
|
+
_tsType;
|
|
235
|
+
constructor(values) {
|
|
236
|
+
super();
|
|
237
|
+
this.values = values;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
class ObjectType extends FieldType {
|
|
242
|
+
_type = "object";
|
|
243
|
+
_tsType;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
class ArrayType extends FieldType {
|
|
247
|
+
itemType;
|
|
248
|
+
_type = "array";
|
|
249
|
+
_tsType;
|
|
250
|
+
constructor(itemType) {
|
|
251
|
+
super();
|
|
252
|
+
this.itemType = itemType;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
class CustomType extends FieldType {
|
|
257
|
+
definition;
|
|
258
|
+
_type = "custom";
|
|
259
|
+
_tsType;
|
|
260
|
+
constructor(definition) {
|
|
261
|
+
super();
|
|
262
|
+
this.definition = definition;
|
|
263
|
+
}
|
|
264
|
+
serialize(value) {
|
|
265
|
+
if (this.definition.validate && !this.definition.validate(value)) {
|
|
266
|
+
throw new Error(`Validation failed for custom type: ${this.definition.name}`);
|
|
267
|
+
}
|
|
268
|
+
return this.definition.serialize(value);
|
|
269
|
+
}
|
|
270
|
+
deserialize(value) {
|
|
271
|
+
return this.definition.deserialize(value);
|
|
272
|
+
}
|
|
273
|
+
validate(value) {
|
|
274
|
+
return this.definition.validate ? this.definition.validate(value) : true;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
class HasOneType extends FieldType {
|
|
278
|
+
target;
|
|
279
|
+
foreignKey;
|
|
280
|
+
_type = "hasOne";
|
|
281
|
+
_tsType;
|
|
282
|
+
_relationKind = "hasOne";
|
|
283
|
+
constructor(target, foreignKey) {
|
|
284
|
+
super();
|
|
285
|
+
this.target = target;
|
|
286
|
+
this.foreignKey = foreignKey;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
class HasManyType extends FieldType {
|
|
291
|
+
target;
|
|
292
|
+
foreignKey;
|
|
293
|
+
_type = "hasMany";
|
|
294
|
+
_tsType;
|
|
295
|
+
_relationKind = "hasMany";
|
|
296
|
+
constructor(target, foreignKey) {
|
|
297
|
+
super();
|
|
298
|
+
this.target = target;
|
|
299
|
+
this.foreignKey = foreignKey;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
class BelongsToType extends FieldType {
|
|
304
|
+
target;
|
|
305
|
+
foreignKey;
|
|
306
|
+
_type = "belongsTo";
|
|
307
|
+
_tsType;
|
|
308
|
+
_relationKind = "belongsTo";
|
|
309
|
+
constructor(target, foreignKey) {
|
|
310
|
+
super();
|
|
311
|
+
this.target = target;
|
|
312
|
+
this.foreignKey = foreignKey;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
class LazyOneType extends FieldType {
|
|
317
|
+
targetRef;
|
|
318
|
+
_type = "lazyOne";
|
|
319
|
+
_tsType;
|
|
320
|
+
_relationKind = "one";
|
|
321
|
+
constructor(targetRef) {
|
|
322
|
+
super();
|
|
323
|
+
this.targetRef = targetRef;
|
|
324
|
+
}
|
|
325
|
+
getTarget() {
|
|
326
|
+
return this.targetRef();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
class LazyManyType extends FieldType {
|
|
331
|
+
targetRef;
|
|
332
|
+
_type = "lazyMany";
|
|
333
|
+
_tsType;
|
|
334
|
+
_relationKind = "many";
|
|
335
|
+
constructor(targetRef) {
|
|
336
|
+
super();
|
|
337
|
+
this.targetRef = targetRef;
|
|
338
|
+
}
|
|
339
|
+
getTarget() {
|
|
340
|
+
return this.targetRef();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
var t = {
|
|
344
|
+
id: () => new IdType,
|
|
345
|
+
string: () => new StringType,
|
|
346
|
+
int: () => new IntType,
|
|
347
|
+
float: () => new FloatType,
|
|
348
|
+
boolean: () => new BooleanType,
|
|
349
|
+
datetime: () => new DateTimeType,
|
|
350
|
+
date: () => new DateType,
|
|
351
|
+
decimal: () => new DecimalType,
|
|
352
|
+
bigint: () => new BigIntType,
|
|
353
|
+
bytes: () => new BytesType,
|
|
354
|
+
json: () => new JsonType,
|
|
355
|
+
enum: (values) => new EnumType(values),
|
|
356
|
+
object: () => new ObjectType,
|
|
357
|
+
array: (itemType) => new ArrayType(itemType),
|
|
358
|
+
custom: (definition) => new CustomType(definition),
|
|
359
|
+
hasOne: (target) => new HasOneType(target),
|
|
360
|
+
hasMany: (target) => new HasManyType(target),
|
|
361
|
+
belongsTo: (target) => new BelongsToType(target),
|
|
362
|
+
one: (targetRef) => new LazyOneType(targetRef),
|
|
363
|
+
many: (targetRef) => new LazyManyType(targetRef)
|
|
364
|
+
};
|
|
365
|
+
function createContextualField(field) {
|
|
366
|
+
const wrapper = {
|
|
367
|
+
field,
|
|
368
|
+
resolve(fn) {
|
|
369
|
+
return field.resolve(fn);
|
|
370
|
+
},
|
|
371
|
+
subscribe(fn) {
|
|
372
|
+
return field.subscribe(fn);
|
|
373
|
+
},
|
|
374
|
+
nullable() {
|
|
375
|
+
return createContextualField(field.nullable());
|
|
376
|
+
},
|
|
377
|
+
optional() {
|
|
378
|
+
return createContextualField(field.optional());
|
|
379
|
+
},
|
|
380
|
+
default(value) {
|
|
381
|
+
return createContextualField(field.default(value));
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
return Object.assign(Object.create(field), wrapper);
|
|
385
|
+
}
|
|
386
|
+
function createTypeBuilder() {
|
|
387
|
+
return {
|
|
388
|
+
id: () => createContextualField(new IdType),
|
|
389
|
+
string: () => createContextualField(new StringType),
|
|
390
|
+
int: () => createContextualField(new IntType),
|
|
391
|
+
float: () => createContextualField(new FloatType),
|
|
392
|
+
boolean: () => createContextualField(new BooleanType),
|
|
393
|
+
datetime: () => createContextualField(new DateTimeType),
|
|
394
|
+
date: () => createContextualField(new DateType),
|
|
395
|
+
decimal: () => createContextualField(new DecimalType),
|
|
396
|
+
bigint: () => createContextualField(new BigIntType),
|
|
397
|
+
bytes: () => createContextualField(new BytesType),
|
|
398
|
+
json: () => createContextualField(new ObjectType),
|
|
399
|
+
enum: (values) => createContextualField(new EnumType(values)),
|
|
400
|
+
object: () => createContextualField(new ObjectType),
|
|
401
|
+
array: (itemType) => createContextualField(new ArrayType(itemType)),
|
|
402
|
+
custom: (definition) => createContextualField(new CustomType(definition)),
|
|
403
|
+
hasOne: (target) => createContextualField(new HasOneType(target)),
|
|
404
|
+
hasMany: (target) => createContextualField(new HasManyType(target)),
|
|
405
|
+
belongsTo: (target) => createContextualField(new BelongsToType(target)),
|
|
406
|
+
one: (targetRef) => createContextualField(new LazyOneType(targetRef)),
|
|
407
|
+
many: (targetRef) => createContextualField(new LazyManyType(targetRef))
|
|
408
|
+
};
|
|
409
|
+
}
|
|
8
410
|
var ENTITY_SYMBOL = Symbol("lens:entity");
|
|
411
|
+
function defineEntity(nameOrFields, maybeFieldsOrBuilder) {
|
|
412
|
+
if (typeof nameOrFields === "object" && maybeFieldsOrBuilder === undefined) {
|
|
413
|
+
const fields2 = nameOrFields;
|
|
414
|
+
return createEntityDef(undefined, fields2);
|
|
415
|
+
}
|
|
416
|
+
const name = nameOrFields;
|
|
417
|
+
if (maybeFieldsOrBuilder === undefined) {
|
|
418
|
+
return new EntityBuilder_(name);
|
|
419
|
+
}
|
|
420
|
+
if (typeof maybeFieldsOrBuilder === "function") {
|
|
421
|
+
const builder = maybeFieldsOrBuilder;
|
|
422
|
+
const fields2 = builder(t);
|
|
423
|
+
return createEntityDef(name, fields2);
|
|
424
|
+
}
|
|
425
|
+
const fields = maybeFieldsOrBuilder;
|
|
426
|
+
return createEntityDef(name, fields);
|
|
427
|
+
}
|
|
428
|
+
function createEntityDef(name, fields) {
|
|
429
|
+
return {
|
|
430
|
+
[ENTITY_SYMBOL]: true,
|
|
431
|
+
_name: name,
|
|
432
|
+
fields,
|
|
433
|
+
"~entity": {
|
|
434
|
+
name,
|
|
435
|
+
type: undefined
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
var entity2 = Object.assign(defineEntity, (name) => new EntityBuilder_(name));
|
|
440
|
+
|
|
441
|
+
class EntityBuilder_ {
|
|
442
|
+
_name;
|
|
443
|
+
constructor(_name) {
|
|
444
|
+
this._name = _name;
|
|
445
|
+
}
|
|
446
|
+
define(builder) {
|
|
447
|
+
const contextualBuilder = createTypeBuilder();
|
|
448
|
+
const fields = builder(contextualBuilder);
|
|
449
|
+
return createEntityDef(this._name, fields);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
9
452
|
var OPTIMISTIC_PLUGIN_SYMBOL = Symbol.for("lens:optimistic-plugin");
|
|
10
453
|
var DEFAULT_OPERATION_LOG_CONFIG = {
|
|
11
454
|
maxEntries: 1e4,
|
|
@@ -979,8 +1422,8 @@ class SubscriptionRegistry {
|
|
|
979
1422
|
}
|
|
980
1423
|
}
|
|
981
1424
|
}
|
|
982
|
-
getByEntity(
|
|
983
|
-
const entityKey = `${
|
|
1425
|
+
getByEntity(entity3, entityId) {
|
|
1426
|
+
const entityKey = `${entity3}:${entityId}`;
|
|
984
1427
|
const ids = this.entityIndex.get(entityKey);
|
|
985
1428
|
if (!ids)
|
|
986
1429
|
return [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sylphx/lens-solid",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.6",
|
|
4
4
|
"description": "SolidJS bindings for Lens API framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"author": "SylphxAI",
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@sylphx/lens-client": "^2.4.
|
|
35
|
-
"@sylphx/lens-core": "^2.
|
|
34
|
+
"@sylphx/lens-client": "^2.4.4",
|
|
35
|
+
"@sylphx/lens-core": "^2.5.0"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"solid-js": ">=1.8.0"
|