@j2inn/resolvable-ui-elements 1.0.2 → 1.0.3-alpha.0

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.
Files changed (35) hide show
  1. package/dist/index.d.ts +5 -4
  2. package/dist/index.js +7 -3
  3. package/dist/index.js.map +1 -1
  4. package/dist/resolvableElements/Resolver.d.ts +30 -4
  5. package/dist/resolvableElements/Resolver.js +31 -6
  6. package/dist/resolvableElements/Resolver.js.map +1 -1
  7. package/dist/resolvableElements/elements/expr/ResolvableExprElement.js +4 -8
  8. package/dist/resolvableElements/elements/expr/ResolvableExprElement.js.map +1 -1
  9. package/dist/resolvableElements/elements/expr/ResolvableExprElementMeta.d.ts +1 -0
  10. package/dist/resolvableElements/elements/expr/ResolvableExprElementMeta.js.map +1 -1
  11. package/dist/resolvableElements/elements/function/FunctionElement.js +2 -4
  12. package/dist/resolvableElements/elements/function/FunctionElement.js.map +1 -1
  13. package/dist/resolvableElements/elements/function/FunctionElementMeta.d.ts +1 -0
  14. package/dist/resolvableElements/elements/function/FunctionElementMeta.js.map +1 -1
  15. package/dist/resolvableElements/react/useResolverContext.d.ts +1 -0
  16. package/dist/resolvableElements/react/useResolverContext.jsx +14 -4
  17. package/dist/resolvableElements/react/useResolverContext.jsx.map +1 -1
  18. package/dist_es/index.d.ts +5 -4
  19. package/dist_es/index.js +6 -2
  20. package/dist_es/index.js.map +1 -1
  21. package/dist_es/resolvableElements/Resolver.d.ts +30 -4
  22. package/dist_es/resolvableElements/Resolver.js +31 -6
  23. package/dist_es/resolvableElements/Resolver.js.map +1 -1
  24. package/dist_es/resolvableElements/elements/expr/ResolvableExprElement.js +5 -9
  25. package/dist_es/resolvableElements/elements/expr/ResolvableExprElement.js.map +1 -1
  26. package/dist_es/resolvableElements/elements/expr/ResolvableExprElementMeta.d.ts +1 -0
  27. package/dist_es/resolvableElements/elements/expr/ResolvableExprElementMeta.js.map +1 -1
  28. package/dist_es/resolvableElements/elements/function/FunctionElement.js +2 -4
  29. package/dist_es/resolvableElements/elements/function/FunctionElement.js.map +1 -1
  30. package/dist_es/resolvableElements/elements/function/FunctionElementMeta.d.ts +1 -0
  31. package/dist_es/resolvableElements/elements/function/FunctionElementMeta.js.map +1 -1
  32. package/dist_es/resolvableElements/react/useResolverContext.d.ts +1 -0
  33. package/dist_es/resolvableElements/react/useResolverContext.jsx +14 -4
  34. package/dist_es/resolvableElements/react/useResolverContext.jsx.map +1 -1
  35. package/package.json +52 -52
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- export { type FunctionResult } from './resolvableElements/elements/function/FunctionElement';
1
+ export * from './resolvableElements/Resolver';
2
2
  export { type ResolvableValueElementMeta } from './resolvableElements/elements/ResolvableValueElement';
3
+ export { type UiElementData } from './resolvableElements/elements/UiElement';
3
4
  export { type ResolvableExprElementMeta } from './resolvableElements/elements/expr/ResolvableExprElementMeta';
5
+ export { type FunctionResult } from './resolvableElements/elements/function/FunctionElement';
4
6
  export { isSectionData, type ParametersOfSection, type ResolvedSection, } from './resolvableElements/elements/section/SectionElementMeta';
5
- export { type UiElementData } from './resolvableElements/elements/UiElement';
6
- export { resolveTemplateExpression } from './resolvableElements/resolveTemplatedExpression';
7
7
  export * from './resolvableElements/react/SectionChecker';
8
- export * from './resolvableElements/react/useResolverContext';
9
8
  export * from './resolvableElements/react/useResolveSection';
9
+ export * from './resolvableElements/react/useResolverContext';
10
+ export { resolveTemplateExpression } from './resolvableElements/resolveTemplatedExpression';
10
11
  export * from './useCurrentUser';
package/dist/index.js CHANGED
@@ -18,16 +18,20 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
20
  exports.resolveTemplateExpression = exports.isSectionData = void 0;
21
+ //////////////////////////////////////////////////////////////////////////
22
+ // Elements
23
+ //////////////////////////////////////////////////////////////////////////
24
+ __exportStar(require("./resolvableElements/Resolver"), exports);
21
25
  var SectionElementMeta_1 = require("./resolvableElements/elements/section/SectionElementMeta");
22
26
  Object.defineProperty(exports, "isSectionData", { enumerable: true, get: function () { return SectionElementMeta_1.isSectionData; } });
23
- var resolveTemplatedExpression_1 = require("./resolvableElements/resolveTemplatedExpression");
24
- Object.defineProperty(exports, "resolveTemplateExpression", { enumerable: true, get: function () { return resolveTemplatedExpression_1.resolveTemplateExpression; } });
25
27
  //////////////////////////////////////////////////////////////////////////
26
28
  // React
27
29
  //////////////////////////////////////////////////////////////////////////
28
30
  __exportStar(require("./resolvableElements/react/SectionChecker"), exports);
29
- __exportStar(require("./resolvableElements/react/useResolverContext"), exports);
30
31
  __exportStar(require("./resolvableElements/react/useResolveSection"), exports);
32
+ __exportStar(require("./resolvableElements/react/useResolverContext"), exports);
33
+ var resolveTemplatedExpression_1 = require("./resolvableElements/resolveTemplatedExpression");
34
+ Object.defineProperty(exports, "resolveTemplateExpression", { enumerable: true, get: function () { return resolveTemplatedExpression_1.resolveTemplateExpression; } });
31
35
  //////////////////////////////////////////////////////////////////////////
32
36
  // Other
33
37
  //////////////////////////////////////////////////////////////////////////
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAQH,+FAIiE;AAHhE,mHAAA,aAAa,OAAA;AAKd,8FAA2F;AAAlF,uIAAA,yBAAyB,OAAA;AAClC,0EAA0E;AAC1E,QAAQ;AACR,0EAA0E;AAC1E,4EAAyD;AACzD,gFAA6D;AAC7D,+EAA4D;AAC5D,0EAA0E;AAC1E,QAAQ;AACR,0EAA0E;AAC1E,mDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0EAA0E;AAC1E,WAAW;AACX,0EAA0E;AAC1E,gEAA6C;AAK7C,+FAIiE;AAHhE,mHAAA,aAAa,OAAA;AAId,0EAA0E;AAC1E,QAAQ;AACR,0EAA0E;AAC1E,4EAAyD;AACzD,+EAA4D;AAC5D,gFAA6D;AAC7D,8FAA2F;AAAlF,uIAAA,yBAAyB,OAAA;AAClC,0EAA0E;AAC1E,QAAQ;AACR,0EAA0E;AAC1E,mDAAgC"}
@@ -2,20 +2,46 @@ import { HDict, HGrid } from 'haystack-core';
2
2
  import { Client, Watch } from 'haystack-nclient';
3
3
  export declare const DEFAULT_USER_ROLE_TAG_NAME = "uiElementPermissions";
4
4
  export interface ResolverData {
5
+ /**
6
+ * Haystack client for network communication
7
+ */
5
8
  client: Client;
9
+ /**
10
+ * Current user dict, used to check permissions
11
+ */
6
12
  user?: HDict;
13
+ /**
14
+ * Name of the tag that is expected on the user dict to define its role
15
+ */
7
16
  userRoleTagName?: string;
17
+ /**
18
+ * Function name to be used for expressions eval,
19
+ * used to enable custom backend permission check using elements path
20
+ * @example
21
+ * customEval(\`page/section/elementName\`, parametersDict)
22
+ */
23
+ evalFuncName?: string;
8
24
  }
