kodo-core 0.0.1

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.
@@ -0,0 +1,969 @@
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if(typeof define === 'function' && define.amd)
5
+ define("kodo-core", [], factory);
6
+ else if(typeof exports === 'object')
7
+ exports["kodo-core"] = factory();
8
+ else
9
+ root["kodo-core"] = factory();
10
+ })(global, () => {
11
+ return /******/ (() => { // webpackBootstrap
12
+ /******/ "use strict";
13
+ /******/ var __webpack_modules__ = ({
14
+
15
+ /***/ "./src/expressions/_defines.ts":
16
+ /*!*************************************!*\
17
+ !*** ./src/expressions/_defines.ts ***!
18
+ \*************************************/
19
+ /***/ ((__unused_webpack_module, exports) => {
20
+
21
+
22
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
23
+ exports.convertLP2RO = exports.revertLinkOperator = void 0;
24
+ function revertLinkOperator(op) {
25
+ switch (op) {
26
+ case ">":
27
+ return "<";
28
+ case ">=":
29
+ return "<=";
30
+ case "<":
31
+ return ">";
32
+ case "<=":
33
+ return ">=";
34
+ case "->": //single op
35
+ return null;
36
+ default:
37
+ return op;
38
+ }
39
+ }
40
+ exports.revertLinkOperator = revertLinkOperator;
41
+ function convertLP2RO(op) {
42
+ switch (op) {
43
+ case "->": //single op
44
+ return "==";
45
+ default:
46
+ return op;
47
+ }
48
+ }
49
+ exports.convertLP2RO = convertLP2RO;
50
+
51
+
52
+ /***/ }),
53
+
54
+ /***/ "./src/expressions/index.ts":
55
+ /*!**********************************!*\
56
+ !*** ./src/expressions/index.ts ***!
57
+ \**********************************/
58
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
59
+
60
+
61
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
62
+ if (k2 === undefined) k2 = k;
63
+ var desc = Object.getOwnPropertyDescriptor(m, k);
64
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
65
+ desc = { enumerable: true, get: function() { return m[k]; } };
66
+ }
67
+ Object.defineProperty(o, k2, desc);
68
+ }) : (function(o, m, k, k2) {
69
+ if (k2 === undefined) k2 = k;
70
+ o[k2] = m[k];
71
+ }));
72
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
73
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
74
+ };
75
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
76
+ __exportStar(__webpack_require__(/*! ./_defines */ "./src/expressions/_defines.ts"), exports);
77
+ __exportStar(__webpack_require__(/*! ./linkExpression */ "./src/expressions/linkExpression.ts"), exports);
78
+ __exportStar(__webpack_require__(/*! ./queryExpression */ "./src/expressions/queryExpression.ts"), exports);
79
+
80
+
81
+ /***/ }),
82
+
83
+ /***/ "./src/expressions/linkExpression.ts":
84
+ /*!*******************************************!*\
85
+ !*** ./src/expressions/linkExpression.ts ***!
86
+ \*******************************************/
87
+ /***/ ((__unused_webpack_module, exports) => {
88
+
89
+
90
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
91
+ exports.isLinkExpressionKey = void 0;
92
+ function isLinkExpressionKey(key) {
93
+ return (key === "$with" || key === "$where");
94
+ }
95
+ exports.isLinkExpressionKey = isLinkExpressionKey;
96
+
97
+
98
+ /***/ }),
99
+
100
+ /***/ "./src/expressions/queryExpression.ts":
101
+ /*!********************************************!*\
102
+ !*** ./src/expressions/queryExpression.ts ***!
103
+ \********************************************/
104
+ /***/ ((__unused_webpack_module, exports) => {
105
+
106
+
107
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
108
+ exports.isQueryExpressionKey = void 0;
109
+ function isQueryExpressionKey(key) {
110
+ return (key === "$with" || key === "$where");
111
+ }
112
+ exports.isQueryExpressionKey = isQueryExpressionKey;
113
+
114
+
115
+ /***/ }),
116
+
117
+ /***/ "./src/index.ts":
118
+ /*!**********************!*\
119
+ !*** ./src/index.ts ***!
120
+ \**********************/
121
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
122
+
123
+
124
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
125
+ if (k2 === undefined) k2 = k;
126
+ var desc = Object.getOwnPropertyDescriptor(m, k);
127
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
128
+ desc = { enumerable: true, get: function() { return m[k]; } };
129
+ }
130
+ Object.defineProperty(o, k2, desc);
131
+ }) : (function(o, m, k, k2) {
132
+ if (k2 === undefined) k2 = k;
133
+ o[k2] = m[k];
134
+ }));
135
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
136
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
137
+ };
138
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
139
+ __exportStar(__webpack_require__(/*! ./providers */ "./src/providers/index.ts"), exports);
140
+ __exportStar(__webpack_require__(/*! ./kodo */ "./src/kodo.ts"), exports);
141
+ __exportStar(__webpack_require__(/*! ./nodes/ */ "./src/nodes/index.ts"), exports);
142
+ __exportStar(__webpack_require__(/*! ./expressions */ "./src/expressions/index.ts"), exports);
143
+ __exportStar(__webpack_require__(/*! ./translators */ "./src/translators/index.ts"), exports);
144
+ __exportStar(__webpack_require__(/*! ./utils */ "./src/utils/index.ts"), exports);
145
+
146
+
147
+ /***/ }),
148
+
149
+ /***/ "./src/kodo.ts":
150
+ /*!*********************!*\
151
+ !*** ./src/kodo.ts ***!
152
+ \*********************/
153
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
154
+
155
+
156
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
157
+ exports.Kodo = void 0;
158
+ const nodes_1 = __webpack_require__(/*! ./nodes */ "./src/nodes/index.ts");
159
+ const utils_1 = __webpack_require__(/*! ./utils */ "./src/utils/index.ts");
160
+ //It's bulky, but it's powerful
161
+ class Kodo {
162
+ getDefaultOption(opt) {
163
+ let defaultOpt = {
164
+ cache: true,
165
+ recursion: true,
166
+ tierLimit: 0
167
+ };
168
+ let theOpt = Object.assign(defaultOpt, opt || {});
169
+ return theOpt;
170
+ }
171
+ constructor(name, opt) {
172
+ this.name = name;
173
+ this.translators = [];
174
+ this.providers = [];
175
+ this.nodes = new nodes_1.DataNodeMap();
176
+ this.opt = this.getDefaultOption(opt);
177
+ }
178
+ setOption(opt) {
179
+ this.opt = Object.assign(this.opt, opt);
180
+ }
181
+ linkExpression(expression, params) {
182
+ //TODO here:
183
+ //this.expressions.push(expression);
184
+ }
185
+ registerTranslator(translator) {
186
+ this.translators.push(translator);
187
+ }
188
+ registerProvider(provider) {
189
+ this.providers.push(provider);
190
+ }
191
+ loopExplore(startup, exlpreOpt) {
192
+ if (!this.opt.recursion) {
193
+ if (this.nodes.existNS(startup.$ns)) {
194
+ return;
195
+ }
196
+ }
197
+ if (this.opt.tierLimit) {
198
+ if (exlpreOpt.tierLimit >= this.opt.tierLimit) {
199
+ return;
200
+ }
201
+ }
202
+ //let dNodes: DataNode<any>[] = [];
203
+ let foundList = [];
204
+ //1. load data from provider
205
+ this.providers.forEach(p => {
206
+ //1. query
207
+ let founds = p.lookup(startup);
208
+ founds.forEach(f => {
209
+ let added = this.nodes.tryAdd(f);
210
+ if (added) {
211
+ foundList.push(f);
212
+ }
213
+ });
214
+ });
215
+ if (foundList.length <= 0) {
216
+ return;
217
+ }
218
+ foundList.forEach(dn => {
219
+ this.translators.forEach(t => {
220
+ if (!t.match(dn)) {
221
+ return;
222
+ }
223
+ //2. translate
224
+ let qn = t.translate(dn);
225
+ //3. continue search
226
+ qn.forEach(q => {
227
+ this.loopExplore(q, {
228
+ tierLimit: exlpreOpt.tierLimit + 1
229
+ });
230
+ });
231
+ });
232
+ });
233
+ }
234
+ explore(startup) {
235
+ if (!this.opt.cache) {
236
+ this.nodes.clear();
237
+ }
238
+ if (!startup.$id) {
239
+ let qnid = (0, utils_1.generateHashCode)(startup);
240
+ startup.$id = `qn-${startup.$ns}-$startup-${qnid}`;
241
+ }
242
+ this.loopExplore(startup, {
243
+ tierLimit: 0
244
+ });
245
+ return this.nodes.getList();
246
+ }
247
+ }
248
+ exports.Kodo = Kodo;
249
+
250
+
251
+ /***/ }),
252
+
253
+ /***/ "./src/nodes/dataNode.ts":
254
+ /*!*******************************!*\
255
+ !*** ./src/nodes/dataNode.ts ***!
256
+ \*******************************/
257
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
258
+
259
+
260
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
261
+ exports.DataNodeMap = exports.DataNode = void 0;
262
+ const nodeBase_1 = __webpack_require__(/*! ./nodeBase */ "./src/nodes/nodeBase.ts");
263
+ /*
264
+ export type DataNodeObject<T> = {
265
+ [P in keyof T]?: {
266
+ //$expression?: LinkExpression;
267
+ $from?: QueryNode<T>;
268
+ $val: T[P];
269
+ };
270
+ };
271
+ */
272
+ class DataNode extends nodeBase_1.NodeBase {
273
+ }
274
+ exports.DataNode = DataNode;
275
+ class DataNodeMap {
276
+ constructor() {
277
+ this.nodes = new Map();
278
+ this.ns = new Map();
279
+ }
280
+ tryAdd(node) {
281
+ let nodeid = `${node.$ns}-${node.$id}`;
282
+ //do not add if exist.
283
+ if (this.nodes.get(nodeid)) {
284
+ return false;
285
+ }
286
+ //add node map
287
+ this.nodes.set(nodeid, node);
288
+ //add ns map
289
+ let nodeNS = this.ns.get(node.$ns);
290
+ if (!nodeNS) {
291
+ nodeNS = [];
292
+ this.ns.set(node.$ns, nodeNS);
293
+ }
294
+ nodeNS.push(node);
295
+ return true;
296
+ }
297
+ getList() {
298
+ return Array.from(this.nodes.values());
299
+ }
300
+ clear() {
301
+ this.nodes.clear();
302
+ this.ns.clear();
303
+ }
304
+ existNS(ns) {
305
+ let rtn = this.ns.get(ns);
306
+ return !!rtn;
307
+ }
308
+ }
309
+ exports.DataNodeMap = DataNodeMap;
310
+
311
+
312
+ /***/ }),
313
+
314
+ /***/ "./src/nodes/index.ts":
315
+ /*!****************************!*\
316
+ !*** ./src/nodes/index.ts ***!
317
+ \****************************/
318
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
319
+
320
+
321
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
322
+ if (k2 === undefined) k2 = k;
323
+ var desc = Object.getOwnPropertyDescriptor(m, k);
324
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
325
+ desc = { enumerable: true, get: function() { return m[k]; } };
326
+ }
327
+ Object.defineProperty(o, k2, desc);
328
+ }) : (function(o, m, k, k2) {
329
+ if (k2 === undefined) k2 = k;
330
+ o[k2] = m[k];
331
+ }));
332
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
333
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
334
+ };
335
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
336
+ __exportStar(__webpack_require__(/*! ./nodeBase */ "./src/nodes/nodeBase.ts"), exports);
337
+ __exportStar(__webpack_require__(/*! ./dataNode */ "./src/nodes/dataNode.ts"), exports);
338
+ __exportStar(__webpack_require__(/*! ./queryNode */ "./src/nodes/queryNode.ts"), exports);
339
+ __exportStar(__webpack_require__(/*! ./linkNode */ "./src/nodes/linkNode.ts"), exports);
340
+
341
+
342
+ /***/ }),
343
+
344
+ /***/ "./src/nodes/linkNode.ts":
345
+ /*!*******************************!*\
346
+ !*** ./src/nodes/linkNode.ts ***!
347
+ \*******************************/
348
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
349
+
350
+
351
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
352
+ exports.LinkNode = void 0;
353
+ const nodeBase_1 = __webpack_require__(/*! ./nodeBase */ "./src/nodes/nodeBase.ts");
354
+ class LinkNode extends nodeBase_1.NodeBase {
355
+ static revertExpression(origin) {
356
+ var _a;
357
+ let rtn = {
358
+ $from: origin.$to,
359
+ $to: origin.$from,
360
+ $with: origin.$with,
361
+ $where: []
362
+ };
363
+ //when ==, means A->B && B->A
364
+ if (origin.$op === "==") {
365
+ rtn.$op = origin.$op;
366
+ (_a = origin.$where) === null || _a === void 0 ? void 0 : _a.forEach(m => {
367
+ let r = this.revertExpression(m);
368
+ if (r) {
369
+ rtn.$where.push(r);
370
+ }
371
+ });
372
+ }
373
+ return rtn;
374
+ }
375
+ static revert(node) {
376
+ let rExp = LinkNode.revertExpression(node.expression);
377
+ if (!rExp) {
378
+ return null;
379
+ }
380
+ let rtn = new LinkNode();
381
+ rtn.$id = `${node.$id}-r`;
382
+ rtn.$ns = node.$ns;
383
+ rtn.$fromNS = node.$toNS;
384
+ rtn.$toNS = node.$fromNS;
385
+ rtn.expression = rExp;
386
+ return rtn;
387
+ }
388
+ }
389
+ exports.LinkNode = LinkNode;
390
+
391
+
392
+ /***/ }),
393
+
394
+ /***/ "./src/nodes/nodeBase.ts":
395
+ /*!*******************************!*\
396
+ !*** ./src/nodes/nodeBase.ts ***!
397
+ \*******************************/
398
+ /***/ ((__unused_webpack_module, exports) => {
399
+
400
+
401
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
402
+ exports.NodeBase = void 0;
403
+ class NodeBase {
404
+ }
405
+ exports.NodeBase = NodeBase;
406
+
407
+
408
+ /***/ }),
409
+
410
+ /***/ "./src/nodes/queryNode.ts":
411
+ /*!********************************!*\
412
+ !*** ./src/nodes/queryNode.ts ***!
413
+ \********************************/
414
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
415
+
416
+
417
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
418
+ exports.QueryNode = void 0;
419
+ const nodeBase_1 = __webpack_require__(/*! ./nodeBase */ "./src/nodes/nodeBase.ts");
420
+ /*
421
+ export type NNodeValueType = Date | string | number | null;
422
+
423
+ export class NNodeValue {
424
+ [prop: string]: NNodeValueType;
425
+ }
426
+ */
427
+ class QueryNode extends nodeBase_1.NodeBase {
428
+ }
429
+ exports.QueryNode = QueryNode;
430
+
431
+
432
+ /***/ }),
433
+
434
+ /***/ "./src/providers/iDataProvider.ts":
435
+ /*!****************************************!*\
436
+ !*** ./src/providers/iDataProvider.ts ***!
437
+ \****************************************/
438
+ /***/ ((__unused_webpack_module, exports) => {
439
+
440
+
441
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
442
+
443
+
444
+ /***/ }),
445
+
446
+ /***/ "./src/providers/index.ts":
447
+ /*!********************************!*\
448
+ !*** ./src/providers/index.ts ***!
449
+ \********************************/
450
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
451
+
452
+
453
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
454
+ if (k2 === undefined) k2 = k;
455
+ var desc = Object.getOwnPropertyDescriptor(m, k);
456
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
457
+ desc = { enumerable: true, get: function() { return m[k]; } };
458
+ }
459
+ Object.defineProperty(o, k2, desc);
460
+ }) : (function(o, m, k, k2) {
461
+ if (k2 === undefined) k2 = k;
462
+ o[k2] = m[k];
463
+ }));
464
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
465
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
466
+ };
467
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
468
+ __exportStar(__webpack_require__(/*! ./iDataProvider */ "./src/providers/iDataProvider.ts"), exports);
469
+ __exportStar(__webpack_require__(/*! ./memoryProvider */ "./src/providers/memoryProvider.ts"), exports);
470
+
471
+
472
+ /***/ }),
473
+
474
+ /***/ "./src/providers/memoryProvider.ts":
475
+ /*!*****************************************!*\
476
+ !*** ./src/providers/memoryProvider.ts ***!
477
+ \*****************************************/
478
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
479
+
480
+
481
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
482
+ exports.MemoryProvider = exports.MemoryData = void 0;
483
+ const nodes_1 = __webpack_require__(/*! ../nodes */ "./src/nodes/index.ts");
484
+ const expressions_1 = __webpack_require__(/*! ../expressions */ "./src/expressions/index.ts");
485
+ const utils_1 = __webpack_require__(/*! ../utils */ "./src/utils/index.ts");
486
+ class MemoryData {
487
+ }
488
+ exports.MemoryData = MemoryData;
489
+ class MemoryProvider {
490
+ constructor() {
491
+ this.objs = [];
492
+ }
493
+ add(namespace, obj) {
494
+ this.objs.push({
495
+ ns: namespace,
496
+ val: obj
497
+ });
498
+ }
499
+ copmareNull(op, val, dataVal) {
500
+ switch (op) {
501
+ case "==":
502
+ return (0, utils_1.isNullOrUndefined)(dataVal);
503
+ case "!=":
504
+ return !(0, utils_1.isNullOrUndefined)(dataVal);
505
+ case "===":
506
+ return (dataVal === val);
507
+ case "!==":
508
+ return (dataVal !== val);
509
+ default:
510
+ return false;
511
+ }
512
+ }
513
+ isMatchData(key, op, opVal, data) {
514
+ let dataVal = data[key];
515
+ if ((0, utils_1.isNullOrUndefined)(opVal)) {
516
+ return this.copmareNull(op, opVal, dataVal);
517
+ }
518
+ op || (op = "==");
519
+ switch (op) {
520
+ case "==":
521
+ return (dataVal == opVal);
522
+ case "===":
523
+ return (dataVal === opVal);
524
+ case "!=":
525
+ return (dataVal != opVal);
526
+ case "!==":
527
+ return (dataVal !== opVal);
528
+ case ">":
529
+ return (dataVal > opVal);
530
+ case ">=":
531
+ return (dataVal >= opVal);
532
+ case "<":
533
+ return (dataVal < opVal);
534
+ case "<=":
535
+ return (dataVal <= opVal);
536
+ case "IN":
537
+ if (opVal instanceof Array) {
538
+ return opVal.some(m => m == dataVal);
539
+ }
540
+ return false;
541
+ case "!IN":
542
+ if (opVal instanceof Array) {
543
+ return !opVal.some(m => m == dataVal);
544
+ }
545
+ return false;
546
+ default:
547
+ break;
548
+ }
549
+ throw { key: "MemoryProvider.isMatchData", exp: "Not implemented yet." };
550
+ }
551
+ assumeMatchList(matchList, bVal) {
552
+ let rtn = "defer";
553
+ matchList.every(m => {
554
+ //continue
555
+ if (m === "defer") {
556
+ return true;
557
+ }
558
+ if (m === bVal) {
559
+ rtn = bVal;
560
+ return false; //break;
561
+ }
562
+ else {
563
+ rtn = !bVal;
564
+ }
565
+ //continue;
566
+ return true;
567
+ });
568
+ return rtn;
569
+ }
570
+ isAllMatchWith(con, matchList) {
571
+ if (matchList.length <= 0) {
572
+ return "defer";
573
+ }
574
+ if (con === "&&") {
575
+ /*
576
+ let rtn: MatchResult = "defer";
577
+ matchList.every(m => {
578
+ if (m === false) {
579
+ rtn = false;
580
+ return false; //break;
581
+ }
582
+
583
+ if (m === true) {
584
+ rtn = true;
585
+ }
586
+
587
+ //continue;
588
+ return true;
589
+ });
590
+ */
591
+ let rtn = this.assumeMatchList(matchList, false);
592
+ return rtn;
593
+ }
594
+ else if (con === "||") {
595
+ /*
596
+ let rtn: MatchResult = "defer";
597
+ matchList.every(m => {
598
+ if (m === true) {
599
+ rtn = true;
600
+ return false; //break;
601
+ }
602
+
603
+ if (m === false) {
604
+ rtn = false;
605
+ }
606
+
607
+ //continue;
608
+ return true;
609
+ });
610
+ */
611
+ let rtn = this.assumeMatchList(matchList, true);
612
+ return rtn;
613
+ }
614
+ else {
615
+ throw { key: "MemoryProvider.isMatchWith", exp: `QueryCondition ${con} not allowed.` };
616
+ }
617
+ }
618
+ matchOnData(where, data) {
619
+ let con = where.$with || "&&";
620
+ let isAnd = (con === "&&");
621
+ let matchList = [];
622
+ for (let key in where) {
623
+ if ((0, expressions_1.isQueryExpressionKey)(key)) {
624
+ continue;
625
+ }
626
+ let val = where[key];
627
+ let match = false;
628
+ if (typeof val === "object") {
629
+ let theVal = val;
630
+ match = this.isMatchData(key, theVal.$op, theVal.$val, data);
631
+ }
632
+ else {
633
+ match = this.isMatchData(key, "==", val, data);
634
+ }
635
+ matchList.push(match);
636
+ if (!match && isAnd) {
637
+ return false;
638
+ }
639
+ }
640
+ return this.isAllMatchWith(con, matchList);
641
+ }
642
+ match(expression, data) {
643
+ var _a;
644
+ let matchList = [];
645
+ let con = expression.$with || "&&";
646
+ let isAnd = (con === "&&");
647
+ let matched = this.matchOnData(expression, data);
648
+ if (!matched && isAnd) {
649
+ return false;
650
+ }
651
+ matchList.push(matched);
652
+ if (((_a = expression.$where) === null || _a === void 0 ? void 0 : _a.length) > 0) {
653
+ expression.$where.every(w => {
654
+ let match = this.match(w, data);
655
+ matchList.push(match);
656
+ //break:
657
+ if (!matched && isAnd) {
658
+ return false;
659
+ }
660
+ return true;
661
+ });
662
+ }
663
+ let rtn = this.isAllMatchWith(con, matchList);
664
+ return rtn;
665
+ }
666
+ lookup(qNode) {
667
+ //find match
668
+ let list = this.objs.filter(m => {
669
+ if (qNode.$ns !== m.ns) {
670
+ return false;
671
+ }
672
+ let rtn = this.match(qNode.expression, m.val);
673
+ //regards the final "defer" as false
674
+ if (rtn === "defer") {
675
+ return false;
676
+ }
677
+ else {
678
+ return rtn;
679
+ }
680
+ });
681
+ //convert to data node
682
+ let rtn = list.map(m => {
683
+ var _a;
684
+ let node = new nodes_1.DataNode();
685
+ node.$fromQN = qNode;
686
+ node.$ns = m.ns;
687
+ node.data = m.val;
688
+ node.$id = ((_a = m.val) === null || _a === void 0 ? void 0 : _a.id) || (0, utils_1.generateHashCode)(m.val); //TODO here: use hashcode to generate?
689
+ return node;
690
+ });
691
+ return rtn;
692
+ }
693
+ }
694
+ exports.MemoryProvider = MemoryProvider;
695
+
696
+
697
+ /***/ }),
698
+
699
+ /***/ "./src/translators/iNodeTranslator.ts":
700
+ /*!********************************************!*\
701
+ !*** ./src/translators/iNodeTranslator.ts ***!
702
+ \********************************************/
703
+ /***/ ((__unused_webpack_module, exports) => {
704
+
705
+
706
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
707
+
708
+
709
+ /***/ }),
710
+
711
+ /***/ "./src/translators/index.ts":
712
+ /*!**********************************!*\
713
+ !*** ./src/translators/index.ts ***!
714
+ \**********************************/
715
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
716
+
717
+
718
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
719
+ if (k2 === undefined) k2 = k;
720
+ var desc = Object.getOwnPropertyDescriptor(m, k);
721
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
722
+ desc = { enumerable: true, get: function() { return m[k]; } };
723
+ }
724
+ Object.defineProperty(o, k2, desc);
725
+ }) : (function(o, m, k, k2) {
726
+ if (k2 === undefined) k2 = k;
727
+ o[k2] = m[k];
728
+ }));
729
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
730
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
731
+ };
732
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
733
+ __exportStar(__webpack_require__(/*! ./iNodeTranslator */ "./src/translators/iNodeTranslator.ts"), exports);
734
+ __exportStar(__webpack_require__(/*! ./nodeTranslator */ "./src/translators/nodeTranslator.ts"), exports);
735
+
736
+
737
+ /***/ }),
738
+
739
+ /***/ "./src/translators/nodeTranslator.ts":
740
+ /*!*******************************************!*\
741
+ !*** ./src/translators/nodeTranslator.ts ***!
742
+ \*******************************************/
743
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
744
+
745
+
746
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
747
+ exports.NodeTranslator = void 0;
748
+ const expressions_1 = __webpack_require__(/*! ../expressions */ "./src/expressions/index.ts");
749
+ const nodes_1 = __webpack_require__(/*! ../nodes */ "./src/nodes/index.ts");
750
+ const utils_1 = __webpack_require__(/*! ../utils */ "./src/utils/index.ts");
751
+ //DataNode + LinkNode => QueryNode
752
+ class NodeTranslator {
753
+ constructor() {
754
+ this.linkNodes = [];
755
+ }
756
+ //always match for use.
757
+ match(dn) {
758
+ return true;
759
+ }
760
+ link(ln) {
761
+ if (!ln.$id) {
762
+ let lnid = (0, utils_1.generateHashCode)(ln);
763
+ ln.$id = `ln-${ln.$fromNS}-${ln.$toNS}-${lnid}`;
764
+ }
765
+ this.linkNodes.push(ln);
766
+ let revertLink = nodes_1.LinkNode.revert(ln);
767
+ if (revertLink) {
768
+ this.linkNodes.push(revertLink);
769
+ }
770
+ return true;
771
+ }
772
+ tryMapOnData(rtnQE, where, data) {
773
+ var _a;
774
+ let dataVal = data.data[where.$from];
775
+ if (dataVal === undefined) {
776
+ return false;
777
+ }
778
+ let rop = (0, expressions_1.revertLinkOperator)(where.$op);
779
+ if (!rop) {
780
+ return false;
781
+ }
782
+ rtnQE.$with = where.$with;
783
+ rtnQE[_a = where.$to] || (rtnQE[_a] = {});
784
+ rtnQE[where.$to].$op = (0, expressions_1.convertLP2RO)(rop);
785
+ rtnQE[where.$to].$val = dataVal; //TODO here: better strong type?
786
+ }
787
+ tryMap(rtnQE, expression, data) {
788
+ var _a;
789
+ rtnQE.$with = expression.$with;
790
+ this.tryMapOnData(rtnQE, expression, data);
791
+ if (((_a = expression.$where) === null || _a === void 0 ? void 0 : _a.length) > 0) {
792
+ expression.$where.forEach(w => {
793
+ let qeWhere = {};
794
+ qeWhere.$with = w.$with;
795
+ qeWhere.$where = [];
796
+ this.tryMap(qeWhere, w, data);
797
+ rtnQE.$where.push(qeWhere);
798
+ });
799
+ }
800
+ }
801
+ //DataNode + LinkNode => QueryNode
802
+ translate(data) {
803
+ let rtn = [];
804
+ this.linkNodes.forEach(ln => {
805
+ if (ln.$fromNS !== data.$ns) {
806
+ return;
807
+ }
808
+ let qn = new nodes_1.QueryNode();
809
+ qn.$id = `qn-${data.$ns}-${data.$id}-${ln.$id}`;
810
+ qn.$ns = ln.$toNS;
811
+ qn.$fromDN = data;
812
+ qn.$fromLN = ln;
813
+ qn.expression = {};
814
+ qn.expression.$where = [];
815
+ this.tryMap(qn.expression, ln.expression, data);
816
+ rtn.push(qn);
817
+ });
818
+ return rtn;
819
+ }
820
+ }
821
+ exports.NodeTranslator = NodeTranslator;
822
+
823
+
824
+ /***/ }),
825
+
826
+ /***/ "./src/utils/hash.ts":
827
+ /*!***************************!*\
828
+ !*** ./src/utils/hash.ts ***!
829
+ \***************************/
830
+ /***/ ((__unused_webpack_module, exports) => {
831
+
832
+
833
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
834
+ exports.generateHashCode = void 0;
835
+ const SEED_DEFAULT = Math.ceil(Math.random() * 100000);
836
+ function objToString(obj) {
837
+ let str = "null";
838
+ let type = typeof obj;
839
+ switch (type) {
840
+ case "undefined":
841
+ str = "undefined";
842
+ break;
843
+ case "string":
844
+ str = obj;
845
+ break;
846
+ case "boolean":
847
+ case "number":
848
+ case "bigint":
849
+ case "function":
850
+ case "symbol":
851
+ str = obj;
852
+ break;
853
+ case "object":
854
+ try {
855
+ obj = obj || null;
856
+ str = JSON.stringify(obj || null);
857
+ }
858
+ catch (e) {
859
+ //swallow exception
860
+ }
861
+ break;
862
+ default:
863
+ break;
864
+ }
865
+ ;
866
+ return str;
867
+ }
868
+ function generateHashCode(obj, opt) {
869
+ //let seed = opt?.seed || Math.ceil(Math.random() * 100000);
870
+ let seed = (opt === null || opt === void 0 ? void 0 : opt.seed) || SEED_DEFAULT;
871
+ let str = objToString(obj);
872
+ let hash = seed;
873
+ for (let i = 0; i < str.length; i++) {
874
+ hash = (hash << 5) - hash + str.charCodeAt(i);
875
+ hash |= 0; //to 32bit integer
876
+ }
877
+ //ensure positive num
878
+ hash = hash & 0x7FFFFFFF;
879
+ //console.warn(hash);
880
+ return hash.toString();
881
+ }
882
+ exports.generateHashCode = generateHashCode;
883
+
884
+
885
+ /***/ }),
886
+
887
+ /***/ "./src/utils/index.ts":
888
+ /*!****************************!*\
889
+ !*** ./src/utils/index.ts ***!
890
+ \****************************/
891
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
892
+
893
+
894
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
895
+ if (k2 === undefined) k2 = k;
896
+ var desc = Object.getOwnPropertyDescriptor(m, k);
897
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
898
+ desc = { enumerable: true, get: function() { return m[k]; } };
899
+ }
900
+ Object.defineProperty(o, k2, desc);
901
+ }) : (function(o, m, k, k2) {
902
+ if (k2 === undefined) k2 = k;
903
+ o[k2] = m[k];
904
+ }));
905
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
906
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
907
+ };
908
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
909
+ __exportStar(__webpack_require__(/*! ./hash */ "./src/utils/hash.ts"), exports);
910
+ __exportStar(__webpack_require__(/*! ./objectUtil */ "./src/utils/objectUtil.ts"), exports);
911
+
912
+
913
+ /***/ }),
914
+
915
+ /***/ "./src/utils/objectUtil.ts":
916
+ /*!*********************************!*\
917
+ !*** ./src/utils/objectUtil.ts ***!
918
+ \*********************************/
919
+ /***/ ((__unused_webpack_module, exports) => {
920
+
921
+
922
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
923
+ exports.isNullOrUndefined = void 0;
924
+ function isNullOrUndefined(obj) {
925
+ return (obj === null || obj === undefined);
926
+ }
927
+ exports.isNullOrUndefined = isNullOrUndefined;
928
+
929
+
930
+ /***/ })
931
+
932
+ /******/ });
933
+ /************************************************************************/
934
+ /******/ // The module cache
935
+ /******/ var __webpack_module_cache__ = {};
936
+ /******/
937
+ /******/ // The require function
938
+ /******/ function __webpack_require__(moduleId) {
939
+ /******/ // Check if module is in cache
940
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
941
+ /******/ if (cachedModule !== undefined) {
942
+ /******/ return cachedModule.exports;
943
+ /******/ }
944
+ /******/ // Create a new module (and put it into the cache)
945
+ /******/ var module = __webpack_module_cache__[moduleId] = {
946
+ /******/ // no module.id needed
947
+ /******/ // no module.loaded needed
948
+ /******/ exports: {}
949
+ /******/ };
950
+ /******/
951
+ /******/ // Execute the module function
952
+ /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
953
+ /******/
954
+ /******/ // Return the exports of the module
955
+ /******/ return module.exports;
956
+ /******/ }
957
+ /******/
958
+ /************************************************************************/
959
+ /******/
960
+ /******/ // startup
961
+ /******/ // Load entry module and return exports
962
+ /******/ // This entry module is referenced by other modules so it can't be inlined
963
+ /******/ var __webpack_exports__ = __webpack_require__("./src/index.ts");
964
+ /******/
965
+ /******/ return __webpack_exports__;
966
+ /******/ })()
967
+ ;
968
+ });
969
+ //# sourceMappingURL=kodo-core.min.js.map