kodo-core 0.0.4 → 0.1.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.
- package/dist/_enums.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +38 -47
- package/dist/kodo-core.min.js +0 -989
- package/dist/kodo-core.min.js.map +0 -1
package/dist/_enums.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class z{$id;$ns}class X extends z{$fromQN;data}class Y{nodes;ns;constructor(){this.nodes=new Map,this.ns=new Map}tryAdd(T){let f=`${T.$ns}-${T.$id}`;if(this.nodes.get(f))return!1;this.nodes.set(f,T);let $=this.ns.get(T.$ns);if(!$)$=[],this.ns.set(T.$ns,$);return $.push(T),!0}getList(){return Array.from(this.nodes.values())}clear(){this.nodes.clear(),this.ns.clear()}existNS(T){return!!this.ns.get(T)}}class Z extends z{$fromDN;$fromLN;expression}class I extends z{$fromNS;$toNS;$type;expression;static revertExpression(T){if(typeof T==="function")return T;let f={$from:T.$to,$to:T.$from,$with:T.$with,$where:[]};if(T.$op==="==")f.$op=T.$op,T.$where?.forEach(($)=>{let F=this.revertExpression($);if(F)f.$where.push(F)});return f}static revert(T){let f=I.revertExpression(T.expression);if(!f)return null;let $=new I;return $.$id=`${T.$id}-r`,$.$type="R",$.$ns=T.$ns,$.$fromNS=T.$toNS,$.$toNS=T.$fromNS,$.expression=f,$}}function x(T){switch(T){case">":return"<";case">=":return"<=";case"<":return">";case"<=":return">=";case"->":return null;default:return T}}function B(T){switch(T){case"->":return"==";default:return T}}function w(T){return T==="$with"||T==="$where"}function K(T){return T==="$with"||T==="$where"}var O=Math.ceil(Math.random()*1e5);function m(T){let f="null";switch(typeof T){case"undefined":f="undefined";break;case"string":f=T;break;case"boolean":case"number":case"bigint":case"function":case"symbol":f=T;break;case"object":try{T=T||null,f=JSON.stringify(T||null)}catch(F){}break;default:break}return f}function G(T,f){let $=f?.seed||O,F=m(T),R=$;for(let r=0;r<F.length;r++)R=(R<<5)-R+F.charCodeAt(r),R|=0;return R=R&2147483647,R.toString()}function S(T){return T===null||T===void 0}class C{ns;val}class D{objs;constructor(){this.objs=[]}add(T,f){this.objs.push({ns:T,val:f})}copmareNull(T,f,$){switch(T){case"==":return S($);case"!=":return!S($);case"===":return $===f;case"!==":return $!==f;default:return!1}}isMatchData(T,f,$,F){let R=F[T];if(S($))return this.copmareNull(f,$,R);switch(f||="==",f){case"==":return R==$;case"===":return R===$;case"!=":return R!=$;case"!==":return R!==$;case">":return R>$;case">=":return R>=$;case"<":return R<$;case"<=":return R<=$;case"IN":if($ instanceof Array)return $.some((r)=>r==R);return!1;case"!IN":if($ instanceof Array)return!$.some((r)=>r==R);return!1;default:break}throw{key:"MemoryProvider.isMatchData",exp:"Not implemented yet."}}assumeMatchList(T,f){let $="defer";return T.every((F)=>{if(F==="defer")return!0;if(F===f)return $=f,!1;else $=!f;return!0}),$}isAllMatchWith(T,f){if(f.length<=0)return"defer";if(T==="&&")return this.assumeMatchList(f,!1);else if(T==="||")return this.assumeMatchList(f,!0);else throw{key:"MemoryProvider.isMatchWith",exp:`QueryCondition ${T} not allowed.`}}matchOnData(T,f){let $=T.$with||"&&",F=$==="&&",R=[];for(let r in T){if(K(r))continue;let _=T[r],A=!1;if(typeof _==="object"){let J=_;A=this.isMatchData(r,J.$op,J.$val,f)}else A=this.isMatchData(r,"==",_,f);if(R.push(A),!A&&F)return!1}return this.isAllMatchWith($,R)}match(T,f){let $=[];if(typeof T==="function")return T(f);let F=T.$with||"&&",R=F==="&&",r=this.matchOnData(T,f);if(!r&&R)return!1;if($.push(r),T.$where?.length>0)T.$where.every((A)=>{let J=this.match(A,f);if($.push(J),!r&&R)return!1;return!0});return this.isAllMatchWith(F,$)}lookup(T){return this.objs.filter((F)=>{if(T.$ns!==F.ns)return!1;let R=this.match(T.expression,F.val);if(R==="defer")return!1;else return R}).map((F)=>{let R=new X;return R.$fromQN=T,R.$ns=F.ns,R.data=F.val,R.$id=F.val?.id||G(F.val),R})}}class H{name;translators;providers;nodes;opt;getDefaultOption(T){return Object.assign({cache:!0,recursion:!0,tierLimit:0},T||{})}constructor(T,f){this.name=T;this.translators=[],this.providers=[],this.nodes=new Y,this.opt=this.getDefaultOption(f)}setOption(T){this.opt=Object.assign(this.opt,T)}linkExpression(T,f){}registerTranslator(T){this.translators.push(T)}registerProvider(T){this.providers.push(T)}loopExplore(T,f){if(!this.opt.recursion){if(this.nodes.existNS(T.$ns))return}if(this.opt.tierLimit){if(f.tierLimit>=this.opt.tierLimit)return}let $=[];if(this.providers.forEach((F)=>{F.lookup(T).forEach((r)=>{if(this.nodes.tryAdd(r))$.push(r)})}),$.length<=0)return;$.forEach((F)=>{this.translators.forEach((R)=>{if(!R.match(F))return;R.translate(F).forEach((_)=>{this.loopExplore(_,{tierLimit:f.tierLimit+1})})})})}explore(T){if(!this.opt.cache)this.nodes.clear();if(!T.$id){let f=G(T);T.$id=`qn-${T.$ns}-$startup-${f}`}return this.loopExplore(T,{tierLimit:0}),this.nodes.getList()}}class U{linkNodes;constructor(){this.linkNodes=[]}all(){return this.linkNodes}match(T){return!0}link(T){if(!T.$id){let $=G(T);T.$id=`ln-${T.$fromNS}-${T.$toNS}-${$}`}this.linkNodes.push(T);let f=I.revert(T);if(f)this.linkNodes.push(f);return!0}tryMapOnData(T,f,$){let F=$.data[f.$from];if(F===void 0)return!1;let R=x(f.$op);if(!R)return!1;T.$with=f.$with,T[f.$to]||={},T[f.$to].$op=B(R),T[f.$to].$val=F}tryMap(T,f,$){if(T.$with=f.$with,this.tryMapOnData(T,f,$),f.$where?.length>0)f.$where.forEach((F)=>{F=F;let R={};R.$with=F.$with,R.$where=[],this.tryMap(R,F,$),T.$where.push(R)})}translate(T){let f=[];return this.linkNodes.forEach(($)=>{if($.$fromNS!==T.$ns)return;let F=new Z;F.$id=`qn-${T.$ns}-${T.$id}-${$.$id}`,F.$ns=$.$toNS,F.$fromDN=T,F.$fromLN=$,F.expression={},F.expression.$where=[],this.tryMap(F.expression,$.expression,T),f.push(F)}),f}}export{x as revertLinkOperator,K as isQueryExpressionKey,S as isNullOrUndefined,w as isLinkExpressionKey,G as generateHashCode,B as convertLP2RO,Z as QueryNode,U as NodeTranslator,z as NodeBase,D as MemoryProvider,C as MemoryData,I as LinkNode,H as Kodo,Y as DataNodeMap,X as DataNode};
|
package/package.json
CHANGED
|
@@ -1,48 +1,39 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"source-map-loader": "^0.2.4",
|
|
41
|
-
"ts-mocha": "^10.0.0",
|
|
42
|
-
"tslint": "^6.1.3",
|
|
43
|
-
"typescript": "^4.7.4",
|
|
44
|
-
"webpack": "^5.73.0",
|
|
45
|
-
"webpack-cli": "^4.10.0",
|
|
46
|
-
"webpack-node-externals": "^3.0.0"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
2
|
+
"name": "kodo-core",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"author": "Shadow Lei",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"repository": "git@github.com:ShadowLei/kodo-core.git",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"registry": "https://registry.npmjs.org"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"LICENSE",
|
|
13
|
+
"package.json",
|
|
14
|
+
"README.md",
|
|
15
|
+
"dist/"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build-dev": "bun build ./src/index.ts --outdir ./dist",
|
|
19
|
+
"build:js": "bun build --production ./src/index.ts --outdir ./dist",
|
|
20
|
+
"build:types": "tsc -p tsconfig.types.json",
|
|
21
|
+
"build": "bun run build:js && bun run build:types",
|
|
22
|
+
"test": "bun test ./test/*.test.ts"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"kodo-core",
|
|
26
|
+
"nerual",
|
|
27
|
+
"net",
|
|
28
|
+
"connection"
|
|
29
|
+
],
|
|
30
|
+
"module": "index.ts",
|
|
31
|
+
"type": "module",
|
|
32
|
+
"dependencies": {},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/bun": "latest"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"typescript": "^6"
|
|
38
|
+
}
|
|
39
|
+
}
|
package/dist/kodo-core.min.js
DELETED
|
@@ -1,989 +0,0 @@
|
|
|
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
|
-
//expression: ((a == b && a <> c) || (b like "Armstrong"))
|
|
184
|
-
//Need a volunteer who's familar w/ complier | interpreter to coding on this...
|
|
185
|
-
}
|
|
186
|
-
registerTranslator(translator) {
|
|
187
|
-
this.translators.push(translator);
|
|
188
|
-
}
|
|
189
|
-
registerProvider(provider) {
|
|
190
|
-
this.providers.push(provider);
|
|
191
|
-
}
|
|
192
|
-
loopExplore(startup, exlpreOpt) {
|
|
193
|
-
if (!this.opt.recursion) {
|
|
194
|
-
if (this.nodes.existNS(startup.$ns)) {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
if (this.opt.tierLimit) {
|
|
199
|
-
if (exlpreOpt.tierLimit >= this.opt.tierLimit) {
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
//let dNodes: DataNode<any>[] = [];
|
|
204
|
-
let foundList = [];
|
|
205
|
-
//1. load data from provider
|
|
206
|
-
this.providers.forEach(p => {
|
|
207
|
-
//1.1 query
|
|
208
|
-
let founds = p.lookup(startup);
|
|
209
|
-
//1.2 try add
|
|
210
|
-
founds.forEach(f => {
|
|
211
|
-
let added = this.nodes.tryAdd(f);
|
|
212
|
-
if (added) {
|
|
213
|
-
foundList.push(f);
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
if (foundList.length <= 0) {
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
foundList.forEach(dn => {
|
|
221
|
-
this.translators.forEach(t => {
|
|
222
|
-
if (!t.match(dn)) {
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
//2. translate
|
|
226
|
-
let qn = t.translate(dn);
|
|
227
|
-
//3. continue search
|
|
228
|
-
qn.forEach(q => {
|
|
229
|
-
this.loopExplore(q, {
|
|
230
|
-
tierLimit: exlpreOpt.tierLimit + 1
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
explore(startup) {
|
|
237
|
-
if (!this.opt.cache) {
|
|
238
|
-
this.nodes.clear();
|
|
239
|
-
}
|
|
240
|
-
if (!startup.$id) {
|
|
241
|
-
let qnid = (0, utils_1.generateHashCode)(startup);
|
|
242
|
-
startup.$id = `qn-${startup.$ns}-$startup-${qnid}`;
|
|
243
|
-
}
|
|
244
|
-
this.loopExplore(startup, {
|
|
245
|
-
tierLimit: 0
|
|
246
|
-
});
|
|
247
|
-
return this.nodes.getList();
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
exports.Kodo = Kodo;
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
/***/ }),
|
|
254
|
-
|
|
255
|
-
/***/ "./src/nodes/dataNode.ts":
|
|
256
|
-
/*!*******************************!*\
|
|
257
|
-
!*** ./src/nodes/dataNode.ts ***!
|
|
258
|
-
\*******************************/
|
|
259
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
263
|
-
exports.DataNodeMap = exports.DataNode = void 0;
|
|
264
|
-
const nodeBase_1 = __webpack_require__(/*! ./nodeBase */ "./src/nodes/nodeBase.ts");
|
|
265
|
-
/*
|
|
266
|
-
export type DataNodeObject<T> = {
|
|
267
|
-
[P in keyof T]?: {
|
|
268
|
-
//$expression?: LinkExpression;
|
|
269
|
-
$from?: QueryNode<T>;
|
|
270
|
-
$val: T[P];
|
|
271
|
-
};
|
|
272
|
-
};
|
|
273
|
-
*/
|
|
274
|
-
class DataNode extends nodeBase_1.NodeBase {
|
|
275
|
-
}
|
|
276
|
-
exports.DataNode = DataNode;
|
|
277
|
-
class DataNodeMap {
|
|
278
|
-
constructor() {
|
|
279
|
-
this.nodes = new Map();
|
|
280
|
-
this.ns = new Map();
|
|
281
|
-
}
|
|
282
|
-
tryAdd(node) {
|
|
283
|
-
let nodeid = `${node.$ns}-${node.$id}`;
|
|
284
|
-
//do not add if exist.
|
|
285
|
-
if (this.nodes.get(nodeid)) {
|
|
286
|
-
return false;
|
|
287
|
-
}
|
|
288
|
-
//add node map
|
|
289
|
-
this.nodes.set(nodeid, node);
|
|
290
|
-
//add ns map
|
|
291
|
-
let nodeNS = this.ns.get(node.$ns);
|
|
292
|
-
if (!nodeNS) {
|
|
293
|
-
nodeNS = [];
|
|
294
|
-
this.ns.set(node.$ns, nodeNS);
|
|
295
|
-
}
|
|
296
|
-
nodeNS.push(node);
|
|
297
|
-
return true;
|
|
298
|
-
}
|
|
299
|
-
getList() {
|
|
300
|
-
return Array.from(this.nodes.values());
|
|
301
|
-
}
|
|
302
|
-
clear() {
|
|
303
|
-
this.nodes.clear();
|
|
304
|
-
this.ns.clear();
|
|
305
|
-
}
|
|
306
|
-
existNS(ns) {
|
|
307
|
-
let rtn = this.ns.get(ns);
|
|
308
|
-
return !!rtn;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
exports.DataNodeMap = DataNodeMap;
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
/***/ }),
|
|
315
|
-
|
|
316
|
-
/***/ "./src/nodes/index.ts":
|
|
317
|
-
/*!****************************!*\
|
|
318
|
-
!*** ./src/nodes/index.ts ***!
|
|
319
|
-
\****************************/
|
|
320
|
-
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
324
|
-
if (k2 === undefined) k2 = k;
|
|
325
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
326
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
327
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
328
|
-
}
|
|
329
|
-
Object.defineProperty(o, k2, desc);
|
|
330
|
-
}) : (function(o, m, k, k2) {
|
|
331
|
-
if (k2 === undefined) k2 = k;
|
|
332
|
-
o[k2] = m[k];
|
|
333
|
-
}));
|
|
334
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
335
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
336
|
-
};
|
|
337
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
338
|
-
__exportStar(__webpack_require__(/*! ./nodeBase */ "./src/nodes/nodeBase.ts"), exports);
|
|
339
|
-
__exportStar(__webpack_require__(/*! ./dataNode */ "./src/nodes/dataNode.ts"), exports);
|
|
340
|
-
__exportStar(__webpack_require__(/*! ./queryNode */ "./src/nodes/queryNode.ts"), exports);
|
|
341
|
-
__exportStar(__webpack_require__(/*! ./linkNode */ "./src/nodes/linkNode.ts"), exports);
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
/***/ }),
|
|
345
|
-
|
|
346
|
-
/***/ "./src/nodes/linkNode.ts":
|
|
347
|
-
/*!*******************************!*\
|
|
348
|
-
!*** ./src/nodes/linkNode.ts ***!
|
|
349
|
-
\*******************************/
|
|
350
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
354
|
-
exports.LinkNode = void 0;
|
|
355
|
-
const nodeBase_1 = __webpack_require__(/*! ./nodeBase */ "./src/nodes/nodeBase.ts");
|
|
356
|
-
class LinkNode extends nodeBase_1.NodeBase {
|
|
357
|
-
static revertExpression(origin) {
|
|
358
|
-
var _a;
|
|
359
|
-
if (typeof origin === "function") {
|
|
360
|
-
return origin;
|
|
361
|
-
}
|
|
362
|
-
let rtn = {
|
|
363
|
-
$from: origin.$to,
|
|
364
|
-
$to: origin.$from,
|
|
365
|
-
$with: origin.$with,
|
|
366
|
-
$where: []
|
|
367
|
-
};
|
|
368
|
-
//when ==, means A->B && B->A
|
|
369
|
-
if (origin.$op === "==") {
|
|
370
|
-
rtn.$op = origin.$op;
|
|
371
|
-
(_a = origin.$where) === null || _a === void 0 ? void 0 : _a.forEach(m => {
|
|
372
|
-
let r = this.revertExpression(m);
|
|
373
|
-
if (r) {
|
|
374
|
-
rtn.$where.push(r);
|
|
375
|
-
}
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
return rtn;
|
|
379
|
-
}
|
|
380
|
-
static revert(node) {
|
|
381
|
-
let rExp = LinkNode.revertExpression(node.expression);
|
|
382
|
-
if (!rExp) {
|
|
383
|
-
return null;
|
|
384
|
-
}
|
|
385
|
-
let rtn = new LinkNode();
|
|
386
|
-
rtn.$id = `${node.$id}-r`;
|
|
387
|
-
rtn.$type = "R";
|
|
388
|
-
rtn.$ns = node.$ns;
|
|
389
|
-
rtn.$fromNS = node.$toNS;
|
|
390
|
-
rtn.$toNS = node.$fromNS;
|
|
391
|
-
rtn.expression = rExp;
|
|
392
|
-
return rtn;
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
exports.LinkNode = LinkNode;
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
/***/ }),
|
|
399
|
-
|
|
400
|
-
/***/ "./src/nodes/nodeBase.ts":
|
|
401
|
-
/*!*******************************!*\
|
|
402
|
-
!*** ./src/nodes/nodeBase.ts ***!
|
|
403
|
-
\*******************************/
|
|
404
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
408
|
-
exports.NodeBase = void 0;
|
|
409
|
-
class NodeBase {
|
|
410
|
-
}
|
|
411
|
-
exports.NodeBase = NodeBase;
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
/***/ }),
|
|
415
|
-
|
|
416
|
-
/***/ "./src/nodes/queryNode.ts":
|
|
417
|
-
/*!********************************!*\
|
|
418
|
-
!*** ./src/nodes/queryNode.ts ***!
|
|
419
|
-
\********************************/
|
|
420
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
424
|
-
exports.QueryNode = void 0;
|
|
425
|
-
const nodeBase_1 = __webpack_require__(/*! ./nodeBase */ "./src/nodes/nodeBase.ts");
|
|
426
|
-
/*
|
|
427
|
-
export type NNodeValueType = Date | string | number | null;
|
|
428
|
-
|
|
429
|
-
export class NNodeValue {
|
|
430
|
-
[prop: string]: NNodeValueType;
|
|
431
|
-
}
|
|
432
|
-
*/
|
|
433
|
-
class QueryNode extends nodeBase_1.NodeBase {
|
|
434
|
-
}
|
|
435
|
-
exports.QueryNode = QueryNode;
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
/***/ }),
|
|
439
|
-
|
|
440
|
-
/***/ "./src/providers/iDataProvider.ts":
|
|
441
|
-
/*!****************************************!*\
|
|
442
|
-
!*** ./src/providers/iDataProvider.ts ***!
|
|
443
|
-
\****************************************/
|
|
444
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
/***/ }),
|
|
451
|
-
|
|
452
|
-
/***/ "./src/providers/index.ts":
|
|
453
|
-
/*!********************************!*\
|
|
454
|
-
!*** ./src/providers/index.ts ***!
|
|
455
|
-
\********************************/
|
|
456
|
-
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
460
|
-
if (k2 === undefined) k2 = k;
|
|
461
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
462
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
463
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
464
|
-
}
|
|
465
|
-
Object.defineProperty(o, k2, desc);
|
|
466
|
-
}) : (function(o, m, k, k2) {
|
|
467
|
-
if (k2 === undefined) k2 = k;
|
|
468
|
-
o[k2] = m[k];
|
|
469
|
-
}));
|
|
470
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
471
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
472
|
-
};
|
|
473
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
474
|
-
__exportStar(__webpack_require__(/*! ./iDataProvider */ "./src/providers/iDataProvider.ts"), exports);
|
|
475
|
-
__exportStar(__webpack_require__(/*! ./memoryProvider */ "./src/providers/memoryProvider.ts"), exports);
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
/***/ }),
|
|
479
|
-
|
|
480
|
-
/***/ "./src/providers/memoryProvider.ts":
|
|
481
|
-
/*!*****************************************!*\
|
|
482
|
-
!*** ./src/providers/memoryProvider.ts ***!
|
|
483
|
-
\*****************************************/
|
|
484
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
488
|
-
exports.MemoryProvider = exports.MemoryData = void 0;
|
|
489
|
-
const nodes_1 = __webpack_require__(/*! ../nodes */ "./src/nodes/index.ts");
|
|
490
|
-
const expressions_1 = __webpack_require__(/*! ../expressions */ "./src/expressions/index.ts");
|
|
491
|
-
const utils_1 = __webpack_require__(/*! ../utils */ "./src/utils/index.ts");
|
|
492
|
-
class MemoryData {
|
|
493
|
-
}
|
|
494
|
-
exports.MemoryData = MemoryData;
|
|
495
|
-
class MemoryProvider {
|
|
496
|
-
constructor() {
|
|
497
|
-
this.objs = [];
|
|
498
|
-
}
|
|
499
|
-
add(namespace, obj) {
|
|
500
|
-
this.objs.push({
|
|
501
|
-
ns: namespace,
|
|
502
|
-
val: obj
|
|
503
|
-
});
|
|
504
|
-
}
|
|
505
|
-
copmareNull(op, val, dataVal) {
|
|
506
|
-
switch (op) {
|
|
507
|
-
case "==":
|
|
508
|
-
return (0, utils_1.isNullOrUndefined)(dataVal);
|
|
509
|
-
case "!=":
|
|
510
|
-
return !(0, utils_1.isNullOrUndefined)(dataVal);
|
|
511
|
-
case "===":
|
|
512
|
-
return (dataVal === val);
|
|
513
|
-
case "!==":
|
|
514
|
-
return (dataVal !== val);
|
|
515
|
-
default:
|
|
516
|
-
return false;
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
isMatchData(key, op, opVal, data) {
|
|
520
|
-
let dataVal = data[key];
|
|
521
|
-
if ((0, utils_1.isNullOrUndefined)(opVal)) {
|
|
522
|
-
return this.copmareNull(op, opVal, dataVal);
|
|
523
|
-
}
|
|
524
|
-
op || (op = "==");
|
|
525
|
-
switch (op) {
|
|
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 ">=":
|
|
537
|
-
return (dataVal >= opVal);
|
|
538
|
-
case "<":
|
|
539
|
-
return (dataVal < opVal);
|
|
540
|
-
case "<=":
|
|
541
|
-
return (dataVal <= opVal);
|
|
542
|
-
case "IN":
|
|
543
|
-
if (opVal instanceof Array) {
|
|
544
|
-
return opVal.some(m => m == dataVal);
|
|
545
|
-
}
|
|
546
|
-
return false;
|
|
547
|
-
case "!IN":
|
|
548
|
-
if (opVal instanceof Array) {
|
|
549
|
-
return !opVal.some(m => m == dataVal);
|
|
550
|
-
}
|
|
551
|
-
return false;
|
|
552
|
-
default:
|
|
553
|
-
break;
|
|
554
|
-
}
|
|
555
|
-
throw { key: "MemoryProvider.isMatchData", exp: "Not implemented yet." };
|
|
556
|
-
}
|
|
557
|
-
assumeMatchList(matchList, bVal) {
|
|
558
|
-
let rtn = "defer";
|
|
559
|
-
matchList.every(m => {
|
|
560
|
-
//continue
|
|
561
|
-
if (m === "defer") {
|
|
562
|
-
return true;
|
|
563
|
-
}
|
|
564
|
-
if (m === bVal) {
|
|
565
|
-
rtn = bVal;
|
|
566
|
-
return false; //break;
|
|
567
|
-
}
|
|
568
|
-
else {
|
|
569
|
-
rtn = !bVal;
|
|
570
|
-
}
|
|
571
|
-
//continue;
|
|
572
|
-
return true;
|
|
573
|
-
});
|
|
574
|
-
return rtn;
|
|
575
|
-
}
|
|
576
|
-
isAllMatchWith(con, matchList) {
|
|
577
|
-
if (matchList.length <= 0) {
|
|
578
|
-
return "defer";
|
|
579
|
-
}
|
|
580
|
-
if (con === "&&") {
|
|
581
|
-
/*
|
|
582
|
-
let rtn: MatchResult = "defer";
|
|
583
|
-
matchList.every(m => {
|
|
584
|
-
if (m === false) {
|
|
585
|
-
rtn = false;
|
|
586
|
-
return false; //break;
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
if (m === true) {
|
|
590
|
-
rtn = true;
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
//continue;
|
|
594
|
-
return true;
|
|
595
|
-
});
|
|
596
|
-
*/
|
|
597
|
-
let rtn = this.assumeMatchList(matchList, false);
|
|
598
|
-
return rtn;
|
|
599
|
-
}
|
|
600
|
-
else if (con === "||") {
|
|
601
|
-
/*
|
|
602
|
-
let rtn: MatchResult = "defer";
|
|
603
|
-
matchList.every(m => {
|
|
604
|
-
if (m === true) {
|
|
605
|
-
rtn = true;
|
|
606
|
-
return false; //break;
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
if (m === false) {
|
|
610
|
-
rtn = false;
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
//continue;
|
|
614
|
-
return true;
|
|
615
|
-
});
|
|
616
|
-
*/
|
|
617
|
-
let rtn = this.assumeMatchList(matchList, true);
|
|
618
|
-
return rtn;
|
|
619
|
-
}
|
|
620
|
-
else {
|
|
621
|
-
throw { key: "MemoryProvider.isMatchWith", exp: `QueryCondition ${con} not allowed.` };
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
matchOnData(where, data) {
|
|
625
|
-
let con = where.$with || "&&";
|
|
626
|
-
let isAnd = (con === "&&");
|
|
627
|
-
let matchList = [];
|
|
628
|
-
for (let key in where) {
|
|
629
|
-
if ((0, expressions_1.isQueryExpressionKey)(key)) {
|
|
630
|
-
continue;
|
|
631
|
-
}
|
|
632
|
-
let val = where[key];
|
|
633
|
-
let match = false;
|
|
634
|
-
if (typeof val === "object") {
|
|
635
|
-
let theVal = val;
|
|
636
|
-
match = this.isMatchData(key, theVal.$op, theVal.$val, data);
|
|
637
|
-
}
|
|
638
|
-
else {
|
|
639
|
-
match = this.isMatchData(key, "==", val, data);
|
|
640
|
-
}
|
|
641
|
-
matchList.push(match);
|
|
642
|
-
if (!match && isAnd) {
|
|
643
|
-
return false;
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
return this.isAllMatchWith(con, matchList);
|
|
647
|
-
}
|
|
648
|
-
match(expression, data) {
|
|
649
|
-
var _a;
|
|
650
|
-
let matchList = [];
|
|
651
|
-
if (typeof expression === "function") {
|
|
652
|
-
return expression(data);
|
|
653
|
-
}
|
|
654
|
-
let con = expression.$with || "&&";
|
|
655
|
-
let isAnd = (con === "&&");
|
|
656
|
-
let matched = this.matchOnData(expression, data);
|
|
657
|
-
if (!matched && isAnd) {
|
|
658
|
-
return false;
|
|
659
|
-
}
|
|
660
|
-
matchList.push(matched);
|
|
661
|
-
if (((_a = expression.$where) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
662
|
-
expression.$where.every(w => {
|
|
663
|
-
let match = this.match(w, data);
|
|
664
|
-
matchList.push(match);
|
|
665
|
-
//break:
|
|
666
|
-
if (!matched && isAnd) {
|
|
667
|
-
return false;
|
|
668
|
-
}
|
|
669
|
-
return true;
|
|
670
|
-
});
|
|
671
|
-
}
|
|
672
|
-
let rtn = this.isAllMatchWith(con, matchList);
|
|
673
|
-
return rtn;
|
|
674
|
-
}
|
|
675
|
-
lookup(qNode) {
|
|
676
|
-
//find match
|
|
677
|
-
let list = this.objs.filter(m => {
|
|
678
|
-
if (qNode.$ns !== m.ns) {
|
|
679
|
-
return false;
|
|
680
|
-
}
|
|
681
|
-
let rtn = this.match(qNode.expression, m.val);
|
|
682
|
-
//regards the final "defer" as false
|
|
683
|
-
if (rtn === "defer") {
|
|
684
|
-
return false;
|
|
685
|
-
}
|
|
686
|
-
else {
|
|
687
|
-
return rtn;
|
|
688
|
-
}
|
|
689
|
-
});
|
|
690
|
-
//convert to data node
|
|
691
|
-
let rtn = list.map(m => {
|
|
692
|
-
var _a;
|
|
693
|
-
let node = new nodes_1.DataNode();
|
|
694
|
-
node.$fromQN = qNode;
|
|
695
|
-
node.$ns = m.ns;
|
|
696
|
-
node.data = m.val;
|
|
697
|
-
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?
|
|
698
|
-
return node;
|
|
699
|
-
});
|
|
700
|
-
return rtn;
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
exports.MemoryProvider = MemoryProvider;
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
/***/ }),
|
|
707
|
-
|
|
708
|
-
/***/ "./src/translators/iNodeTranslator.ts":
|
|
709
|
-
/*!********************************************!*\
|
|
710
|
-
!*** ./src/translators/iNodeTranslator.ts ***!
|
|
711
|
-
\********************************************/
|
|
712
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
/***/ }),
|
|
719
|
-
|
|
720
|
-
/***/ "./src/translators/index.ts":
|
|
721
|
-
/*!**********************************!*\
|
|
722
|
-
!*** ./src/translators/index.ts ***!
|
|
723
|
-
\**********************************/
|
|
724
|
-
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
728
|
-
if (k2 === undefined) k2 = k;
|
|
729
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
730
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
731
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
732
|
-
}
|
|
733
|
-
Object.defineProperty(o, k2, desc);
|
|
734
|
-
}) : (function(o, m, k, k2) {
|
|
735
|
-
if (k2 === undefined) k2 = k;
|
|
736
|
-
o[k2] = m[k];
|
|
737
|
-
}));
|
|
738
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
739
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
740
|
-
};
|
|
741
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
742
|
-
__exportStar(__webpack_require__(/*! ./iNodeTranslator */ "./src/translators/iNodeTranslator.ts"), exports);
|
|
743
|
-
__exportStar(__webpack_require__(/*! ./nodeTranslator */ "./src/translators/nodeTranslator.ts"), exports);
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
/***/ }),
|
|
747
|
-
|
|
748
|
-
/***/ "./src/translators/nodeTranslator.ts":
|
|
749
|
-
/*!*******************************************!*\
|
|
750
|
-
!*** ./src/translators/nodeTranslator.ts ***!
|
|
751
|
-
\*******************************************/
|
|
752
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
756
|
-
exports.NodeTranslator = void 0;
|
|
757
|
-
const expressions_1 = __webpack_require__(/*! ../expressions */ "./src/expressions/index.ts");
|
|
758
|
-
const nodes_1 = __webpack_require__(/*! ../nodes */ "./src/nodes/index.ts");
|
|
759
|
-
const utils_1 = __webpack_require__(/*! ../utils */ "./src/utils/index.ts");
|
|
760
|
-
//DataNode + LinkNode => QueryNode
|
|
761
|
-
class NodeTranslator {
|
|
762
|
-
constructor() {
|
|
763
|
-
this.linkNodes = [];
|
|
764
|
-
}
|
|
765
|
-
all() {
|
|
766
|
-
return this.linkNodes;
|
|
767
|
-
}
|
|
768
|
-
//by default, always match for use.
|
|
769
|
-
match(dn) {
|
|
770
|
-
return true;
|
|
771
|
-
}
|
|
772
|
-
link(ln) {
|
|
773
|
-
if (!ln.$id) {
|
|
774
|
-
let lnid = (0, utils_1.generateHashCode)(ln);
|
|
775
|
-
ln.$id = `ln-${ln.$fromNS}-${ln.$toNS}-${lnid}`;
|
|
776
|
-
}
|
|
777
|
-
this.linkNodes.push(ln);
|
|
778
|
-
let revertLink = nodes_1.LinkNode.revert(ln);
|
|
779
|
-
if (revertLink) {
|
|
780
|
-
this.linkNodes.push(revertLink);
|
|
781
|
-
}
|
|
782
|
-
return true;
|
|
783
|
-
}
|
|
784
|
-
tryMapOnData(rtnQE, where, data) {
|
|
785
|
-
var _a;
|
|
786
|
-
let dataVal = data.data[where.$from];
|
|
787
|
-
if (dataVal === undefined) {
|
|
788
|
-
return false;
|
|
789
|
-
}
|
|
790
|
-
let rop = (0, expressions_1.revertLinkOperator)(where.$op);
|
|
791
|
-
if (!rop) {
|
|
792
|
-
return false;
|
|
793
|
-
}
|
|
794
|
-
rtnQE.$with = where.$with;
|
|
795
|
-
rtnQE[_a = where.$to] || (rtnQE[_a] = {});
|
|
796
|
-
rtnQE[where.$to].$op = (0, expressions_1.convertLP2RO)(rop);
|
|
797
|
-
rtnQE[where.$to].$val = dataVal; //TODO here: better strong type?
|
|
798
|
-
}
|
|
799
|
-
tryMap(rtnQE, expression, data) {
|
|
800
|
-
var _a;
|
|
801
|
-
rtnQE.$with = expression.$with;
|
|
802
|
-
this.tryMapOnData(rtnQE, expression, data);
|
|
803
|
-
if (((_a = expression.$where) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
804
|
-
expression.$where.forEach(w => {
|
|
805
|
-
w = w;
|
|
806
|
-
let qeWhere = {};
|
|
807
|
-
qeWhere.$with = w.$with;
|
|
808
|
-
qeWhere.$where = [];
|
|
809
|
-
this.tryMap(qeWhere, w, data);
|
|
810
|
-
rtnQE.$where.push(qeWhere);
|
|
811
|
-
});
|
|
812
|
-
}
|
|
813
|
-
}
|
|
814
|
-
//DataNode + LinkNode => QueryNode
|
|
815
|
-
translate(data) {
|
|
816
|
-
let rtn = [];
|
|
817
|
-
this.linkNodes.forEach(ln => {
|
|
818
|
-
if (ln.$fromNS !== data.$ns) {
|
|
819
|
-
return;
|
|
820
|
-
}
|
|
821
|
-
let qn = new nodes_1.QueryNode();
|
|
822
|
-
qn.$id = `qn-${data.$ns}-${data.$id}-${ln.$id}`;
|
|
823
|
-
qn.$ns = ln.$toNS;
|
|
824
|
-
qn.$fromDN = data;
|
|
825
|
-
qn.$fromLN = ln;
|
|
826
|
-
qn.expression = {};
|
|
827
|
-
qn.expression.$where = [];
|
|
828
|
-
/*
|
|
829
|
-
let lnExp = ln.expression as LinkExpression<TFrom, TTo>
|
|
830
|
-
if (typeof lnExp === "function") {
|
|
831
|
-
lnExp()
|
|
832
|
-
qn.expression = to => lnExp()
|
|
833
|
-
}
|
|
834
|
-
*/
|
|
835
|
-
this.tryMap(qn.expression, ln.expression, data);
|
|
836
|
-
rtn.push(qn);
|
|
837
|
-
});
|
|
838
|
-
return rtn;
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
exports.NodeTranslator = NodeTranslator;
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
/***/ }),
|
|
845
|
-
|
|
846
|
-
/***/ "./src/utils/hash.ts":
|
|
847
|
-
/*!***************************!*\
|
|
848
|
-
!*** ./src/utils/hash.ts ***!
|
|
849
|
-
\***************************/
|
|
850
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
854
|
-
exports.generateHashCode = void 0;
|
|
855
|
-
const SEED_DEFAULT = Math.ceil(Math.random() * 100000);
|
|
856
|
-
function objToString(obj) {
|
|
857
|
-
let str = "null";
|
|
858
|
-
let type = typeof obj;
|
|
859
|
-
switch (type) {
|
|
860
|
-
case "undefined":
|
|
861
|
-
str = "undefined";
|
|
862
|
-
break;
|
|
863
|
-
case "string":
|
|
864
|
-
str = obj;
|
|
865
|
-
break;
|
|
866
|
-
case "boolean":
|
|
867
|
-
case "number":
|
|
868
|
-
case "bigint":
|
|
869
|
-
case "function":
|
|
870
|
-
case "symbol":
|
|
871
|
-
str = obj;
|
|
872
|
-
break;
|
|
873
|
-
case "object":
|
|
874
|
-
try {
|
|
875
|
-
obj = obj || null;
|
|
876
|
-
str = JSON.stringify(obj || null);
|
|
877
|
-
}
|
|
878
|
-
catch (e) {
|
|
879
|
-
//swallow exception
|
|
880
|
-
}
|
|
881
|
-
break;
|
|
882
|
-
default:
|
|
883
|
-
break;
|
|
884
|
-
}
|
|
885
|
-
;
|
|
886
|
-
return str;
|
|
887
|
-
}
|
|
888
|
-
function generateHashCode(obj, opt) {
|
|
889
|
-
//let seed = opt?.seed || Math.ceil(Math.random() * 100000);
|
|
890
|
-
let seed = (opt === null || opt === void 0 ? void 0 : opt.seed) || SEED_DEFAULT;
|
|
891
|
-
let str = objToString(obj);
|
|
892
|
-
let hash = seed;
|
|
893
|
-
for (let i = 0; i < str.length; i++) {
|
|
894
|
-
hash = (hash << 5) - hash + str.charCodeAt(i);
|
|
895
|
-
hash |= 0; //to 32bit integer
|
|
896
|
-
}
|
|
897
|
-
//ensure positive num
|
|
898
|
-
hash = hash & 0x7FFFFFFF;
|
|
899
|
-
//console.warn(hash);
|
|
900
|
-
return hash.toString();
|
|
901
|
-
}
|
|
902
|
-
exports.generateHashCode = generateHashCode;
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
/***/ }),
|
|
906
|
-
|
|
907
|
-
/***/ "./src/utils/index.ts":
|
|
908
|
-
/*!****************************!*\
|
|
909
|
-
!*** ./src/utils/index.ts ***!
|
|
910
|
-
\****************************/
|
|
911
|
-
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
915
|
-
if (k2 === undefined) k2 = k;
|
|
916
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
917
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
918
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
919
|
-
}
|
|
920
|
-
Object.defineProperty(o, k2, desc);
|
|
921
|
-
}) : (function(o, m, k, k2) {
|
|
922
|
-
if (k2 === undefined) k2 = k;
|
|
923
|
-
o[k2] = m[k];
|
|
924
|
-
}));
|
|
925
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
926
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
927
|
-
};
|
|
928
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
929
|
-
__exportStar(__webpack_require__(/*! ./hash */ "./src/utils/hash.ts"), exports);
|
|
930
|
-
__exportStar(__webpack_require__(/*! ./objectUtil */ "./src/utils/objectUtil.ts"), exports);
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
/***/ }),
|
|
934
|
-
|
|
935
|
-
/***/ "./src/utils/objectUtil.ts":
|
|
936
|
-
/*!*********************************!*\
|
|
937
|
-
!*** ./src/utils/objectUtil.ts ***!
|
|
938
|
-
\*********************************/
|
|
939
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
943
|
-
exports.isNullOrUndefined = void 0;
|
|
944
|
-
function isNullOrUndefined(obj) {
|
|
945
|
-
return (obj === null || obj === undefined);
|
|
946
|
-
}
|
|
947
|
-
exports.isNullOrUndefined = isNullOrUndefined;
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
/***/ })
|
|
951
|
-
|
|
952
|
-
/******/ });
|
|
953
|
-
/************************************************************************/
|
|
954
|
-
/******/ // The module cache
|
|
955
|
-
/******/ var __webpack_module_cache__ = {};
|
|
956
|
-
/******/
|
|
957
|
-
/******/ // The require function
|
|
958
|
-
/******/ function __webpack_require__(moduleId) {
|
|
959
|
-
/******/ // Check if module is in cache
|
|
960
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
961
|
-
/******/ if (cachedModule !== undefined) {
|
|
962
|
-
/******/ return cachedModule.exports;
|
|
963
|
-
/******/ }
|
|
964
|
-
/******/ // Create a new module (and put it into the cache)
|
|
965
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
966
|
-
/******/ // no module.id needed
|
|
967
|
-
/******/ // no module.loaded needed
|
|
968
|
-
/******/ exports: {}
|
|
969
|
-
/******/ };
|
|
970
|
-
/******/
|
|
971
|
-
/******/ // Execute the module function
|
|
972
|
-
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
973
|
-
/******/
|
|
974
|
-
/******/ // Return the exports of the module
|
|
975
|
-
/******/ return module.exports;
|
|
976
|
-
/******/ }
|
|
977
|
-
/******/
|
|
978
|
-
/************************************************************************/
|
|
979
|
-
/******/
|
|
980
|
-
/******/ // startup
|
|
981
|
-
/******/ // Load entry module and return exports
|
|
982
|
-
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
983
|
-
/******/ var __webpack_exports__ = __webpack_require__("./src/index.ts");
|
|
984
|
-
/******/
|
|
985
|
-
/******/ return __webpack_exports__;
|
|
986
|
-
/******/ })()
|
|
987
|
-
;
|
|
988
|
-
});
|
|
989
|
-
//# sourceMappingURL=kodo-core.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kodo-core.min.js","mappings":"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","sources":["webpack://kodo-core/webpack/universalModuleDefinition","webpack://kodo-core/./src/expressions/_defines.ts","webpack://kodo-core/./src/expressions/index.ts","webpack://kodo-core/./src/expressions/linkExpression.ts","webpack://kodo-core/./src/expressions/queryExpression.ts","webpack://kodo-core/./src/index.ts","webpack://kodo-core/./src/kodo.ts","webpack://kodo-core/./src/nodes/dataNode.ts","webpack://kodo-core/./src/nodes/index.ts","webpack://kodo-core/./src/nodes/linkNode.ts","webpack://kodo-core/./src/nodes/nodeBase.ts","webpack://kodo-core/./src/nodes/queryNode.ts","webpack://kodo-core/./src/providers/iDataProvider.ts","webpack://kodo-core/./src/providers/index.ts","webpack://kodo-core/./src/providers/memoryProvider.ts","webpack://kodo-core/./src/translators/iNodeTranslator.ts","webpack://kodo-core/./src/translators/index.ts","webpack://kodo-core/./src/translators/nodeTranslator.ts","webpack://kodo-core/./src/utils/hash.ts","webpack://kodo-core/./src/utils/index.ts","webpack://kodo-core/./src/utils/objectUtil.ts","webpack://kodo-core/webpack/bootstrap","webpack://kodo-core/webpack/before-startup","webpack://kodo-core/webpack/startup","webpack://kodo-core/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"kodo-core\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"kodo-core\"] = factory();\n\telse\n\t\troot[\"kodo-core\"] = factory();\n})(global, () => {\nreturn ","\nexport declare type LinkOperator = \">=\" | \">\" | \"<\" | \"<=\" | \"==\" | \"!=\" | \"->\";\nexport declare type ROperator_Atom = \">=\" | \">\" | \"<\" | \"<=\" | \"==\" | \"===\" | \"!=\" | \"!==\";\nexport declare type ROperator_Array = \"IN\" | \"!IN\";\nexport declare type ROperator = ROperator_Atom | ROperator_Array;\nexport declare type BOperator = \"&&\" | \"||\";\n\nexport function revertLinkOperator(op: LinkOperator): LinkOperator | null {\n switch(op) {\n case \">\":\n return \"<\";\n case \">=\":\n return \"<=\";\n case \"<\":\n return \">\";\n case \"<=\":\n return \">=\";\n case \"->\": //single op\n return null;\n default:\n return op;\n }\n}\n\nexport function convertLP2RO(op: LinkOperator): ROperator | null {\n switch (op) {\n case \"->\": //single op\n return \"==\";\n default:\n return op;\n }\n}","\nexport * from \"./_defines\";\nexport * from \"./linkExpression\";\nexport * from \"./queryExpression\";","import { BOperator, LinkOperator, ROperator } from \"./_defines\";\n\nexport type LinkOn<TFrom, TTo> = {\n $from?: keyof TFrom,\n $op?: LinkOperator,\n $to?: keyof TTo\n};\n\nexport type LinkExpressionWhere<TFrom, TTo> = {\n $with?: BOperator;\n $where?: Array<LinkExpression<TFrom, TTo>>;\n};\n\n\n//TODO: currently not ssupport a \"revert\" link expression, so ignore.\n//export type LinkExpressionPredicate<TFrom, TTo> = (from: TFrom, to: TTo) => boolean;\n\nexport type LinkExpressionObject<TFrom, TTo> = LinkExpressionWhere<TFrom, TTo> & LinkOn<TFrom, TTo>;\n\nexport type LinkExpression<TFrom, TTo> = LinkExpressionObject<TFrom, TTo>; // | LinkExpressionPredicate<TFrom, TTo>;\n\nexport function isLinkExpressionKey(key: string): boolean {\n return (key === \"$with\" || key === \"$where\");\n}\n","import { BOperator, ROperator_Atom, ROperator_Array } from \"./_defines\";\n\n/*\nexport interface IObject<T extends ObjectType> {\n type: T\n parameters: ParameterMap[T]\n};\ntype ParameterMap = {\n \"==\": string\n \"IN\": string[]\n};\nexport type ObjectType = keyof ParameterMap;\nlet test: IObject<\"IN\"> = {\n type: \"==\",\n parameters: \"test\"\n};\n*/\n\nexport type QueryOnAtomValue<T, P extends keyof T> = {\n $op?: ROperator_Atom;\n $val: T[P] | null | undefined;\n};\n\nexport type QueryOnArrayValue<T, P extends keyof T> = {\n $op?: ROperator_Array;\n $val: T[P][];\n};\n\nexport type QueryOnValue<T, P extends keyof T> = QueryOnAtomValue<T, P> | QueryOnArrayValue<T, P>;\n\nexport type QueryOn<T> = {\n [P in keyof T]?: QueryOnValue<T, P> | T[P];\n};\n\nexport type QueryExpressionWhere<T> = {\n $with?: BOperator;\n $where?: Array<QueryExpression<T>>;\n};\n\nexport type QueryExpressionPredicate<T> = (item: T) => boolean;\n\nexport type QueryExpressionObject<T> = QueryExpressionWhere<T> & QueryOn<T>;\n\nexport type QueryExpression<T> = QueryExpressionObject<T> | QueryExpressionPredicate<T>;\n\nexport function isQueryExpressionKey(key: string): boolean {\n return (key === \"$with\" || key === \"$where\");\n}\n","\nexport * from \"./providers\";\nexport * from \"./kodo\";\nexport * from \"./nodes/\";\nexport * from \"./expressions\";\nexport * from \"./translators\";\nexport * from \"./utils\";\n","import { DataNode, DataNodeMap, LinkNode, QueryNode } from \"./nodes\";\nimport { IDataProvider } from \"./providers\";\nimport { INodeTranslator } from \"./translators\";\nimport { generateHashCode } from \"./utils\";\n\nexport interface ExploreOption {\n tierLimit: number;\n}\n\nexport interface KodoOption extends ExploreOption {\n cache: boolean;\n recursion: boolean;\n}\n\n//It's bulky, but it's powerful\nexport class Kodo {\n\n translators: INodeTranslator[];\n providers: IDataProvider[];\n nodes: DataNodeMap;\n opt: KodoOption;\n\n private getDefaultOption(opt?: Partial<KodoOption>): KodoOption {\n let defaultOpt: KodoOption = {\n cache: true,\n recursion: true,\n tierLimit: 0\n };\n\n let theOpt = Object.assign(defaultOpt, opt || {});\n return theOpt;\n }\n\n constructor(protected name: string, opt?: Partial<KodoOption>) {\n this.translators = [];\n this.providers = [];\n this.nodes = new DataNodeMap();\n this.opt = this.getDefaultOption(opt);\n }\n\n setOption(opt: Partial<KodoOption>) {\n this.opt = Object.assign(this.opt, opt);\n }\n\n linkExpression(expression: string, params?: string[]): void {\n //TODO here:\n //expression: ((a == b && a <> c) || (b like \"Armstrong\"))\n //Need a volunteer who's familar w/ complier | interpreter to coding on this...\n }\n\n registerTranslator(translator: INodeTranslator) {\n this.translators.push(translator);\n }\n\n registerProvider(provider: IDataProvider) {\n this.providers.push(provider);\n }\n\n private loopExplore<T>(startup: QueryNode<T>, exlpreOpt: ExploreOption): void {\n if (!this.opt.recursion) {\n if (this.nodes.existNS(startup.$ns)) { return; }\n }\n if (this.opt.tierLimit) {\n if (exlpreOpt.tierLimit >= this.opt.tierLimit) { return; }\n }\n\n //let dNodes: DataNode<any>[] = [];\n let foundList: DataNode<any>[] = [];\n\n //1. load data from provider\n this.providers.forEach(p => {\n\n //1.1 query\n let founds = p.lookup(startup);\n \n //1.2 try add\n founds.forEach(f => {\n let added = this.nodes.tryAdd(f);\n if (added) { foundList.push(f); }\n });\n });\n\n if (foundList.length <= 0) { return; }\n\n foundList.forEach(dn => {\n \n this.translators.forEach(t => {\n if (!t.match(dn)) { return; }\n\n //2. translate\n let qn = t.translate<any, any>(dn);\n \n //3. continue search\n qn.forEach(q => {\n this.loopExplore(q, {\n tierLimit: exlpreOpt.tierLimit + 1\n });\n });\n });\n });\n }\n\n explore<T>(startup: QueryNode<T>): DataNode<any>[] {\n if (!this.opt.cache) {\n this.nodes.clear();\n }\n\n if (!startup.$id) {\n let qnid = generateHashCode(startup);\n startup.$id = `qn-${startup.$ns}-$startup-${qnid}`;\n }\n this.loopExplore(startup, {\n tierLimit: 0\n });\n \n return this.nodes.getList();\n }\n}\n","import { NodeBase } from \"./nodeBase\";\nimport { QueryNode } from \"./queryNode\";\n\n/*\nexport type DataNodeObject<T> = {\n [P in keyof T]?: {\n //$expression?: LinkExpression;\n $from?: QueryNode<T>;\n $val: T[P];\n };\n};\n*/\n\nexport class DataNode<T> extends NodeBase {\n $fromQN?: QueryNode<T>;\n\n data: Partial<T>;\n}\n\nexport class DataNodeMap {\n nodes: Map<string, DataNode<any>>;\n ns: Map<string, DataNode<any>[]>;\n\n constructor() {\n this.nodes = new Map<string, DataNode<any>>();\n this.ns = new Map<string, DataNode<any>[]>();\n }\n\n tryAdd<T>(node: DataNode<T>): boolean {\n let nodeid = `${node.$ns}-${node.$id}`;\n\n //do not add if exist.\n if (this.nodes.get(nodeid)) {\n return false;\n }\n\n //add node map\n this.nodes.set(nodeid, node);\n\n //add ns map\n let nodeNS = this.ns.get(node.$ns);\n if (!nodeNS) {\n nodeNS = [];\n this.ns.set(node.$ns, nodeNS);\n }\n nodeNS.push(node);\n\n return true;\n }\n\n getList(): DataNode<any>[] {\n return Array.from(this.nodes.values());\n }\n\n clear(): void {\n this.nodes.clear();\n this.ns.clear();\n }\n\n existNS(ns: string): boolean {\n let rtn = this.ns.get(ns);\n\n return !!rtn;\n }\n}","\nexport * from \"./nodeBase\";\nexport * from \"./dataNode\";\nexport * from \"./queryNode\";\nexport * from \"./linkNode\";\n","import { LinkExpression } from \"../expressions\";\nimport { NodeBase } from \"./nodeBase\";\n\nexport class LinkNode<TFrom, TTo> extends NodeBase {\n $fromNS: string;\n $toNS: string;\n\n protected $type?: null | undefined | \"R\";\n\n expression: LinkExpression<TFrom, TTo>;\n\n private static revertExpression<TFrom, TTo>(origin: LinkExpression<TFrom, TTo>): LinkExpression<TTo, TFrom> {\n\n if (typeof origin === \"function\") { return origin as LinkExpression<TTo, TFrom>; }\n\n let rtn: LinkExpression<TTo, TFrom> = {\n $from: origin.$to,\n $to: origin.$from,\n $with: origin.$with,\n $where: []\n };\n\n //when ==, means A->B && B->A\n if (origin.$op === \"==\") {\n rtn.$op = origin.$op;\n origin.$where?.forEach(m => {\n let r = this.revertExpression(m);\n if (r) { rtn.$where.push(r); }\n });\n }\n\n return rtn;\n }\n\n static revert<TFrom, TTo>(node: LinkNode<TFrom, TTo>): LinkNode<TTo, TFrom> | null {\n\n let rExp = LinkNode.revertExpression(node.expression);\n if (!rExp) { return null; }\n\n let rtn: LinkNode<TTo, TFrom> = new LinkNode<TTo, TFrom>();\n rtn.$id = `${node.$id}-r`;\n rtn.$type = \"R\";\n rtn.$ns = node.$ns;\n rtn.$fromNS = node.$toNS;\n rtn.$toNS = node.$fromNS;\n rtn.expression = rExp;\n\n return rtn;\n }\n}\n","\nexport abstract class NodeBase {\n $id?: number | string;\n $ns: string;\n}","import { QueryExpression } from \"../expressions/queryExpression\";\nimport { DataNode } from \"./dataNode\";\nimport { LinkNode } from \"./linkNode\";\nimport { NodeBase } from \"./nodeBase\";\n\n/*\nexport type NNodeValueType = Date | string | number | null;\n\nexport class NNodeValue {\n [prop: string]: NNodeValueType;\n}\n*/\n\nexport class QueryNode<T> extends NodeBase {\n $fromDN?: DataNode<any>;\n $fromLN?: LinkNode<any, T>;\n\n expression: QueryExpression<T>;\n}\n","import { DataNode, QueryNode } from \"../nodes\";\n\nexport interface IDataProvider {\n lookup<T>(node: QueryNode<T>): DataNode<any>[];\n}\n","\nexport * from \"./iDataProvider\";\nexport * from \"./memoryProvider\";\n","import { DataNode } from \"../nodes\";\nimport { QueryNode } from \"../nodes/queryNode\";\nimport { QueryExpression, ROperator, BOperator, isQueryExpressionKey, QueryOn, QueryOnValue, QueryExpressionObject } from \"../expressions\";\nimport { IDataProvider } from \"./iDataProvider\";\nimport { generateHashCode, isNullOrUndefined } from \"../utils\";\n\n//defer means delay to judge\ndeclare type MatchResult = true | false | \"defer\";\n\nexport class MemoryData<T> {\n ns: string;\n val: T;\n}\n\nexport class MemoryProvider implements IDataProvider {\n private objs: MemoryData<any>[];\n\n constructor() {\n this.objs = [];\n }\n\n add<T>(namespace: string, obj: T) {\n this.objs.push({\n ns: namespace,\n val: obj\n });\n }\n\n private copmareNull(op: ROperator, val: any, dataVal: any): boolean {\n switch (op) {\n case \"==\":\n return isNullOrUndefined(dataVal);\n case \"!=\":\n return !isNullOrUndefined(dataVal);\n case \"===\":\n return (dataVal === val);\n case \"!==\":\n return (dataVal !== val);\n default:\n return false;\n }\n }\n\n private isMatchData(key: string, op: ROperator, opVal: any, data: any): boolean {\n let dataVal = data[key];\n\n if (isNullOrUndefined(opVal)) {\n return this.copmareNull(op, opVal, dataVal);\n }\n\n op ||= \"==\";\n switch (op) {\n case \"==\":\n return (dataVal == opVal);\n case \"===\":\n return (dataVal === opVal);\n case \"!=\":\n return (dataVal != opVal);\n case \"!==\":\n return (dataVal !== opVal);\n case \">\":\n return (dataVal > opVal);\n case \">=\":\n return (dataVal >= opVal);\n case \"<\":\n return (dataVal < opVal);\n case \"<=\":\n return (dataVal <= opVal);\n case \"IN\":\n if (opVal instanceof Array) {\n return opVal.some(m => m == dataVal);\n }\n return false;\n case \"!IN\":\n if (opVal instanceof Array) {\n return !opVal.some(m => m == dataVal);\n }\n return false;\n default:\n break;\n }\n \n throw { key: \"MemoryProvider.isMatchData\", exp: \"Not implemented yet.\" };\n }\n\n private assumeMatchList(matchList: MatchResult[], bVal: boolean): MatchResult {\n let rtn: MatchResult = \"defer\";\n\n matchList.every(m => {\n //continue\n if (m === \"defer\") { return true; }\n\n if (m === bVal) {\n rtn = bVal;\n\n return false; //break;\n } else {\n rtn = !bVal;\n }\n\n //continue;\n return true;\n });\n\n return rtn;\n }\n\n private isAllMatchWith(con: BOperator, matchList: MatchResult[]): MatchResult {\n if (matchList.length <= 0) {\n return \"defer\";\n }\n\n if (con === \"&&\") {\n /*\n let rtn: MatchResult = \"defer\";\n matchList.every(m => {\n if (m === false) {\n rtn = false;\n return false; //break;\n }\n\n if (m === true) {\n rtn = true;\n }\n\n //continue;\n return true;\n });\n */\n let rtn = this.assumeMatchList(matchList, false);\n\n return rtn;\n } else if (con === \"||\") {\n /*\n let rtn: MatchResult = \"defer\";\n matchList.every(m => {\n if (m === true) {\n rtn = true;\n return false; //break;\n }\n\n if (m === false) {\n rtn = false;\n }\n\n //continue;\n return true;\n });\n */\n \n let rtn = this.assumeMatchList(matchList, true);\n return rtn;\n } else {\n throw { key: \"MemoryProvider.isMatchWith\", exp: `QueryCondition ${con} not allowed.` };\n }\n }\n\n private matchOnData<T>(where: QueryExpressionObject<T>, data: any): MatchResult {\n let con: BOperator = where.$with || \"&&\";\n let isAnd = (con === \"&&\");\n let matchList: boolean[] = [];\n\n for (let key in where as QueryOn<T>) {\n if (isQueryExpressionKey(key)) { continue; }\n\n let val: any = where[key];\n\n let match: boolean = false;\n\n if (typeof val === \"object\") {\n let theVal = val as QueryOnValue<T, keyof T>;\n\n match = this.isMatchData(key, theVal.$op, theVal.$val, data);\n } else {\n match = this.isMatchData(key, \"==\", val, data);\n }\n\n matchList.push(match);\n\n if (!match && isAnd) { return false; }\n }\n\n return this.isAllMatchWith(con, matchList);\n }\n\n private match<T>(expression: QueryExpression<T>, data: any): MatchResult {\n \n let matchList: MatchResult[] = [];\n\n if (typeof expression === \"function\") {\n return expression(data);\n }\n\n let con: BOperator = expression.$with || \"&&\";\n let isAnd = (con === \"&&\");\n\n let matched = this.matchOnData(expression, data);\n if (!matched && isAnd) { return false; }\n \n matchList.push(matched);\n\n if (expression.$where?.length > 0) {\n expression.$where.every(w => {\n let match = this.match<T>(w, data);\n matchList.push(match);\n \n //break:\n if (!matched && isAnd) { return false; }\n\n return true;\n });\n }\n\n let rtn = this.isAllMatchWith(con, matchList);\n return rtn;\n }\n\n lookup<T>(qNode: QueryNode<T>): DataNode<any>[] {\n //find match\n let list = this.objs.filter(m => {\n if (qNode.$ns !== m.ns) { return false; }\n\n let rtn = this.match(qNode.expression, m.val);\n\n //regards the final \"defer\" as false\n if (rtn === \"defer\") { return false; }\n else { return rtn; }\n });\n\n //convert to data node\n let rtn = list.map(m => {\n let node = new DataNode<T>();\n node.$fromQN = qNode;\n node.$ns = m.ns;\n node.data = m.val;\n node.$id = m.val?.id || generateHashCode(m.val); //TODO here: use hashcode to generate?\n return node;\n });\n\n return rtn;\n }\n}","import { DataNode, LinkNode, QueryNode } from \"../nodes\";\n\nexport interface INodeTranslator {\n all(): LinkNode<any, any>[];\n link<TFrom, TTo>(ln: LinkNode<TFrom, TTo>): boolean;\n match<TFrom>(dn: DataNode<TFrom>): boolean;\n translate<TFrom, TTo>(data: DataNode<TFrom>): QueryNode<TTo>[];\n}\n","\nexport * from \"./iNodeTranslator\";\nexport * from \"./nodeTranslator\";","import { LinkExpression, QueryExpressionObject, QueryOnValue, convertLP2RO, revertLinkOperator } from \"../expressions\";\nimport { DataNode, LinkNode, QueryNode } from \"../nodes\";\nimport { generateHashCode } from \"../utils\";\nimport { INodeTranslator } from \"./iNodeTranslator\";\n\n//DataNode + LinkNode => QueryNode\nexport class NodeTranslator implements INodeTranslator {\n private linkNodes: LinkNode<any, any>[];\n\n constructor() {\n this.linkNodes = [];\n }\n\n all(): LinkNode<any, any>[] {\n return this.linkNodes;\n }\n\n //by default, always match for use.\n match<TFrom>(dn: DataNode<TFrom>): boolean {\n return true;\n }\n\n link<TFrom, TTo>(ln: LinkNode<TFrom, TTo>): boolean {\n if (!ln.$id) {\n let lnid = generateHashCode(ln);\n ln.$id = `ln-${ln.$fromNS}-${ln.$toNS}-${lnid}`;\n }\n this.linkNodes.push(ln);\n\n let revertLink = LinkNode.revert(ln);\n if (revertLink) { this.linkNodes.push(revertLink); }\n\n return true;\n }\n\n private tryMapOnData<TFrom, TTo>(rtnQE: QueryExpressionObject<TTo>, where: LinkExpression<TFrom, TTo>, data: DataNode<TFrom>): boolean {\n let dataVal = data.data[where.$from];\n if (dataVal === undefined) { return false; }\n\n let rop = revertLinkOperator(where.$op);\n if (!rop) { return false; }\n\n rtnQE.$with = where.$with;\n\n rtnQE[where.$to] ||= {} as any;\n (rtnQE[where.$to] as QueryOnValue<TTo, keyof TTo>).$op = convertLP2RO(rop);\n (rtnQE[where.$to] as QueryOnValue<TTo, keyof TTo>).$val = dataVal as any; //TODO here: better strong type?\n }\n\n private tryMap<TFrom, TTo>(rtnQE: QueryExpressionObject<TTo>, expression: LinkExpression<TFrom, TTo>, data: DataNode<TFrom>): void {\n rtnQE.$with = expression.$with;\n\n this.tryMapOnData(rtnQE, expression, data);\n\n if (expression.$where?.length > 0) {\n expression.$where.forEach(w => {\n w = w as LinkExpression<TFrom, TTo>;\n let qeWhere: QueryExpressionObject<TTo> = {};\n qeWhere.$with = w.$with;\n qeWhere.$where = [];\n this.tryMap(qeWhere, w, data);\n rtnQE.$where.push(qeWhere);\n });\n }\n }\n\n //DataNode + LinkNode => QueryNode\n translate<TFrom, TTo>(data: DataNode<TFrom>): QueryNode<TTo>[] {\n let rtn = [];\n\n this.linkNodes.forEach(ln => {\n if (ln.$fromNS !== data.$ns) { return; }\n\n let qn = new QueryNode<TTo>();\n qn.$id = `qn-${data.$ns}-${data.$id}-${ln.$id}`;\n qn.$ns = ln.$toNS;\n qn.$fromDN = data;\n qn.$fromLN = ln;\n qn.expression = {};\n qn.expression.$where = [];\n\n /*\n let lnExp = ln.expression as LinkExpression<TFrom, TTo>\n if (typeof lnExp === \"function\") {\n lnExp()\n qn.expression = to => lnExp()\n }\n */\n\n this.tryMap(qn.expression, ln.expression as LinkExpression<TFrom, TTo>, data);\n \n rtn.push(qn);\n });\n\n return rtn;\n }\n}\n","\nconst SEED_DEFAULT = Math.ceil(Math.random() * 100000);\n\nfunction objToString(obj: any): string {\n let str = \"null\";\n let type = typeof obj;\n switch (type) {\n case \"undefined\":\n str = \"undefined\";\n break;\n case \"string\":\n str = obj;\n break;\n case \"boolean\":\n case \"number\":\n case \"bigint\":\n case \"function\":\n case \"symbol\":\n str = obj;\n break;\n case \"object\":\n try {\n obj = obj || null;\n str = JSON.stringify(obj || null);\n }\n catch(e) {\n //swallow exception\n }\n break;\n default:\n break;\n };\n\n return str;\n}\n\nexport function generateHashCode(obj: any,\n opt?: {\n seed?: number\n }): string {\n //let seed = opt?.seed || Math.ceil(Math.random() * 100000);\n let seed = opt?.seed || SEED_DEFAULT;\n\n let str = objToString(obj);\n let hash = seed;\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) - hash + str.charCodeAt(i)\n hash |= 0 //to 32bit integer\n }\n\n //ensure positive num\n hash = hash & 0x7FFFFFFF;\n\n //console.warn(hash);\n\n return hash.toString();\n}\n","\nexport * from \"./hash\";\nexport * from \"./objectUtil\";","\n\nexport function isNullOrUndefined(obj: any) {\n return (obj === null || obj === undefined);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/index.ts\");\n",""],"names":[],"sourceRoot":""}
|