kodo-core 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/expressions/linkExpression.d.ts +2 -1
- package/dist/expressions/queryExpression.d.ts +3 -1
- package/dist/kodo-core.min.js +23 -3
- package/dist/kodo-core.min.js.map +1 -1
- package/dist/kodo.d.ts +6 -6
- package/dist/nodes/linkNode.d.ts +1 -0
- package/dist/translators/iNodeTranslator.d.ts +1 -0
- package/dist/translators/nodeTranslator.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,6 +15,9 @@ Then we need write `expression` to describe the data relationship & connect them
|
|
|
15
15
|
By doing the 2 preparations, we can then give a detailed data from any `kodo node` & start to query.
|
|
16
16
|
It then will select & load all the related data via your giving.
|
|
17
17
|
|
|
18
|
+
## Version Updates
|
|
19
|
+
* v0.0.4: Support query expression on `QueryNode<T>` when explore.
|
|
20
|
+
> i.e. `expression: p => p.orderid === "o3" && p.id === "p3-2"`
|
|
18
21
|
|
|
19
22
|
## Design
|
|
20
23
|
* Kodo-Overview:
|
|
@@ -8,5 +8,6 @@ export type LinkExpressionWhere<TFrom, TTo> = {
|
|
|
8
8
|
$with?: BOperator;
|
|
9
9
|
$where?: Array<LinkExpression<TFrom, TTo>>;
|
|
10
10
|
};
|
|
11
|
-
export type
|
|
11
|
+
export type LinkExpressionObject<TFrom, TTo> = LinkExpressionWhere<TFrom, TTo> & LinkOn<TFrom, TTo>;
|
|
12
|
+
export type LinkExpression<TFrom, TTo> = LinkExpressionObject<TFrom, TTo>;
|
|
12
13
|
export declare function isLinkExpressionKey(key: string): boolean;
|
|
@@ -15,5 +15,7 @@ export type QueryExpressionWhere<T> = {
|
|
|
15
15
|
$with?: BOperator;
|
|
16
16
|
$where?: Array<QueryExpression<T>>;
|
|
17
17
|
};
|
|
18
|
-
export type
|
|
18
|
+
export type QueryExpressionPredicate<T> = (item: T) => boolean;
|
|
19
|
+
export type QueryExpressionObject<T> = QueryExpressionWhere<T> & QueryOn<T>;
|
|
20
|
+
export type QueryExpression<T> = QueryExpressionObject<T> | QueryExpressionPredicate<T>;
|
|
19
21
|
export declare function isQueryExpressionKey(key: string): boolean;
|
package/dist/kodo-core.min.js
CHANGED
|
@@ -180,7 +180,8 @@ class Kodo {
|
|
|
180
180
|
}
|
|
181
181
|
linkExpression(expression, params) {
|
|
182
182
|
//TODO here:
|
|
183
|
-
//
|
|
183
|
+
//expression: ((a == b && a <> c) || (b like "Armstrong"))
|
|
184
|
+
//Need a volunteer who's familar w/ complier | interpreter to coding on this...
|
|
184
185
|
}
|
|
185
186
|
registerTranslator(translator) {
|
|
186
187
|
this.translators.push(translator);
|
|
@@ -203,8 +204,9 @@ class Kodo {
|
|
|
203
204
|
let foundList = [];
|
|
204
205
|
//1. load data from provider
|
|
205
206
|
this.providers.forEach(p => {
|
|
206
|
-
//1. query
|
|
207
|
+
//1.1 query
|
|
207
208
|
let founds = p.lookup(startup);
|
|
209
|
+
//1.2 try add
|
|
208
210
|
founds.forEach(f => {
|
|
209
211
|
let added = this.nodes.tryAdd(f);
|
|
210
212
|
if (added) {
|
|
@@ -354,6 +356,9 @@ const nodeBase_1 = __webpack_require__(/*! ./nodeBase */ "./src/nodes/nodeBase.t
|
|
|
354
356
|
class LinkNode extends nodeBase_1.NodeBase {
|
|
355
357
|
static revertExpression(origin) {
|
|
356
358
|
var _a;
|
|
359
|
+
if (typeof origin === "function") {
|
|
360
|
+
return origin;
|
|
361
|
+
}
|
|
357
362
|
let rtn = {
|
|
358
363
|
$from: origin.$to,
|
|
359
364
|
$to: origin.$from,
|
|
@@ -379,6 +384,7 @@ class LinkNode extends nodeBase_1.NodeBase {
|
|
|
379
384
|
}
|
|
380
385
|
let rtn = new LinkNode();
|
|
381
386
|
rtn.$id = `${node.$id}-r`;
|
|
387
|
+
rtn.$type = "R";
|
|
382
388
|
rtn.$ns = node.$ns;
|
|
383
389
|
rtn.$fromNS = node.$toNS;
|
|
384
390
|
rtn.$toNS = node.$fromNS;
|
|
@@ -642,6 +648,9 @@ class MemoryProvider {
|
|
|
642
648
|
match(expression, data) {
|
|
643
649
|
var _a;
|
|
644
650
|
let matchList = [];
|
|
651
|
+
if (typeof expression === "function") {
|
|
652
|
+
return expression(data);
|
|
653
|
+
}
|
|
645
654
|
let con = expression.$with || "&&";
|
|
646
655
|
let isAnd = (con === "&&");
|
|
647
656
|
let matched = this.matchOnData(expression, data);
|
|
@@ -753,7 +762,10 @@ class NodeTranslator {
|
|
|
753
762
|
constructor() {
|
|
754
763
|
this.linkNodes = [];
|
|
755
764
|
}
|
|
756
|
-
|
|
765
|
+
all() {
|
|
766
|
+
return this.linkNodes;
|
|
767
|
+
}
|
|
768
|
+
//by default, always match for use.
|
|
757
769
|
match(dn) {
|
|
758
770
|
return true;
|
|
759
771
|
}
|
|
@@ -790,6 +802,7 @@ class NodeTranslator {
|
|
|
790
802
|
this.tryMapOnData(rtnQE, expression, data);
|
|
791
803
|
if (((_a = expression.$where) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
792
804
|
expression.$where.forEach(w => {
|
|
805
|
+
w = w;
|
|
793
806
|
let qeWhere = {};
|
|
794
807
|
qeWhere.$with = w.$with;
|
|
795
808
|
qeWhere.$where = [];
|
|
@@ -812,6 +825,13 @@ class NodeTranslator {
|
|
|
812
825
|
qn.$fromLN = ln;
|
|
813
826
|
qn.expression = {};
|
|
814
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
|
+
*/
|
|
815
835
|
this.tryMap(qn.expression, ln.expression, data);
|
|
816
836
|
rtn.push(qn);
|
|
817
837
|
});
|
|
@@ -1 +1 @@
|
|
|
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\nexport type LinkExpression<TFrom, TTo> = LinkExpressionWhere<TFrom, TTo> & LinkOn<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 QueryExpression<T> = QueryExpressionWhere<T> & QueryOn<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 private translators: INodeTranslator[];\n private providers: IDataProvider[];\n private nodes: DataNodeMap;\n private 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 //this.expressions.push(expression);\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 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. query\n let founds = p.lookup(startup);\n \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 expression: LinkExpression<TFrom, TTo>;\n\n private static revertExpression<TFrom, TTo>(origin: LinkExpression<TFrom, TTo>): LinkExpression<TTo, TFrom> {\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 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.$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 } 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: QueryExpression<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 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 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, QueryExpression, 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 //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: QueryExpression<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: QueryExpression<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 let qeWhere: QueryExpression<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 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":""}
|
|
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":""}
|
package/dist/kodo.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DataNode, QueryNode } from "./nodes";
|
|
1
|
+
import { DataNode, DataNodeMap, QueryNode } from "./nodes";
|
|
2
2
|
import { IDataProvider } from "./providers";
|
|
3
3
|
import { INodeTranslator } from "./translators";
|
|
4
4
|
export interface ExploreOption {
|
|
@@ -10,16 +10,16 @@ export interface KodoOption extends ExploreOption {
|
|
|
10
10
|
}
|
|
11
11
|
export declare class Kodo {
|
|
12
12
|
protected name: string;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
translators: INodeTranslator[];
|
|
14
|
+
providers: IDataProvider[];
|
|
15
|
+
nodes: DataNodeMap;
|
|
16
|
+
opt: KodoOption;
|
|
17
17
|
private getDefaultOption;
|
|
18
18
|
constructor(name: string, opt?: Partial<KodoOption>);
|
|
19
19
|
setOption(opt: Partial<KodoOption>): void;
|
|
20
20
|
linkExpression(expression: string, params?: string[]): void;
|
|
21
21
|
registerTranslator(translator: INodeTranslator): void;
|
|
22
22
|
registerProvider(provider: IDataProvider): void;
|
|
23
|
-
loopExplore
|
|
23
|
+
private loopExplore;
|
|
24
24
|
explore<T>(startup: QueryNode<T>): DataNode<any>[];
|
|
25
25
|
}
|
package/dist/nodes/linkNode.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { NodeBase } from "./nodeBase";
|
|
|
3
3
|
export declare class LinkNode<TFrom, TTo> extends NodeBase {
|
|
4
4
|
$fromNS: string;
|
|
5
5
|
$toNS: string;
|
|
6
|
+
protected $type?: null | undefined | "R";
|
|
6
7
|
expression: LinkExpression<TFrom, TTo>;
|
|
7
8
|
private static revertExpression;
|
|
8
9
|
static revert<TFrom, TTo>(node: LinkNode<TFrom, TTo>): LinkNode<TTo, TFrom> | null;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DataNode, LinkNode, QueryNode } from "../nodes";
|
|
2
2
|
export interface INodeTranslator {
|
|
3
|
+
all(): LinkNode<any, any>[];
|
|
3
4
|
link<TFrom, TTo>(ln: LinkNode<TFrom, TTo>): boolean;
|
|
4
5
|
match<TFrom>(dn: DataNode<TFrom>): boolean;
|
|
5
6
|
translate<TFrom, TTo>(data: DataNode<TFrom>): QueryNode<TTo>[];
|
|
@@ -3,6 +3,7 @@ import { INodeTranslator } from "./iNodeTranslator";
|
|
|
3
3
|
export declare class NodeTranslator implements INodeTranslator {
|
|
4
4
|
private linkNodes;
|
|
5
5
|
constructor();
|
|
6
|
+
all(): LinkNode<any, any>[];
|
|
6
7
|
match<TFrom>(dn: DataNode<TFrom>): boolean;
|
|
7
8
|
link<TFrom, TTo>(ln: LinkNode<TFrom, TTo>): boolean;
|
|
8
9
|
private tryMapOnData;
|