9
25
  /**
10
26
  * Resolver is a mediator for the network interactions during the resolution process,
11
- * in order to enable future optimizations.
27
+ * in order to enable future optimizations and extra features
12
28
  */
13
- export declare class Resolver {
14
- constructor({ client, user, userRoleTagName, }: ResolverData);
29
+ export declare class Resolver implements ResolverData {
30
+ constructor({ client, user, userRoleTagName, evalFuncName, }: ResolverData);
15
31
  client: Client;
16
32
  user?: HDict;
17
33
  userRoleTagName?: string;
34
+ evalFuncName?: string;
18
35
  read(filter: string): Promise<HGrid<HDict>>;
19
36
  makeWatch(dis: string, grid: HGrid<HDict>): Promise<Watch>;
20
- eval(expr: string): Promise<HGrid<HDict>>;
37
+ /**
38
+ * Eval an expression using either the provided path or otherwse directly the expression
39
+ * Providing the path allows for whitelisting of certain functions to specific user roles
40
+ */
41
+ evalExprElement(expr: string, parameters: HDict, path?: string): Promise<HGrid<HDict>>;
42
+ private _buildExpression;
43
+ /**
44
+ * Evaluate an expression
45
+ */
46
+ private _eval;
21
47
  }
@@ -4,28 +4,53 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Resolver = exports.DEFAULT_USER_ROLE_TAG_NAME = void 0;
7
+ const resolveTemplatedExpression_1 = require("./resolveTemplatedExpression");
7
8
  exports.DEFAULT_USER_ROLE_TAG_NAME = 'uiElementPermissions';
8
9
  /**
9
10
  * Resolver is a mediator for the network interactions during the resolution process,
10
- * in order to enable future optimizations.
11
+ * in order to enable future optimizations and extra features
11
12
  */
12
13
  class Resolver {
13
- constructor({ client, user, userRoleTagName = exports.DEFAULT_USER_ROLE_TAG_NAME, }) {
14
+ constructor({ client, user, userRoleTagName = exports.DEFAULT_USER_ROLE_TAG_NAME, evalFuncName, }) {
14
15
  this.client = client;
15
16
  this.user = user;
16
17
  this.userRoleTagName = userRoleTagName;
18
+ this.evalFuncName = evalFuncName;
17
19
  }
18
20
  client;
19
21
  user;
20
22
  userRoleTagName;
21
- async read(filter) {
23
+ evalFuncName;
24
+ read(filter) {
22
25
  return this.client.ext.read(filter);
23
26
  }
24
- async makeWatch(dis, grid) {
27
+ makeWatch(dis, grid) {
25
28
  return this.client.ops.watch.make(dis, grid);
26
29
  }
27
- async eval(expr) {
28
- return this.client.ext.eval(expr);
30
+ /**
31
+ * Eval an expression using either the provided path or otherwse directly the expression
32
+ * Providing the path allows for whitelisting of certain functions to specific user roles
33
+ */
34
+ evalExprElement(expr, parameters, path) {
35
+ return this._eval(this._buildExpression(expr, parameters, path));
36
+ }
37
+ _buildExpression(expr, parameters, path) {
38
+ if (!!path && this.evalFuncName) {
39
+ return `${this.evalFuncName}(\`${path}\`, ${parameters.toAxon()})`;
40
+ }
41
+ else {
42
+ return (0, resolveTemplatedExpression_1.resolveTemplateExpression)(expr, parameters);
43
+ }
44
+ }
45
+ /**
46
+ * Evaluate an expression
47
+ */
48
+ async _eval(expr) {
49
+ const grid = await this.client.ext.eval(expr);
50
+ if (grid.isError()) {
51
+ console.error('Empty grid result for expression: \n', expr, grid.getError());
52
+ }
53
+ return grid;
29
54
  }
30
55
  }
31
56
  exports.Resolver = Resolver;
@@ -1 +1 @@
1
- {"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../../src/resolvableElements/Resolver.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKU,QAAA,0BAA0B,GAAG,sBAAsB,CAAA;AAQhE;;;GAGG;AACH,MAAa,QAAQ;IACpB,YAAY,EACX,MAAM,EACN,IAAI,EACJ,eAAe,GAAG,kCAA0B,GAC9B;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;IACvC,CAAC;IAED,MAAM,CAAQ;IACd,IAAI,CAAQ;IACZ,eAAe,CAAS;IAExB,KAAK,CAAC,IAAI,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,IAAkB;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;CACD;AA1BD,4BA0BC"}
1
+ {"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../../src/resolvableElements/Resolver.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAIH,6EAAwE;AAE3D,QAAA,0BAA0B,GAAG,sBAAsB,CAAA;AAwBhE;;;GAGG;AACH,MAAa,QAAQ;IACpB,YAAY,EACX,MAAM,EACN,IAAI,EACJ,eAAe,GAAG,kCAA0B,EAC5C,YAAY,GACE;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IACjC,CAAC;IAED,MAAM,CAAQ;IACd,IAAI,CAAQ;IACZ,eAAe,CAAS;IACxB,YAAY,CAAS;IAErB,IAAI,CAAC,MAAc;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,IAAkB;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED;;;OAGG;IACH,eAAe,CACd,IAAY,EACZ,UAAiB,EACjB,IAAa;QAEb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAA;IACjE,CAAC;IAEO,gBAAgB,CACvB,IAAY,EACZ,UAAiB,EACjB,IAAa;QAEb,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAChC,OAAO,GAAG,IAAI,CAAC,YAAY,MAAM,IAAI,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,CAAA;SAClE;aAAM;YACN,OAAO,IAAA,sDAAyB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAA;SAClD;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,KAAK,CAAC,IAAY;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE7C,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,OAAO,CAAC,KAAK,CACZ,sCAAsC,EACtC,IAAI,EACJ,IAAI,CAAC,QAAQ,EAAE,CACf,CAAA;SACD;QAED,OAAO,IAAI,CAAA;IACZ,CAAC;CACD;AAlED,4BAkEC"}
@@ -22,16 +22,12 @@ class ResolvableExprElement extends ResolvableValueElement_1.ResolvableValueElem
22
22
  await this.#updateValue(parameters);
23
23
  };
24
24
  #updateValue = async (parameters) => {
25
- const { expr, refreshAfter } = this._meta;
26
- const resolvedExpression = (0, resolveTemplatedExpression_1.resolveTemplateExpression)(expr, parameters);
27
- const grid = await this.resolver.eval(resolvedExpression);
28
- if (grid.isError()) {
29
- console.error('Empty grid result for expression: \n', resolvedExpression, grid.getError());
30
- return;
31
- }
32
- const val = grid[0]?.get('val');
25
+ const { expr, refreshAfter, path } = this
26
+ ._meta;
27
+ const grid = await this.resolver.evalExprElement(expr, parameters, path);
33
28
  // Identify when it's necessary to unpack the result `val` or not
34
29
  // since the eval wraps the result value in a grid's first dict `val` tag for non-collections.
30
+ const val = grid[0]?.get('val');
35
31
  const shouldUnpackResult = !this.isExpectedResultACollection() && val;
36
32
  if (shouldUnpackResult) {
37
33
  this.value = val;
@@ -1 +1 @@
1
- {"version":3,"file":"ResolvableExprElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/expr/ResolvableExprElement.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iDAA2C;AAC3C,mDAAoD;AACpD,iFAGyC;AAEzC,sEAAkE;AAIlE;;GAEG;AACH,MAAa,qBAEX,SAAQ,+CAAyB;IAClC,MAAM,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEpD,YAAY,IAAiC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAA;IACZ,CAAC;IAED,SAAS,GAAG,CAAC,CAAA;IACb,QAAQ,CAAS;IAEP,YAAY,GAAG,KAAK,EAAE,UAAiB,EAAiB,EAAE;QACnE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IACpC,CAAC,CAAA;IAED,YAAY,GAAG,KAAK,EAAE,UAAiB,EAAiB,EAAE;QACzD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAEtE,MAAM,kBAAkB,GAAG,IAAA,sDAAyB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAEtE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAEzD,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,OAAO,CAAC,KAAK,CACZ,sCAAsC,EACtC,kBAAkB,EAClB,IAAI,CAAC,QAAQ,EAAE,CACf,CAAA;YACD,OAAM;SACN;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QAE/B,iEAAiE;QACjE,8FAA8F;QAC9F,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,GAAG,CAAA;QACrE,IAAI,kBAAkB,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAA;SAChB;aAAM;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;SACjB;QAED,IAAI,YAAY,EAAE;YACjB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,SAAS,EAAE,CAAA;gBAChB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC,EAAE,oBAAI,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAM,CAAC,CAAC,SAAS,CAAC,4BAAW,CAAC,CAAC,KAAK,CAAsB,CAAA;SACrF;IACF,CAAC,CAAA;IAED;;;OAGG;IACH,2BAA2B,GAAG,GAAY,EAAE;QAC3C,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAEhE,OAAO,CACN,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;YACvD,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC3B,CAAA;IACF,CAAC,CAAA;IAES,OAAO,GAAG,KAAK,IAAmB,EAAE;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SAC3B;IACF,CAAC,CAAA;IAED,gBAAgB,GAAmB,GAAG,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAExD,MAAM,UAAU,GAAa,EAAE,CAAA;QAE/B,IAAI,IAAI,EAAE;YACT,IAAA,qDAAwB,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC3C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;SACF;QAED,OAAO,UAAU,CAAA;IAClB,CAAC,CAAA;;AAnFF,sDAoFC"}
1
+ {"version":3,"file":"ResolvableExprElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/expr/ResolvableExprElement.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iDAA2C;AAC3C,mDAAoD;AACpD,iFAA2E;AAE3E,sEAAkE;AAIlE;;GAEG;AACH,MAAa,qBAEX,SAAQ,+CAAyB;IAClC,MAAM,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEpD,YAAY,IAAiC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAA;IACZ,CAAC;IAED,SAAS,GAAG,CAAC,CAAA;IACb,QAAQ,CAAS;IAEP,YAAY,GAAG,KAAK,EAAE,UAAiB,EAAiB,EAAE;QACnE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IACpC,CAAC,CAAA;IAED,YAAY,GAAG,KAAK,EAAE,UAAiB,EAAiB,EAAE;QACzD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,IAAI;aACvC,KAAkC,CAAA;QAEpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAExE,iEAAiE;QACjE,8FAA8F;QAC9F,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QAC/B,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,GAAG,CAAA;QACrE,IAAI,kBAAkB,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAA;SAChB;aAAM;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;SACjB;QAED,IAAI,YAAY,EAAE;YACjB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,SAAS,EAAE,CAAA;gBAChB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC,EAAE,oBAAI,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAM,CAAC,CAAC,SAAS,CAAC,4BAAW,CAAC,CAAC,KAAK,CAAsB,CAAA;SACrF;IACF,CAAC,CAAA;IAED;;;OAGG;IACH,2BAA2B,GAAG,GAAY,EAAE;QAC3C,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAEhE,OAAO,CACN,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;YACvD,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC3B,CAAA;IACF,CAAC,CAAA;IAES,OAAO,GAAG,KAAK,IAAmB,EAAE;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SAC3B;IACF,CAAC,CAAA;IAED,gBAAgB,GAAmB,GAAG,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAExD,MAAM,UAAU,GAAa,EAAE,CAAA;QAE/B,IAAI,IAAI,EAAE;YACT,IAAA,qDAAwB,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC3C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;SACF;QAED,OAAO,UAAU,CAAA;IAClB,CAAC,CAAA;;AAxEF,sDAyEC"}
@@ -4,6 +4,7 @@ export interface ResolvableExprElementMeta extends ResolvableValueElementMeta {
4
4
  resolutionType: 'expr';
5
5
  expr: string;
6
6
  refreshAfter: number;
7
+ path?: string;
7
8
  }
8
9
  export declare const isResolvableExprElementData: (element: UiElementData) => element is UiElementData<ResolvableExprElementMeta>;
9
10
  export declare const isResolvableExprElementMeta: (meta: UiElementMeta) => meta is ResolvableExprElementMeta;
@@ -1 +1 @@
1
- {"version":3,"file":"ResolvableExprElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/expr/ResolvableExprElementMeta.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAWI,MAAM,2BAA2B,GAAG,CAC1C,OAAsB,EACgC,EAAE;IACxD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAA,mCAA2B,EAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACvE,CAAC,CAAA;AAJY,QAAA,2BAA2B,+BAIvC;AAEM,MAAM,2BAA2B,GAAG,CAC1C,IAAmB,EACiB,EAAE;IACtC,OAAQ,IAAkC,CAAC,cAAc,KAAK,MAAM,CAAA;AACrE,CAAC,CAAA;AAJY,QAAA,2BAA2B,+BAIvC"}
1
+ {"version":3,"file":"ResolvableExprElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/expr/ResolvableExprElementMeta.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAYI,MAAM,2BAA2B,GAAG,CAC1C,OAAsB,EACgC,EAAE;IACxD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAA,mCAA2B,EAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACvE,CAAC,CAAA;AAJY,QAAA,2BAA2B,+BAIvC;AAEM,MAAM,2BAA2B,GAAG,CAC1C,IAAmB,EACiB,EAAE;IACtC,OAAQ,IAAkC,CAAC,cAAc,KAAK,MAAM,CAAA;AACrE,CAAC,CAAA;AAJY,QAAA,2BAA2B,+BAIvC"}
@@ -5,7 +5,6 @@
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.makeParametersDict = exports.FunctionElement = void 0;
7
7
  const haystack_core_1 = require("haystack-core");
8
- const resolveTemplatedExpression_1 = require("../../resolveTemplatedExpression");
9
8
  const UiElement_1 = require("../UiElement");
10
9
  /**
11
10
  * Resolves to a function that can be called to achieve side effects.
@@ -18,10 +17,9 @@ class FunctionElement extends UiElement_1.UiElement {
18
17
  }
19
18
  }
20
19
  #buildFunction = () => {
21
- const { expr } = this._meta;
20
+ const { expr, path } = this._meta;
22
21
  return async (parameters) => {
23
- const resolvedExpression = (0, resolveTemplatedExpression_1.resolveTemplateExpression)(expr, (0, exports.makeParametersDict)(parameters));
24
- const result = await this.resolver.eval(resolvedExpression);
22
+ const result = await this.resolver.evalExprElement(expr, (0, exports.makeParametersDict)(parameters), path);
25
23
  // Update watch records
26
24
  if (!result.isError()) {
27
25
  this.resolver.client.ops.watch.update(result.filter('id and mod'));
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/function/FunctionElement.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iDAAgF;AAChF,iFAA4E;AAE5E,4CAIqB;AAGrB;;GAEG;AACH,MAAa,eAAyC,SAAQ,qBAAY;IACzE,YAAY,IAAiC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;SAClC;IACF,CAAC;IAED,cAAc,GAAG,GAAmB,EAAE;QACrC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAA4B,CAAA;QAElD,OAAO,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,kBAAkB,GAAG,IAAA,sDAAyB,EACnD,IAAI,EACJ,IAAA,0BAAkB,EAAC,UAAU,CAAC,CAC9B,CAAA;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAE3D,uBAAuB;YACvB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CACpC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAC3B,CAAA;aACD;YAED,OAAO,MAAM,CAAA;QACd,CAAC,CAAA;IACF,CAAC,CAAA;CACD;AA7BD,0CA6BC;AAUM,MAAM,kBAAkB,GAAG,CACjC,UAIY,EACJ,EAAE;IACV,IAAI,CAAC,UAAU,EAAE;QAChB,OAAO,qBAAK,CAAC,IAAI,EAAE,CAAA;KACnB;IACD,IAAI,UAAU,YAAY,qBAAK,EAAE;QAChC,OAAO,UAAU,CAAA;KACjB;IAED,OAAO,qBAAK,CAAC,IAAI,CAChB,MAAM,CAAC,WAAW,CACjB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CACvD,CACD,CAAA;AACF,CAAC,CAAA;AAnBY,QAAA,kBAAkB,sBAmB9B"}
1
+ {"version":3,"file":"FunctionElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/function/FunctionElement.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iDAAgF;AAEhF,4CAIqB;AAGrB;;GAEG;AACH,MAAa,eAAyC,SAAQ,qBAAY;IACzE,YAAY,IAAiC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;SAClC;IACF,CAAC;IAED,cAAc,GAAG,GAAmB,EAAE;QACrC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAA4B,CAAA;QAExD,OAAO,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CACjD,IAAI,EACJ,IAAA,0BAAkB,EAAC,UAAU,CAAC,EAC9B,IAAI,CACJ,CAAA;YAED,uBAAuB;YACvB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CACpC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAC3B,CAAA;aACD;YAED,OAAO,MAAM,CAAA;QACd,CAAC,CAAA;IACF,CAAC,CAAA;CACD;AA5BD,0CA4BC;AAUM,MAAM,kBAAkB,GAAG,CACjC,UAIY,EACJ,EAAE;IACV,IAAI,CAAC,UAAU,EAAE;QAChB,OAAO,qBAAK,CAAC,IAAI,EAAE,CAAA;KACnB;IACD,IAAI,UAAU,YAAY,qBAAK,EAAE;QAChC,OAAO,UAAU,CAAA;KACjB;IAED,OAAO,qBAAK,CAAC,IAAI,CAChB,MAAM,CAAC,WAAW,CACjB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CACvD,CACD,CAAA;AACF,CAAC,CAAA;AAnBY,QAAA,kBAAkB,sBAmB9B"}
@@ -3,6 +3,7 @@ import { UiElementData, UiElementMeta } from '../UiElement';
3
3
  export interface FunctionElementMeta extends ResolvableValueElementMeta {
4
4
  resolutionType: 'function';
5
5
  expr: string;
6
+ path?: string;
6
7
  }
7
8
  export declare const isFunctionElementData: (element: UiElementData) => element is UiElementData<FunctionElementMeta>;
8
9
  export declare const isFunctionElementMeta: (meta: UiElementMeta) => meta is FunctionElementMeta;
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/function/FunctionElementMeta.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AASI,MAAM,qBAAqB,GAAG,CACpC,OAAsB,EAC0B,EAAE;IAClD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAA,6BAAqB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAChE,CAAC,CAAA;AAJY,QAAA,qBAAqB,yBAIjC;AAEM,MAAM,qBAAqB,GAAG,CACpC,IAAmB,EACW,EAAE;IAChC,OAAQ,IAA4B,CAAC,cAAc,KAAK,UAAU,CAAA;AACnE,CAAC,CAAA;AAJY,QAAA,qBAAqB,yBAIjC"}
1
+ {"version":3,"file":"FunctionElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/function/FunctionElementMeta.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAUI,MAAM,qBAAqB,GAAG,CACpC,OAAsB,EAC0B,EAAE;IAClD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAA,6BAAqB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAChE,CAAC,CAAA;AAJY,QAAA,qBAAqB,yBAIjC;AAEM,MAAM,qBAAqB,GAAG,CACpC,IAAmB,EACW,EAAE;IAChC,OAAQ,IAA4B,CAAC,cAAc,KAAK,UAAU,CAAA;AACnE,CAAC,CAAA;AAJY,QAAA,qBAAqB,yBAIjC"}
@@ -3,6 +3,7 @@ import { Resolver } from '../Resolver';
3
3
  export declare function useResolverContext(): Resolver;
4
4
  interface ResolverProviderProps extends PropsWithChildren {
5
5
  userRoleTagName?: string;
6
+ evalFuncName?: string;
6
7
  }
7
8
  export declare const ResolverProvider: React.FC<ResolverProviderProps>;
8
9
  export {};
@@ -42,13 +42,23 @@ function useResolverContext() {
42
42
  return (0, react_1.useContext)(ResolverContext);
43
43
  }
44
44
  exports.useResolverContext = useResolverContext;
45
- const ResolverProvider = ({ userRoleTagName, children, }) => {
45
+ const ResolverProvider = ({ userRoleTagName, evalFuncName, children, }) => {
46
46
  const client = (0, haystack_react_1.useClient)();
47
47
  const user = (0, useCurrentUser_1.useCurrentUser)();
48
- const [resolver, setResolver] = (0, react_1.useState)(() => new Resolver_1.Resolver({ client, user, userRoleTagName }));
48
+ const [resolver, setResolver] = (0, react_1.useState)(() => new Resolver_1.Resolver({
49
+ client,
50
+ user,
51
+ userRoleTagName,
52
+ evalFuncName,
53
+ }));
49
54
  (0, react_1.useEffect)(() => {
50
- setResolver(new Resolver_1.Resolver({ client, user, userRoleTagName }));
51
- }, [client, user, userRoleTagName]);
55
+ setResolver(new Resolver_1.Resolver({
56
+ client,
57
+ user,
58
+ userRoleTagName,
59
+ evalFuncName,
60
+ }));
61
+ }, [client, user, userRoleTagName, evalFuncName]);
52
62
  return (<ResolverContext.Provider value={resolver}>
53
63
  {children}
54
64
  </ResolverContext.Provider>);
@@ -1 +1 @@
1
- {"version":3,"file":"useResolverContext.jsx","sourceRoot":"","sources":["../../../src/resolvableElements/react/useResolverContext.tsx"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uDAAyC;AACzC,mDAA0C;AAC1C,+CAKc;AACd,yDAAqD;AACrD,0CAAsC;AAEtC,MAAM,eAAe,GAAG,eAAK,CAAC,aAAa,CAC1C,IAAI,mBAAQ,CAAC;IACZ,MAAM,EAAE,IAAI,yBAAM,CAAC;QAClB,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KACnC,CAAC;CACF,CAAC,CACF,CAAA;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAA;AAE/C,SAAgB,kBAAkB;IACjC,OAAO,IAAA,kBAAU,EAAC,eAAe,CAAC,CAAA;AACnC,CAAC;AAFD,gDAEC;AAMM,MAAM,gBAAgB,GAAoC,CAAC,EACjE,eAAe,EACf,QAAQ,GACR,EAAE,EAAE;IACJ,MAAM,MAAM,GAAG,IAAA,0BAAS,GAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,IAAA,+BAAc,GAAE,CAAA;IAE7B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EACvC,GAAG,EAAE,CAAC,IAAI,mBAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CACrD,CAAA;IAED,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,WAAW,CAAC,IAAI,mBAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,CAAA;IAC7D,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAA;IAEnC,OAAO,CACN,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CACzC;GAAA,CAAC,QAAQ,CACV;EAAA,EAAE,eAAe,CAAC,QAAQ,CAAC,CAC3B,CAAA;AACF,CAAC,CAAA;AApBY,QAAA,gBAAgB,oBAoB5B"}
1
+ {"version":3,"file":"useResolverContext.jsx","sourceRoot":"","sources":["../../../src/resolvableElements/react/useResolverContext.tsx"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uDAAyC;AACzC,mDAA0C;AAC1C,+CAKc;AACd,yDAAqD;AACrD,0CAAsC;AAEtC,MAAM,eAAe,GAAG,eAAK,CAAC,aAAa,CAC1C,IAAI,mBAAQ,CAAC;IACZ,MAAM,EAAE,IAAI,yBAAM,CAAC;QAClB,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KACnC,CAAC;CACF,CAAC,CACF,CAAA;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAA;AAE/C,SAAgB,kBAAkB;IACjC,OAAO,IAAA,kBAAU,EAAC,eAAe,CAAC,CAAA;AACnC,CAAC;AAFD,gDAEC;AAOM,MAAM,gBAAgB,GAAoC,CAAC,EACjE,eAAe,EACf,YAAY,EACZ,QAAQ,GACR,EAAE,EAAE;IACJ,MAAM,MAAM,GAAG,IAAA,0BAAS,GAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,IAAA,+BAAc,GAAE,CAAA;IAE7B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EACvC,GAAG,EAAE,CACJ,IAAI,mBAAQ,CAAC;QACZ,MAAM;QACN,IAAI;QACJ,eAAe;QACf,YAAY;KACZ,CAAC,CACH,CAAA;IAED,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,WAAW,CACV,IAAI,mBAAQ,CAAC;YACZ,MAAM;YACN,IAAI;YACJ,eAAe;YACf,YAAY;SACZ,CAAC,CACF,CAAA;IACF,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAA;IAEjD,OAAO,CACN,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CACzC;GAAA,CAAC,QAAQ,CACV;EAAA,EAAE,eAAe,CAAC,QAAQ,CAAC,CAC3B,CAAA;AACF,CAAC,CAAA;AAlCY,QAAA,gBAAgB,oBAkC5B"}
@@ -1,10 +1,11 @@
1
- export { type FunctionResult } from './resolvableElements/elements/function/FunctionElement';
1
+ export * from './resolvableElements/Resolver';
2
2
  export { type ResolvableValueElementMeta } from './resolvableElements/elements/ResolvableValueElement';
3
+ export { type UiElementData } from './resolvableElements/elements/UiElement';
3
4
  export { type ResolvableExprElementMeta } from './resolvableElements/elements/expr/ResolvableExprElementMeta';
5
+ export { type FunctionResult } from './resolvableElements/elements/function/FunctionElement';
4
6
  export { isSectionData, type ParametersOfSection, type ResolvedSection, } from './resolvableElements/elements/section/SectionElementMeta';
5
- export { type UiElementData } from './resolvableElements/elements/UiElement';
6
- export { resolveTemplateExpression } from './resolvableElements/resolveTemplatedExpression';
7
7
  export * from './resolvableElements/react/SectionChecker';
8
- export * from './resolvableElements/react/useResolverContext';
9
8
  export * from './resolvableElements/react/useResolveSection';
9
+ export * from './resolvableElements/react/useResolverContext';
10
+ export { resolveTemplateExpression } from './resolvableElements/resolveTemplatedExpression';
10
11
  export * from './useCurrentUser';
package/dist_es/index.js CHANGED
@@ -1,14 +1,18 @@
1
1
  /*
2
2
  * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
3
  */
4
+ //////////////////////////////////////////////////////////////////////////
5
+ // Elements
6
+ //////////////////////////////////////////////////////////////////////////
7
+ export * from './resolvableElements/Resolver';
4
8
  export { isSectionData, } from './resolvableElements/elements/section/SectionElementMeta';
5
- export { resolveTemplateExpression } from './resolvableElements/resolveTemplatedExpression';
6
9
  //////////////////////////////////////////////////////////////////////////
7
10
  // React
8
11
  //////////////////////////////////////////////////////////////////////////
9
12
  export * from './resolvableElements/react/SectionChecker';
10
- export * from './resolvableElements/react/useResolverContext';
11
13
  export * from './resolvableElements/react/useResolveSection';
14
+ export * from './resolvableElements/react/useResolverContext';
15
+ export { resolveTemplateExpression } from './resolvableElements/resolveTemplatedExpression';
12
16
  //////////////////////////////////////////////////////////////////////////
13
17
  // Other
14
18
  //////////////////////////////////////////////////////////////////////////
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EACN,aAAa,GAGb,MAAM,0DAA0D,CAAA;AAEjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAA;AAC3F,0EAA0E;AAC1E,QAAQ;AACR,0EAA0E;AAC1E,cAAc,2CAA2C,CAAA;AACzD,cAAc,+CAA+C,CAAA;AAC7D,cAAc,8CAA8C,CAAA;AAC5D,0EAA0E;AAC1E,QAAQ;AACR,0EAA0E;AAC1E,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,WAAW;AACX,0EAA0E;AAC1E,cAAc,+BAA+B,CAAA;AAK7C,OAAO,EACN,aAAa,GAGb,MAAM,0DAA0D,CAAA;AACjE,0EAA0E;AAC1E,QAAQ;AACR,0EAA0E;AAC1E,cAAc,2CAA2C,CAAA;AACzD,cAAc,8CAA8C,CAAA;AAC5D,cAAc,+CAA+C,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAA;AAC3F,0EAA0E;AAC1E,QAAQ;AACR,0EAA0E;AAC1E,cAAc,kBAAkB,CAAA"}
@@ -2,20 +2,46 @@ import { HDict, HGrid } from 'haystack-core';
2
2
  import { Client, Watch } from 'haystack-nclient';
3
3
  export declare const DEFAULT_USER_ROLE_TAG_NAME = "uiElementPermissions";
4
4
  export interface ResolverData {
5
+ /**
6
+ * Haystack client for network communication
7
+ */
5
8
  client: Client;
9
+ /**
10
+ * Current user dict, used to check permissions
11
+ */
6
12
  user?: HDict;
13
+ /**
14
+ * Name of the tag that is expected on the user dict to define its role
15
+ */
7
16
  userRoleTagName?: string;
17
+ /**
18
+ * Function name to be used for expressions eval,
19
+ * used to enable custom backend permission check using elements path
20
+ * @example
21
+ * customEval(\`page/section/elementName\`, parametersDict)
22
+ */
23
+ evalFuncName?: string;
8
24
  }
9
25
  /**
10
26
  * Resolver is a mediator for the network interactions during the resolution process,
11
- * in order to enable future optimizations.
27
+ * in order to enable future optimizations and extra features
12
28
  */
13
- export declare class Resolver {
14
- constructor({ client, user, userRoleTagName, }: ResolverData);
29
+ export declare class Resolver implements ResolverData {
30
+ constructor({ client, user, userRoleTagName, evalFuncName, }: ResolverData);
15
31
  client: Client;
16
32
  user?: HDict;
17
33
  userRoleTagName?: string;
34
+ evalFuncName?: string;
18
35
  read(filter: string): Promise<HGrid<HDict>>;
19
36
  makeWatch(dis: string, grid: HGrid<HDict>): Promise<Watch>;
20
- eval(expr: string): Promise<HGrid<HDict>>;
37
+ /**
38
+ * Eval an expression using either the provided path or otherwse directly the expression
39
+ * Providing the path allows for whitelisting of certain functions to specific user roles
40
+ */
41
+ evalExprElement(expr: string, parameters: HDict, path?: string): Promise<HGrid<HDict>>;
42
+ private _buildExpression;
43
+ /**
44
+ * Evaluate an expression
45
+ */
46
+ private _eval;
21
47
  }
@@ -1,28 +1,53 @@
1
1
  /*
2
2
  * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
3
  */
4
+ import { resolveTemplateExpression } from './resolveTemplatedExpression';
4
5
  export const DEFAULT_USER_ROLE_TAG_NAME = 'uiElementPermissions';
5
6
  /**
6
7
  * Resolver is a mediator for the network interactions during the resolution process,
7
- * in order to enable future optimizations.
8
+ * in order to enable future optimizations and extra features
8
9
  */
9
10
  export class Resolver {
10
- constructor({ client, user, userRoleTagName = DEFAULT_USER_ROLE_TAG_NAME, }) {
11
+ constructor({ client, user, userRoleTagName = DEFAULT_USER_ROLE_TAG_NAME, evalFuncName, }) {
11
12
  this.client = client;
12
13
  this.user = user;
13
14
  this.userRoleTagName = userRoleTagName;
15
+ this.evalFuncName = evalFuncName;
14
16
  }
15
17
  client;
16
18
  user;
17
19
  userRoleTagName;
18
- async read(filter) {
20
+ evalFuncName;
21
+ read(filter) {
19
22
  return this.client.ext.read(filter);
20
23
  }
21
- async makeWatch(dis, grid) {
24
+ makeWatch(dis, grid) {
22
25
  return this.client.ops.watch.make(dis, grid);
23
26
  }
24
- async eval(expr) {
25
- return this.client.ext.eval(expr);
27
+ /**
28
+ * Eval an expression using either the provided path or otherwse directly the expression
29
+ * Providing the path allows for whitelisting of certain functions to specific user roles
30
+ */
31
+ evalExprElement(expr, parameters, path) {
32
+ return this._eval(this._buildExpression(expr, parameters, path));
33
+ }
34
+ _buildExpression(expr, parameters, path) {
35
+ if (!!path && this.evalFuncName) {
36
+ return `${this.evalFuncName}(\`${path}\`, ${parameters.toAxon()})`;
37
+ }
38
+ else {
39
+ return resolveTemplateExpression(expr, parameters);
40
+ }
41
+ }
42
+ /**
43
+ * Evaluate an expression
44
+ */
45
+ async _eval(expr) {
46
+ const grid = await this.client.ext.eval(expr);
47
+ if (grid.isError()) {
48
+ console.error('Empty grid result for expression: \n', expr, grid.getError());
49
+ }
50
+ return grid;
26
51
  }
27
52
  }
28
53
  //# sourceMappingURL=Resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../../src/resolvableElements/Resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAA;AAQhE;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACpB,YAAY,EACX,MAAM,EACN,IAAI,EACJ,eAAe,GAAG,0BAA0B,GAC9B;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;IACvC,CAAC;IAED,MAAM,CAAQ;IACd,IAAI,CAAQ;IACZ,eAAe,CAAS;IAExB,KAAK,CAAC,IAAI,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,IAAkB;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;CACD"}
1
+ {"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../../src/resolvableElements/Resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAA;AAExE,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAA;AAwBhE;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACpB,YAAY,EACX,MAAM,EACN,IAAI,EACJ,eAAe,GAAG,0BAA0B,EAC5C,YAAY,GACE;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IACjC,CAAC;IAED,MAAM,CAAQ;IACd,IAAI,CAAQ;IACZ,eAAe,CAAS;IACxB,YAAY,CAAS;IAErB,IAAI,CAAC,MAAc;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,IAAkB;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED;;;OAGG;IACH,eAAe,CACd,IAAY,EACZ,UAAiB,EACjB,IAAa;QAEb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAA;IACjE,CAAC;IAEO,gBAAgB,CACvB,IAAY,EACZ,UAAiB,EACjB,IAAa;QAEb,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAChC,OAAO,GAAG,IAAI,CAAC,YAAY,MAAM,IAAI,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,CAAA;SAClE;aAAM;YACN,OAAO,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;SAClD;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,KAAK,CAAC,IAAY;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE7C,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,OAAO,CAAC,KAAK,CACZ,sCAAsC,EACtC,IAAI,EACJ,IAAI,CAAC,QAAQ,EAAE,CACf,CAAA;SACD;QAED,OAAO,IAAI,CAAA;IACZ,CAAC;CACD"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { HNum } from 'haystack-core';
5
5
  import { millisecond, second } from 'haystack-units';
6
- import { replaceTemplateVariables, resolveTemplateExpression, } from '../../resolveTemplatedExpression';
6
+ import { replaceTemplateVariables } from '../../resolveTemplatedExpression';
7
7
  import { ResolvableValueElement } from '../ResolvableValueElement';
8
8
  /**
9
9
  * Resolves to the result of an expression.
@@ -19,16 +19,12 @@ export class ResolvableExprElement extends ResolvableValueElement {
19
19
  await this.#updateValue(parameters);
20
20
  };
21
21
  #updateValue = async (parameters) => {
22
- const { expr, refreshAfter } = this._meta;
23
- const resolvedExpression = resolveTemplateExpression(expr, parameters);
24
- const grid = await this.resolver.eval(resolvedExpression);
25
- if (grid.isError()) {
26
- console.error('Empty grid result for expression: \n', resolvedExpression, grid.getError());
27
- return;
28
- }
29
- const val = grid[0]?.get('val');
22
+ const { expr, refreshAfter, path } = this
23
+ ._meta;
24
+ const grid = await this.resolver.evalExprElement(expr, parameters, path);
30
25
  // Identify when it's necessary to unpack the result `val` or not
31
26
  // since the eval wraps the result value in a grid's first dict `val` tag for non-collections.
27
+ const val = grid[0]?.get('val');
32
28
  const shouldUnpackResult = !this.isExpectedResultACollection() && val;
33
29
  if (shouldUnpackResult) {
34
30
  this.value = val;
@@ -1 +1 @@
1
- {"version":3,"file":"ResolvableExprElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/expr/ResolvableExprElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAS,IAAI,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EACN,wBAAwB,EACxB,yBAAyB,GACzB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAIlE;;GAEG;AACH,MAAM,OAAO,qBAEX,SAAQ,sBAAyB;IAClC,MAAM,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEpD,YAAY,IAAiC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAA;IACZ,CAAC;IAED,SAAS,GAAG,CAAC,CAAA;IACb,QAAQ,CAAS;IAEP,YAAY,GAAG,KAAK,EAAE,UAAiB,EAAiB,EAAE;QACnE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IACpC,CAAC,CAAA;IAED,YAAY,GAAG,KAAK,EAAE,UAAiB,EAAiB,EAAE;QACzD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAEtE,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAEtE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAEzD,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,OAAO,CAAC,KAAK,CACZ,sCAAsC,EACtC,kBAAkB,EAClB,IAAI,CAAC,QAAQ,EAAE,CACf,CAAA;YACD,OAAM;SACN;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QAE/B,iEAAiE;QACjE,8FAA8F;QAC9F,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,GAAG,CAAA;QACrE,IAAI,kBAAkB,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAA;SAChB;aAAM;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;SACjB;QAED,IAAI,YAAY,EAAE;YACjB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,SAAS,EAAE,CAAA;gBAChB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,CAAsB,CAAA;SACrF;IACF,CAAC,CAAA;IAED;;;OAGG;IACH,2BAA2B,GAAG,GAAY,EAAE;QAC3C,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAEhE,OAAO,CACN,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;YACvD,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC3B,CAAA;IACF,CAAC,CAAA;IAES,OAAO,GAAG,KAAK,IAAmB,EAAE;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SAC3B;IACF,CAAC,CAAA;IAED,gBAAgB,GAAmB,GAAG,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAExD,MAAM,UAAU,GAAa,EAAE,CAAA;QAE/B,IAAI,IAAI,EAAE;YACT,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC3C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;SACF;QAED,OAAO,UAAU,CAAA;IAClB,CAAC,CAAA"}
1
+ {"version":3,"file":"ResolvableExprElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/expr/ResolvableExprElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAS,IAAI,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAE3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAIlE;;GAEG;AACH,MAAM,OAAO,qBAEX,SAAQ,sBAAyB;IAClC,MAAM,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEpD,YAAY,IAAiC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAA;IACZ,CAAC;IAED,SAAS,GAAG,CAAC,CAAA;IACb,QAAQ,CAAS;IAEP,YAAY,GAAG,KAAK,EAAE,UAAiB,EAAiB,EAAE;QACnE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IACpC,CAAC,CAAA;IAED,YAAY,GAAG,KAAK,EAAE,UAAiB,EAAiB,EAAE;QACzD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,IAAI;aACvC,KAAkC,CAAA;QAEpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAExE,iEAAiE;QACjE,8FAA8F;QAC9F,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QAC/B,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,GAAG,CAAA;QACrE,IAAI,kBAAkB,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAA;SAChB;aAAM;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;SACjB;QAED,IAAI,YAAY,EAAE;YACjB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,SAAS,EAAE,CAAA;gBAChB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,CAAsB,CAAA;SACrF;IACF,CAAC,CAAA;IAED;;;OAGG;IACH,2BAA2B,GAAG,GAAY,EAAE;QAC3C,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAEhE,OAAO,CACN,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;YACvD,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC3B,CAAA;IACF,CAAC,CAAA;IAES,OAAO,GAAG,KAAK,IAAmB,EAAE;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SAC3B;IACF,CAAC,CAAA;IAED,gBAAgB,GAAmB,GAAG,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAkC,CAAA;QAExD,MAAM,UAAU,GAAa,EAAE,CAAA;QAE/B,IAAI,IAAI,EAAE;YACT,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC3C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;SACF;QAED,OAAO,UAAU,CAAA;IAClB,CAAC,CAAA"}
@@ -4,6 +4,7 @@ export interface ResolvableExprElementMeta extends ResolvableValueElementMeta {
4
4
  resolutionType: 'expr';
5
5
  expr: string;
6
6
  refreshAfter: number;
7
+ path?: string;
7
8
  }
8
9
  export declare const isResolvableExprElementData: (element: UiElementData) => element is UiElementData<ResolvableExprElementMeta>;
9
10
  export declare const isResolvableExprElementMeta: (meta: UiElementMeta) => meta is ResolvableExprElementMeta;
@@ -1 +1 @@
1
- {"version":3,"file":"ResolvableExprElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/expr/ResolvableExprElementMeta.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAC1C,OAAsB,EACgC,EAAE;IACxD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACvE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAC1C,IAAmB,EACiB,EAAE;IACtC,OAAQ,IAAkC,CAAC,cAAc,KAAK,MAAM,CAAA;AACrE,CAAC,CAAA"}
1
+ {"version":3,"file":"ResolvableExprElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/expr/ResolvableExprElementMeta.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAC1C,OAAsB,EACgC,EAAE;IACxD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACvE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAC1C,IAAmB,EACiB,EAAE;IACtC,OAAQ,IAAkC,CAAC,cAAc,KAAK,MAAM,CAAA;AACrE,CAAC,CAAA"}
@@ -2,7 +2,6 @@
2
2
  * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
3
  */
4
4
  import { HDict } from 'haystack-core';
5
- import { resolveTemplateExpression } from '../../resolveTemplatedExpression';
6
5
  import { UiElement, } from '../UiElement';
7
6
  /**
8
7
  * Resolves to a function that can be called to achieve side effects.
@@ -15,10 +14,9 @@ export class FunctionElement extends UiElement {
15
14
  }
16
15
  }
17
16
  #buildFunction = () => {
18
- const { expr } = this._meta;
17
+ const { expr, path } = this._meta;
19
18
  return async (parameters) => {
20
- const resolvedExpression = resolveTemplateExpression(expr, makeParametersDict(parameters));
21
- const result = await this.resolver.eval(resolvedExpression);
19
+ const result = await this.resolver.evalExprElement(expr, makeParametersDict(parameters), path);
22
20
  // Update watch records
23
21
  if (!result.isError()) {
24
22
  this.resolver.client.ops.watch.update(result.filter('id and mod'));
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/function/FunctionElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAwB,KAAK,EAAuB,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAE5E,OAAO,EACN,SAAS,GAGT,MAAM,cAAc,CAAA;AAGrB;;GAEG;AACH,MAAM,OAAO,eAAyC,SAAQ,SAAY;IACzE,YAAY,IAAiC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;SAClC;IACF,CAAC;IAED,cAAc,GAAG,GAAmB,EAAE;QACrC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAA4B,CAAA;QAElD,OAAO,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,kBAAkB,GAAG,yBAAyB,CACnD,IAAI,EACJ,kBAAkB,CAAC,UAAU,CAAC,CAC9B,CAAA;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAE3D,uBAAuB;YACvB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CACpC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAC3B,CAAA;aACD;YAED,OAAO,MAAM,CAAA;QACd,CAAC,CAAA;IACF,CAAC,CAAA;CACD;AAUD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,UAIY,EACJ,EAAE;IACV,IAAI,CAAC,UAAU,EAAE;QAChB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;KACnB;IACD,IAAI,UAAU,YAAY,KAAK,EAAE;QAChC,OAAO,UAAU,CAAA;KACjB;IAED,OAAO,KAAK,CAAC,IAAI,CAChB,MAAM,CAAC,WAAW,CACjB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CACvD,CACD,CAAA;AACF,CAAC,CAAA"}
1
+ {"version":3,"file":"FunctionElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/function/FunctionElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAwB,KAAK,EAAuB,MAAM,eAAe,CAAA;AAEhF,OAAO,EACN,SAAS,GAGT,MAAM,cAAc,CAAA;AAGrB;;GAEG;AACH,MAAM,OAAO,eAAyC,SAAQ,SAAY;IACzE,YAAY,IAAiC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;SAClC;IACF,CAAC;IAED,cAAc,GAAG,GAAmB,EAAE;QACrC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAA4B,CAAA;QAExD,OAAO,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CACjD,IAAI,EACJ,kBAAkB,CAAC,UAAU,CAAC,EAC9B,IAAI,CACJ,CAAA;YAED,uBAAuB;YACvB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CACpC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAC3B,CAAA;aACD;YAED,OAAO,MAAM,CAAA;QACd,CAAC,CAAA;IACF,CAAC,CAAA;CACD;AAUD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,UAIY,EACJ,EAAE;IACV,IAAI,CAAC,UAAU,EAAE;QAChB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;KACnB;IACD,IAAI,UAAU,YAAY,KAAK,EAAE;QAChC,OAAO,UAAU,CAAA;KACjB;IAED,OAAO,KAAK,CAAC,IAAI,CAChB,MAAM,CAAC,WAAW,CACjB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CACvD,CACD,CAAA;AACF,CAAC,CAAA"}
@@ -3,6 +3,7 @@ import { UiElementData, UiElementMeta } from '../UiElement';
3
3
  export interface FunctionElementMeta extends ResolvableValueElementMeta {
4
4
  resolutionType: 'function';
5
5
  expr: string;
6
+ path?: string;
6
7
  }
7
8
  export declare const isFunctionElementData: (element: UiElementData) => element is UiElementData<FunctionElementMeta>;
8
9
  export declare const isFunctionElementMeta: (meta: UiElementMeta) => meta is FunctionElementMeta;
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/function/FunctionElementMeta.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACpC,OAAsB,EAC0B,EAAE;IAClD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACpC,IAAmB,EACW,EAAE;IAChC,OAAQ,IAA4B,CAAC,cAAc,KAAK,UAAU,CAAA;AACnE,CAAC,CAAA"}
1
+ {"version":3,"file":"FunctionElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/function/FunctionElementMeta.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACpC,OAAsB,EAC0B,EAAE;IAClD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACpC,IAAmB,EACW,EAAE;IAChC,OAAQ,IAA4B,CAAC,cAAc,KAAK,UAAU,CAAA;AACnE,CAAC,CAAA"}
@@ -3,6 +3,7 @@ import { Resolver } from '../Resolver';
3
3
  export declare function useResolverContext(): Resolver;
4
4
  interface ResolverProviderProps extends PropsWithChildren {
5
5
  userRoleTagName?: string;
6
+ evalFuncName?: string;
6
7
  }
7
8
  export declare const ResolverProvider: React.FC<ResolverProviderProps>;
8
9
  export {};
@@ -15,13 +15,23 @@ ResolverContext.displayName = 'ResolverContext';
15
15
  export function useResolverContext() {
16
16
  return useContext(ResolverContext);
17
17
  }
18
- export const ResolverProvider = ({ userRoleTagName, children, }) => {
18
+ export const ResolverProvider = ({ userRoleTagName, evalFuncName, children, }) => {
19
19
  const client = useClient();
20
20
  const user = useCurrentUser();
21
- const [resolver, setResolver] = useState(() => new Resolver({ client, user, userRoleTagName }));
21
+ const [resolver, setResolver] = useState(() => new Resolver({
22
+ client,
23
+ user,
24
+ userRoleTagName,
25
+ evalFuncName,
26
+ }));
22
27
  useEffect(() => {
23
- setResolver(new Resolver({ client, user, userRoleTagName }));
24
- }, [client, user, userRoleTagName]);
28
+ setResolver(new Resolver({
29
+ client,
30
+ user,
31
+ userRoleTagName,
32
+ evalFuncName,
33
+ }));
34
+ }, [client, user, userRoleTagName, evalFuncName]);
25
35
  return (<ResolverContext.Provider value={resolver}>
26
36
  {children}
27
37
  </ResolverContext.Provider>);
@@ -1 +1 @@
1
- {"version":3,"file":"useResolverContext.jsx","sourceRoot":"","sources":["../../../src/resolvableElements/react/useResolverContext.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,EAEb,UAAU,EACV,SAAS,EACT,QAAQ,GACR,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAC1C,IAAI,QAAQ,CAAC;IACZ,MAAM,EAAE,IAAI,MAAM,CAAC;QAClB,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KACnC,CAAC;CACF,CAAC,CACF,CAAA;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAA;AAE/C,MAAM,UAAU,kBAAkB;IACjC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAA;AACnC,CAAC;AAMD,MAAM,CAAC,MAAM,gBAAgB,GAAoC,CAAC,EACjE,eAAe,EACf,QAAQ,GACR,EAAE,EAAE;IACJ,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;IAE7B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CACvC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CACrD,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACd,WAAW,CAAC,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,CAAA;IAC7D,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAA;IAEnC,OAAO,CACN,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CACzC;GAAA,CAAC,QAAQ,CACV;EAAA,EAAE,eAAe,CAAC,QAAQ,CAAC,CAC3B,CAAA;AACF,CAAC,CAAA"}
1
+ {"version":3,"file":"useResolverContext.jsx","sourceRoot":"","sources":["../../../src/resolvableElements/react/useResolverContext.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,EAEb,UAAU,EACV,SAAS,EACT,QAAQ,GACR,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAC1C,IAAI,QAAQ,CAAC;IACZ,MAAM,EAAE,IAAI,MAAM,CAAC;QAClB,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KACnC,CAAC;CACF,CAAC,CACF,CAAA;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAA;AAE/C,MAAM,UAAU,kBAAkB;IACjC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAA;AACnC,CAAC;AAOD,MAAM,CAAC,MAAM,gBAAgB,GAAoC,CAAC,EACjE,eAAe,EACf,YAAY,EACZ,QAAQ,GACR,EAAE,EAAE;IACJ,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;IAE7B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CACvC,GAAG,EAAE,CACJ,IAAI,QAAQ,CAAC;QACZ,MAAM;QACN,IAAI;QACJ,eAAe;QACf,YAAY;KACZ,CAAC,CACH,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACd,WAAW,CACV,IAAI,QAAQ,CAAC;YACZ,MAAM;YACN,IAAI;YACJ,eAAe;YACf,YAAY;SACZ,CAAC,CACF,CAAA;IACF,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAA;IAEjD,OAAO,CACN,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CACzC;GAAA,CAAC,QAAQ,CACV;EAAA,EAAE,eAAe,CAAC,QAAQ,CAAC,CAC3B,CAAA;AACF,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,52 +1,52 @@
1
- {
2
- "name": "@j2inn/resolvable-ui-elements",
3
- "version": "1.0.2",
4
- "description": "",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "module": "dist_es/index.js",
8
- "scripts": {
9
- "clean": "rimraf ./dist && rimraf ./dist_es",
10
- "prebuild": "npm run clean && npm run lint && npm run test",
11
- "build": "tsc && npm run-script build:es",
12
- "build:es": "tsc --module ESNext --outDir dist_es",
13
- "checktypes": "tsc --noEmit",
14
- "format": "prettier-eslint --list-different --write \"$(pwd)/src/**/*.{ts,tsx,js,jsx}\"",
15
- "lint": "eslint --fix --ext ts,tsx,js,jsx src/",
16
- "test": "jest --passWithNoTests",
17
- "prepack": "npm run lint && npm run test && npm run build"
18
- },
19
- "author": "",
20
- "license": "ISC",
21
- "files": [
22
- "dist/**/*",
23
- "dist_es/**/*"
24
- ],
25
- "peerDependencies": {
26
- "haystack-core": "^2.0.45",
27
- "haystack-nclient": "^3.0.32",
28
- "haystack-react": "^3.0.17",
29
- "haystack-units": "^1.0.22",
30
- "react": "^18.2.0",
31
- "react-dom": "^18.2.0"
32
- },
33
- "devDependencies": {
34
- "@types/jest": "^27.4.0",
35
- "@types/node": "^15.0.2",
36
- "@types/react": "^18.0.18",
37
- "@types/react-dom": "^18.0.6",
38
- "@typescript-eslint/eslint-plugin": "^5.28.0",
39
- "@typescript-eslint/parser": "^5.28.0",
40
- "eslint": "^7.32.0",
41
- "eslint-config-prettier": "^8.3.0",
42
- "eslint-plugin-jest": "^26.1.3",
43
- "eslint-plugin-prettier": "^4.0.0",
44
- "eslint-plugin-react": "^7.29.4",
45
- "prettier": "^2.6.1",
46
- "prettier-eslint": "^13.0.0",
47
- "prettier-eslint-cli": "^5.0.1",
48
- "rimraf": "^3.0.2",
49
- "ts-jest": "^28.0.8",
50
- "typescript": "^4.8.2"
51
- }
52
- }
1
+ {
2
+ "name": "@j2inn/resolvable-ui-elements",
3
+ "version": "1.0.3-alpha.0",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "module": "dist_es/index.js",
8
+ "scripts": {
9
+ "clean": "rimraf ./dist && rimraf ./dist_es",
10
+ "prebuild": "npm run clean && npm run lint && npm run test",
11
+ "build": "tsc && npm run-script build:es",
12
+ "build:es": "tsc --module ESNext --outDir dist_es",
13
+ "checktypes": "tsc --noEmit",
14
+ "format": "prettier-eslint --list-different --write \"$(pwd)/src/**/*.{ts,tsx,js,jsx}\"",
15
+ "lint": "eslint --fix --ext ts,tsx,js,jsx src/",
16
+ "test": "jest --passWithNoTests",
17
+ "prepack": "npm run lint && npm run test && npm run build"
18
+ },
19
+ "author": "",
20
+ "license": "ISC",
21
+ "files": [
22
+ "dist/**/*",
23
+ "dist_es/**/*"
24
+ ],
25
+ "peerDependencies": {
26
+ "haystack-core": "^2.0.45",
27
+ "haystack-nclient": "^3.0.32",
28
+ "haystack-react": "^3.0.17",
29
+ "haystack-units": "^1.0.22",
30
+ "react": "^18.2.0",
31
+ "react-dom": "^18.2.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/jest": "^27.4.0",
35
+ "@types/node": "^15.0.2",
36
+ "@types/react": "^18.0.18",
37
+ "@types/react-dom": "^18.0.6",
38
+ "@typescript-eslint/eslint-plugin": "^5.28.0",
39
+ "@typescript-eslint/parser": "^5.28.0",
40
+ "eslint": "^7.32.0",
41
+ "eslint-config-prettier": "^8.3.0",
42
+ "eslint-plugin-jest": "^26.1.3",
43
+ "eslint-plugin-prettier": "^4.0.0",
44
+ "eslint-plugin-react": "^7.29.4",
45
+ "prettier": "^2.6.1",
46
+ "prettier-eslint": "^13.0.0",
47
+ "prettier-eslint-cli": "^5.0.1",
48
+ "rimraf": "^3.0.2",
49
+ "ts-jest": "^28.0.8",
50
+ "typescript": "^4.8.2"
51
+ }
52
+ }