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 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 LinkExpression<TFrom, TTo> = LinkExpressionWhere<TFrom, TTo> & LinkOn<TFrom, TTo>;
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 QueryExpression<T> = QueryExpressionWhere<T> & QueryOn<T>;
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;
@@ -180,7 +180,8 @@ class Kodo {
180
180
  }
181
181
  linkExpression(expression, params) {
182
182
  //TODO here:
183
- //this.expressions.push(expression);
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
- //always match for use.
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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;ACHA,SAAgB,kBAAkB,CAAC,EAAgB;IAC/C,QAAO,EAAE,EAAE;QACP,KAAK,GAAG;YACJ,OAAO,GAAG,CAAC;QACf,KAAK,IAAI;YACL,OAAO,IAAI,CAAC;QAChB,KAAK,GAAG;YACJ,OAAO,GAAG,CAAC;QACf,KAAK,IAAI;YACL,OAAO,IAAI,CAAC;QAChB,KAAK,IAAI,EAAG,WAAW;YACnB,OAAO,IAAI,CAAC;QAChB;YACI,OAAO,EAAE,CAAC;KACjB;AACL,CAAC;AAfD,gDAeC;AAED,SAAgB,YAAY,CAAC,EAAgB;IACzC,QAAQ,EAAE,EAAE;QACR,KAAK,IAAI,EAAG,WAAW;YACnB,OAAO,IAAI,CAAC;QAChB;YACI,OAAO,EAAE,CAAC;KACjB;AACL,CAAC;AAPD,oCAOC;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BD,8FAA2B;AAC3B,0GAAiC;AACjC,4GAAkC;;;;;;;;;;;;;;ACkBlC,SAAgB,mBAAmB,CAAC,GAAW;IAC3C,OAAO,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,CAAC,CAAC;AACjD,CAAC;AAFD,kDAEC;;;;;;;;;;;;;;ACsBD,SAAgB,oBAAoB,CAAC,GAAW;IAC5C,OAAO,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,CAAC,CAAC;AACjD,CAAC;AAFD,oDAEC;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9CD,0FAA4B;AAC5B,0EAAuB;AACvB,mFAAyB;AACzB,8FAA8B;AAC9B,8FAA8B;AAC9B,kFAAwB;;;;;;;;;;;;;;ACNxB,2EAAqE;AAGrE,2EAA2C;AAW3C,+BAA+B;AAC/B,MAAa,IAAI;IAOL,gBAAgB,CAAC,GAAyB;QAC9C,IAAI,UAAU,GAAe;YACzB,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,CAAC;SACf,CAAC;QAEF,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,YAAsB,IAAY,EAAE,GAAyB;QAAvC,SAAI,GAAJ,IAAI,CAAQ;QAC9B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,mBAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,SAAS,CAAC,GAAwB;QAC9B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,cAAc,CAAC,UAAkB,EAAE,MAAiB;QAChD,YAAY;QACZ,0DAA0D;QAC1D,+EAA+E;IACnF,CAAC;IAED,kBAAkB,CAAC,UAA2B;QAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,gBAAgB,CAAC,QAAuB;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAEO,WAAW,CAAI,OAAqB,EAAE,SAAwB;QAClE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;YACrB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO;aAAE;SACnD;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;YACpB,IAAI,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;gBAAE,OAAO;aAAE;SAC7D;QAED,mCAAmC;QACnC,IAAI,SAAS,GAAoB,EAAE,CAAC;QAEpC,4BAA4B;QAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAEvB,WAAW;YACX,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE/B,aAAa;YACb,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACf,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,KAAK,EAAE;oBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAAE;YACrC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;YAAE,OAAO;SAAE;QAEtC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YAEnB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;oBAAE,OAAO;iBAAE;gBAE7B,cAAc;gBACd,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,CAAW,EAAE,CAAC,CAAC;gBAEnC,oBAAoB;gBACpB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACX,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE;wBAChB,SAAS,EAAE,SAAS,CAAC,SAAS,GAAG,CAAC;qBACrC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,CAAI,OAAqB;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;SACtB;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACd,IAAI,IAAI,GAAG,4BAAgB,EAAC,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,aAAa,IAAI,EAAE,CAAC;SACtD;QACD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YACtB,SAAS,EAAE,CAAC;SACf,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;CACJ;AAtGD,oBAsGC;;;;;;;;;;;;;;ACrHD,oFAAsC;AAGtC;;;;;;;;EAQE;AAEF,MAAa,QAAY,SAAQ,mBAAQ;CAIxC;AAJD,4BAIC;AAED,MAAa,WAAW;IAIpB;QACI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC9C,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,EAA2B,CAAC;IACjD,CAAC;IAED,MAAM,CAAI,IAAiB;QACvB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvC,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC;SAChB;QAED,cAAc;QACd,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE7B,YAAY;QACZ,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;SACjC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,EAAU;QACd,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1B,OAAO,CAAC,CAAC,GAAG,CAAC;IACjB,CAAC;CACJ;AA7CD,kCA6CC;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/DD,wFAA2B;AAC3B,wFAA2B;AAC3B,0FAA4B;AAC5B,wFAA2B;;;;;;;;;;;;;;ACH3B,oFAAsC;AAEtC,MAAa,QAAqB,SAAQ,mBAAQ;IAQtC,MAAM,CAAC,gBAAgB,CAAa,MAAkC;;QAE1E,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;YAAE,OAAO,MAAoC,CAAC;SAAE;QAElF,IAAI,GAAG,GAA+B;YAClC,KAAK,EAAE,MAAM,CAAC,GAAG;YACjB,GAAG,EAAE,MAAM,CAAC,KAAK;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,EAAE;SACb,CAAC;QAEF,6BAA6B;QAC7B,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE;YACrB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACrB,YAAM,CAAC,MAAM,0CAAE,OAAO,CAAC,CAAC,CAAC,EAAE;gBACvB,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,EAAE;oBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAAE;YAClC,CAAC,CAAC,CAAC;SACN;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM,CAAC,MAAM,CAAa,IAA0B;QAEhD,IAAI,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;SAAE;QAE3B,IAAI,GAAG,GAAyB,IAAI,QAAQ,EAAc,CAAC;QAC3D,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAC1B,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;QAChB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;QAEtB,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AA9CD,4BA8CC;;;;;;;;;;;;;;AChDD,MAAsB,QAAQ;CAG7B;AAHD,4BAGC;;;;;;;;;;;;;;ACDD,oFAAsC;AAEtC;;;;;;EAME;AAEF,MAAa,SAAa,SAAQ,mBAAQ;CAKzC;AALD,8BAKC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEjBD,sGAAgC;AAChC,wGAAiC;;;;;;;;;;;;;;ACFjC,4EAAoC;AAEpC,8FAA2I;AAE3I,4EAA+D;AAK/D,MAAa,UAAU;CAGtB;AAHD,gCAGC;AAED,MAAa,cAAc;IAGvB;QACI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,GAAG,CAAI,SAAiB,EAAE,GAAM;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,SAAS;YACb,GAAG,EAAE,GAAG;SACX,CAAC,CAAC;IACP,CAAC;IAEO,WAAW,CAAC,EAAa,EAAE,GAAQ,EAAE,OAAY;QACrD,QAAQ,EAAE,EAAE;YACR,KAAK,IAAI;gBACL,OAAO,6BAAiB,EAAC,OAAO,CAAC,CAAC;YACtC,KAAK,IAAI;gBACL,OAAO,CAAC,6BAAiB,EAAC,OAAO,CAAC,CAAC;YACvC,KAAK,KAAK;gBACN,OAAO,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC;YAC7B,KAAK,KAAK;gBACN,OAAO,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC;YAC7B;gBACI,OAAO,KAAK,CAAC;SACpB;IACL,CAAC;IAEO,WAAW,CAAC,GAAW,EAAE,EAAa,EAAE,KAAU,EAAE,IAAS;QACjE,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAExB,IAAI,6BAAiB,EAAC,KAAK,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SAC/C;QAED,EAAE,KAAF,EAAE,GAAK,IAAI,EAAC;QACZ,QAAQ,EAAE,EAAE;YACR,KAAK,IAAI;gBACL,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC9B,KAAK,KAAK;gBACN,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;YAC/B,KAAK,IAAI;gBACL,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC9B,KAAK,KAAK;gBACN,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;YAC/B,KAAK,GAAG;gBACJ,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;YAC7B,KAAK,IAAI;gBACL,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC9B,KAAK,GAAG;gBACJ,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;YAC7B,KAAK,IAAI;gBACL,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC9B,KAAK,IAAI;gBACL,IAAI,KAAK,YAAY,KAAK,EAAE;oBACxB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;iBACxC;gBACD,OAAO,KAAK,CAAC;YACjB,KAAK,KAAK;gBACN,IAAI,KAAK,YAAY,KAAK,EAAE;oBACxB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;iBACzC;gBACD,OAAO,KAAK,CAAC;YACjB;gBACI,MAAM;SACb;QAED,MAAM,EAAE,GAAG,EAAE,4BAA4B,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC;IAC7E,CAAC;IAEO,eAAe,CAAC,SAAwB,EAAE,IAAa;QAC3D,IAAI,GAAG,GAAgB,OAAO,CAAC;QAE/B,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAChB,UAAU;YACV,IAAI,CAAC,KAAK,OAAO,EAAE;gBAAE,OAAO,IAAI,CAAC;aAAE;YAEnC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACZ,GAAG,GAAG,IAAI,CAAC;gBAEX,OAAO,KAAK,CAAC,CAAG,QAAQ;aAC3B;iBAAM;gBACH,GAAG,GAAG,CAAC,IAAI,CAAC;aACf;YAED,WAAW;YACX,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC;IAEO,cAAc,CAAC,GAAc,EAAE,SAAwB;QAC3D,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC;SAClB;QAED,IAAI,GAAG,KAAK,IAAI,EAAE;YACd;;;;;;;;;;;;;;;cAeE;YACF,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEjD,OAAO,GAAG,CAAC;SACd;aAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACrB;;;;;;;;;;;;;;;cAeE;YAEF,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAChD,OAAO,GAAG,CAAC;SACd;aAAM;YACH,MAAM,EAAE,GAAG,EAAE,4BAA4B,EAAE,GAAG,EAAE,kBAAkB,GAAG,eAAe,EAAE,CAAC;SAC1F;IACL,CAAC;IAEO,WAAW,CAAI,KAA+B,EAAE,IAAS;QAC7D,IAAI,GAAG,GAAc,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC;QACzC,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAC3B,IAAI,SAAS,GAAc,EAAE,CAAC;QAE9B,KAAK,IAAI,GAAG,IAAI,KAAmB,EAAE;YACjC,IAAI,sCAAoB,EAAC,GAAG,CAAC,EAAE;gBAAE,SAAS;aAAE;YAE5C,IAAI,GAAG,GAAQ,KAAK,CAAC,GAAG,CAAC,CAAC;YAE1B,IAAI,KAAK,GAAY,KAAK,CAAC;YAE3B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBACzB,IAAI,MAAM,GAAG,GAA+B,CAAC;gBAE7C,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAChE;iBAAM;gBACH,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;aAClD;YAED,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEtB,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;SACzC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAI,UAA8B,EAAE,IAAS;;QAEtD,IAAI,SAAS,GAAkB,EAAE,CAAC;QAElC,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;YAClC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;SAC3B;QAED,IAAI,GAAG,GAAc,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC;QAC9C,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAE3B,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;SAAE;QAExC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAExB,IAAI,iBAAU,CAAC,MAAM,0CAAE,MAAM,IAAG,CAAC,EAAE;YAC/B,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACxB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAI,CAAC,EAAE,IAAI,CAAC,CAAC;gBACnC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEtB,QAAQ;gBACR,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE;oBAAE,OAAO,KAAK,CAAC;iBAAE;gBAExC,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;SACN;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9C,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM,CAAI,KAAmB;QACzB,YAAY;QACZ,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YAC5B,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;YAEzC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAE9C,oCAAoC;YACpC,IAAI,GAAG,KAAK,OAAO,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;iBACjC;gBAAE,OAAO,GAAG,CAAC;aAAE;QACxB,CAAC,CAAC,CAAC;QAEH,sBAAsB;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;YACnB,IAAI,IAAI,GAAG,IAAI,gBAAQ,EAAK,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;YAClB,IAAI,CAAC,GAAG,GAAG,QAAC,CAAC,GAAG,0CAAE,EAAE,KAAI,4BAAgB,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,sCAAsC;YACxF,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AAnOD,wCAmOC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEhPD,4GAAkC;AAClC,0GAAiC;;;;;;;;;;;;;;ACFjC,8FAAuH;AACvH,4EAAyD;AACzD,4EAA4C;AAG5C,kCAAkC;AAClC,MAAa,cAAc;IAGvB;QACI,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAQ,EAAmB;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAa,EAAwB;QACrC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACT,IAAI,IAAI,GAAG,4BAAgB,EAAC,EAAE,CAAC,CAAC;YAChC,EAAE,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;SACnD;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAExB,IAAI,UAAU,GAAG,gBAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,UAAU,EAAE;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAAE;QAEpD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,YAAY,CAAa,KAAiC,EAAE,KAAiC,EAAE,IAAqB;;QACxH,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,SAAS,EAAE;YAAE,OAAO,KAAK,CAAC;SAAE;QAE5C,IAAI,GAAG,GAAG,oCAAkB,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,KAAK,CAAC;SAAE;QAE3B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAE1B,KAAK,MAAC,KAAK,CAAC,GAAG,MAAf,KAAK,OAAgB,EAAS,EAAC;QAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAkC,CAAC,GAAG,GAAG,8BAAY,EAAC,GAAG,CAAC,CAAC;QAC1E,KAAK,CAAC,KAAK,CAAC,GAAG,CAAkC,CAAC,IAAI,GAAG,OAAc,CAAC,CAAC,gCAAgC;IAC9G,CAAC;IAEO,MAAM,CAAa,KAAiC,EAAE,UAAsC,EAAE,IAAqB;;QACvH,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAE/B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAE3C,IAAI,iBAAU,CAAC,MAAM,0CAAE,MAAM,IAAG,CAAC,EAAE;YAC/B,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC1B,CAAC,GAAG,CAA+B,CAAC;gBACpC,IAAI,OAAO,GAA+B,EAAE,CAAC;gBAC7C,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBACxB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC9B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED,kCAAkC;IAClC,SAAS,CAAa,IAAqB;QACvC,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACxB,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,GAAG,EAAE;gBAAE,OAAO;aAAE;YAExC,IAAI,EAAE,GAAG,IAAI,iBAAS,EAAO,CAAC;YAC9B,EAAE,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;YAChD,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;YAClB,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;YAClB,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC;YAChB,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC;YACnB,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;YAE1B;;;;;;cAME;YAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAwC,EAAE,IAAI,CAAC,CAAC;YAE9E,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AA1FD,wCA0FC;;;;;;;;;;;;;;AC/FD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;AAEvD,SAAS,WAAW,CAAC,GAAQ;IACzB,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,IAAI,IAAI,GAAG,OAAO,GAAG,CAAC;IACtB,QAAQ,IAAI,EAAE;QACV,KAAK,WAAW;YACZ,GAAG,GAAG,WAAW,CAAC;YAClB,MAAM;QACV,KAAK,QAAQ;YACT,GAAG,GAAG,GAAG,CAAC;YACV,MAAM;QACV,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACT,GAAG,GAAG,GAAG,CAAC;YACV,MAAM;QACV,KAAK,QAAQ;YACT,IAAI;gBACA,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC;gBAClB,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;aACrC;YACD,OAAM,CAAC,EAAE;gBACL,mBAAmB;aACtB;YACD,MAAM;QACV;YACI,MAAM;KACb;IAAA,CAAC;IAEF,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAgB,gBAAgB,CAAC,GAAQ,EACrC,GAEC;IACD,4DAA4D;IAC5D,IAAI,IAAI,GAAG,IAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,KAAI,YAAY,CAAC;IAErC,IAAI,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,EAAC,kBAAkB;KAC/B;IAED,qBAAqB;IACrB,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC;IAEzB,qBAAqB;IAErB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AApBD,4CAoBC;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDD,gFAAuB;AACvB,4FAA6B;;;;;;;;;;;;;;ACA7B,SAAgB,iBAAiB,CAAC,GAAQ;IACtC,OAAO,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC;AAC/C,CAAC;AAFD,8CAEC;;;;;;;UCJD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;UEtBA;UACA;UACA;UACA","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
- private translators;
14
- private providers;
15
- private nodes;
16
- private opt;
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<T>(startup: QueryNode<T>, exlpreOpt: ExploreOption): void;
23
+ private loopExplore;
24
24
  explore<T>(startup: QueryNode<T>): DataNode<any>[];
25
25
  }
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kodo-core",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "main": "dist/kodo-core.min.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "repository": "git@github.com:ShadowLei/kodo-core.git",