@nocobase/evaluators 0.9.1-alpha.1 → 0.9.2-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("../../utils");
9
-
10
8
  var _formulajs = _interopRequireDefault(require("../../utils/formulajs"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  var _default = {
15
11
  label: 'Formula.js',
16
12
  tooltip: '{{t("Formula.js supports most Microsoft Excel formula functions.")}}',
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("../../utils");
9
-
10
8
  var _mathjs = _interopRequireDefault(require("../../utils/mathjs"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  var _default = {
15
11
  label: 'Math.js',
16
12
  tooltip: `{{t('Math.js comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types')}}`,
@@ -8,5 +8,5 @@ export interface Evaluator {
8
8
  }): any;
9
9
  }
10
10
  export declare const evaluators: Registry<Evaluator>;
11
- export declare const renderReference: (key: string) => JSX.Element;
11
+ export declare function getOptions(): any[];
12
12
  export default evaluators;
@@ -3,81 +3,31 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.renderReference = exports.evaluators = exports.default = void 0;
7
-
8
- function _react() {
9
- const data = _interopRequireDefault(require("react"));
10
-
11
- _react = function _react() {
12
- return data;
13
- };
14
-
15
- return data;
16
- }
17
-
18
- function _css() {
19
- const data = require("@emotion/css");
20
-
21
- _css = function _css() {
22
- return data;
23
- };
24
-
25
- return data;
26
- }
27
-
6
+ exports.evaluators = exports.default = void 0;
7
+ exports.getOptions = getOptions;
28
8
  function _client() {
29
- const data = require("@nocobase/client");
30
-
31
- _client = function _client() {
32
- return data;
33
- };
34
-
35
- return data;
36
- }
37
-
38
- function _client2() {
39
9
  const data = require("@nocobase/utils/client");
40
-
41
- _client2 = function _client2() {
10
+ _client = function _client() {
42
11
  return data;
43
12
  };
44
-
45
13
  return data;
46
14
  }
47
-
48
15
  var _mathjs = _interopRequireDefault(require("./engines/mathjs"));
49
-
50
16
  var _formulajs = _interopRequireDefault(require("./engines/formulajs"));
51
-
52
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
53
-
54
- const evaluators = new (_client2().Registry)();
18
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
20
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
22
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
23
+ const evaluators = new (_client().Registry)();
55
24
  exports.evaluators = evaluators;
56
25
  evaluators.register('math.js', _mathjs.default);
57
26
  evaluators.register('formula.js', _formulajs.default);
58
-
59
- const renderReference = key => {
60
- const engine = evaluators.get(key);
61
-
62
- if (!engine) {
63
- return null;
64
- }
65
-
66
- return engine.link ? _react().default.createElement(_react().default.Fragment, null, _react().default.createElement("span", {
67
- className: (0, _css().css)`
68
- &:after {
69
- content: ':';
70
- }
71
- & + a {
72
- margin-left: .25em;
73
- }
74
- `
75
- }, _client().i18n.t('Syntax references')), _react().default.createElement("a", {
76
- href: engine.link,
77
- target: "_blank"
78
- }, engine.label)) : null;
79
- };
80
-
81
- exports.renderReference = renderReference;
27
+ function getOptions() {
28
+ return Array.from(evaluators.getEntities()).reduce((result, [value, options]) => result.concat(_objectSpread({
29
+ value
30
+ }, options)), []);
31
+ }
82
32
  var _default = evaluators;
83
33
  exports.default = _default;
package/lib/index.js CHANGED
@@ -10,9 +10,7 @@ Object.defineProperty(exports, "default", {
10
10
  return _server.default;
11
11
  }
12
12
  });
13
-
14
13
  var _server = _interopRequireWildcard(require("./server"));
15
-
16
14
  Object.keys(_server).forEach(function (key) {
17
15
  if (key === "default" || key === "__esModule") return;
18
16
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -24,7 +22,5 @@ Object.keys(_server).forEach(function (key) {
24
22
  }
25
23
  });
26
24
  });
27
-
28
25
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
-
30
26
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -1,5 +1,5 @@
1
1
  import { Registry } from "@nocobase/utils";
2
2
  import { Evaluator } from '../utils';
3
- export { Evaluator } from '../utils';
3
+ export { Evaluator, evaluate, appendArrayColumn } from '../utils';
4
4
  export declare const evaluators: Registry<Evaluator>;
5
5
  export default evaluators;
@@ -3,26 +3,31 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.evaluators = exports.default = void 0;
7
-
6
+ Object.defineProperty(exports, "appendArrayColumn", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _utils2.appendArrayColumn;
10
+ }
11
+ });
12
+ exports.default = void 0;
13
+ Object.defineProperty(exports, "evaluate", {
14
+ enumerable: true,
15
+ get: function get() {
16
+ return _utils2.evaluate;
17
+ }
18
+ });
19
+ exports.evaluators = void 0;
8
20
  function _utils() {
9
21
  const data = require("@nocobase/utils");
10
-
11
22
  _utils = function _utils() {
12
23
  return data;
13
24
  };
14
-
15
25
  return data;
16
26
  }
17
-
18
27
  var _utils2 = require("../utils");
19
-
20
28
  var _mathjs = _interopRequireDefault(require("../utils/mathjs"));
21
-
22
29
  var _formulajs = _interopRequireDefault(require("../utils/formulajs"));
23
-
24
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
31
  const evaluators = new (_utils().Registry)();
27
32
  exports.evaluators = evaluators;
28
33
  evaluators.register('math.js', _utils2.evaluate.bind(_mathjs.default));
@@ -4,35 +4,25 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = _default;
7
-
8
7
  function functions() {
9
8
  const data = _interopRequireWildcard(require("@formulajs/formulajs"));
10
-
11
9
  functions = function functions() {
12
10
  return data;
13
11
  };
14
-
15
12
  return data;
16
13
  }
17
-
18
14
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
-
20
15
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
-
22
16
  const fnNames = Object.keys(functions()).filter(key => key !== 'default');
23
17
  const fns = fnNames.map(key => functions()[key]);
24
-
25
18
  function _default(expression, scope = {}) {
26
19
  const fn = new Function(...fnNames, ...Object.keys(scope), `return ${expression}`);
27
20
  const result = fn(...fns, ...Object.values(scope));
28
-
29
21
  if (typeof result === 'number') {
30
22
  if (Number.isNaN(result) || !Number.isFinite(result)) {
31
23
  return null;
32
24
  }
33
-
34
25
  return functions().ROUND(result, 9);
35
26
  }
36
-
37
27
  return result;
38
28
  }
@@ -2,4 +2,5 @@ export declare type Scope = {
2
2
  [key: string]: any;
3
3
  };
4
4
  export declare type Evaluator = (expression: string, scope?: Scope) => any;
5
+ export declare function appendArrayColumn(scope: any, key: any): void;
5
6
  export declare function evaluate(this: Evaluator, expression: string, scope?: Scope): any;
@@ -3,41 +3,33 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.appendArrayColumn = appendArrayColumn;
6
7
  exports.evaluate = evaluate;
7
-
8
8
  function _lodash() {
9
9
  const data = require("lodash");
10
-
11
10
  _lodash = function _lodash() {
12
11
  return data;
13
12
  };
14
-
15
13
  return data;
16
14
  }
17
-
18
15
  function appendArrayColumn(scope, key) {
19
16
  const paths = key.split('.');
20
17
  let data = scope;
21
-
22
18
  for (let p = 0; p < paths.length && data != null; p++) {
19
+ var _data;
23
20
  const path = paths[p];
24
21
  const isIndex = path.match(/^\d+$/);
25
-
26
22
  if (Array.isArray(data) && !isIndex && !data[path]) {
27
23
  data[path] = data.map(item => item[path]);
28
24
  }
29
-
30
- data = data[path];
25
+ data = (_data = data) === null || _data === void 0 ? void 0 : _data[path];
31
26
  }
32
27
  }
33
-
34
28
  function replaceNumberIndex(path, scope) {
35
29
  const segments = path.split('.');
36
30
  const paths = [];
37
-
38
31
  for (let i = 0; i < segments.length; i++) {
39
32
  const p = segments[i];
40
-
41
33
  if (p.match(/^\d+$/)) {
42
34
  paths.push(Array.isArray((0, _lodash().get)(scope, segments.slice(0, i))) ? `[${p}]` : `["${p}"]`);
43
35
  } else {
@@ -48,26 +40,23 @@ function replaceNumberIndex(path, scope) {
48
40
  }
49
41
  }
50
42
  }
51
-
52
43
  return paths.join('');
53
44
  }
54
-
55
45
  function evaluate(expression, scope = {}) {
56
46
  const context = (0, _lodash().cloneDeep)(scope);
57
47
  const exp = expression.trim().replace(/{{\s*([^{}]+)\s*}}/g, (_, v) => {
58
48
  appendArrayColumn(context, v);
59
49
  const item = (0, _lodash().get)(context, v);
60
-
50
+ let result;
61
51
  if (item == null) {
62
- return 'null';
63
- }
64
-
65
- if (typeof item === 'function') {
66
- const result = item();
67
- return typeof result === 'string' ? `'${result.replace(/'/g, "\\'")}'` : result;
52
+ result = 'null';
53
+ } else if (typeof item === 'function') {
54
+ result = item();
55
+ result = typeof result === 'string' ? `'${result.replace(/'/g, "\\'")}'` : result;
56
+ } else {
57
+ result = replaceNumberIndex(v, context);
68
58
  }
69
-
70
- return replaceNumberIndex(v, context);
59
+ return ` ${result} `;
71
60
  });
72
61
  return this(exp, context);
73
62
  }
@@ -4,31 +4,22 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = _default;
7
-
8
7
  function math() {
9
8
  const data = _interopRequireWildcard(require("mathjs"));
10
-
11
9
  math = function math() {
12
10
  return data;
13
11
  };
14
-
15
12
  return data;
16
13
  }
17
-
18
14
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
-
20
15
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
-
22
16
  function _default(expression, scope = {}) {
23
17
  const result = math().evaluate(expression, scope);
24
-
25
18
  if (typeof result === 'number') {
26
19
  if (Number.isNaN(result) || !Number.isFinite(result)) {
27
20
  return null;
28
21
  }
29
-
30
22
  return math().round(result, 9);
31
23
  }
32
-
33
24
  return result;
34
25
  }
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@nocobase/evaluators",
3
- "version": "0.9.1-alpha.1",
3
+ "version": "0.9.2-alpha.1",
4
4
  "description": "",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
7
7
  "license": "Apache-2.0",
8
8
  "dependencies": {
9
9
  "@formulajs/formulajs": "4.2.0",
10
- "@nocobase/utils": "0.9.1-alpha.1",
10
+ "@nocobase/utils": "0.9.2-alpha.1",
11
11
  "mathjs": "^10.6.0"
12
12
  },
13
13
  "repository": {
@@ -15,5 +15,5 @@
15
15
  "url": "git+https://github.com/nocobase/nocobase.git",
16
16
  "directory": "packages/evaluators"
17
17
  },
18
- "gitHead": "56cb184b00dc383b853015d525bf6e79dea92169"
18
+ "gitHead": "a4f103eb0144f07205aff7b2a6be8ea6aa1330df"
19
19
  }
@@ -1,7 +1,3 @@
1
- import React from 'react';
2
- import { css } from '@emotion/css';
3
-
4
- import { i18n } from '@nocobase/client';
5
1
  import { Registry } from '@nocobase/utils/client';
6
2
 
7
3
  import mathjs from './engines/mathjs';
@@ -19,29 +15,8 @@ export const evaluators = new Registry<Evaluator>();
19
15
  evaluators.register('math.js', mathjs);
20
16
  evaluators.register('formula.js', formulajs);
21
17
 
22
- export const renderReference = (key: string) => {
23
- const engine = evaluators.get(key);
24
- if (!engine) {
25
- return null;
26
- }
27
-
28
- return engine.link
29
- ? (
30
- <>
31
- <span className={css`
32
- &:after {
33
- content: ':';
34
- }
35
- & + a {
36
- margin-left: .25em;
37
- }
38
- `}>
39
- {i18n.t('Syntax references')}
40
- </span>
41
- <a href={engine.link} target="_blank">{engine.label}</a>
42
- </>
43
- )
44
- : null
45
- };
18
+ export function getOptions() {
19
+ return Array.from((evaluators as Registry<Evaluator>).getEntities()).reduce((result: any[], [value, options]) => result.concat({ value, ...options }), []);
20
+ }
46
21
 
47
22
  export default evaluators;
@@ -6,7 +6,7 @@ import formulajs from "../utils/formulajs";
6
6
 
7
7
 
8
8
 
9
- export { Evaluator } from '../utils';
9
+ export { Evaluator, evaluate, appendArrayColumn } from '../utils';
10
10
 
11
11
  export const evaluators = new Registry<Evaluator>();
12
12
 
@@ -6,7 +6,7 @@ export type Scope = { [key: string]: any };
6
6
 
7
7
  export type Evaluator = (expression: string, scope?: Scope) => any;
8
8
 
9
- function appendArrayColumn(scope, key) {
9
+ export function appendArrayColumn(scope, key) {
10
10
  const paths = key.split('.');
11
11
  let data = scope;
12
12
  for (let p = 0; p < paths.length && data != null; p++) {
@@ -15,13 +15,13 @@ function appendArrayColumn(scope, key) {
15
15
  if (Array.isArray(data) && !isIndex && !data[path]) {
16
16
  data[path] = data.map(item => item[path]);
17
17
  }
18
- data = data[path];
18
+ data = data?.[path];
19
19
  }
20
20
  }
21
21
 
22
22
  function replaceNumberIndex(path: string, scope: Scope): string {
23
23
  const segments = path.split('.');
24
- const paths = [];
24
+ const paths: string[] = [];
25
25
 
26
26
  for (let i = 0; i < segments.length; i++) {
27
27
  const p = segments[i];
@@ -46,16 +46,18 @@ export function evaluate(this: Evaluator, expression: string, scope: Scope = {})
46
46
 
47
47
  const item = get(context, v);
48
48
 
49
- if (item == null) {
50
- return 'null';
51
- }
49
+ let result;
52
50
 
53
- if (typeof item === 'function') {
54
- const result = item();
55
- return typeof result === 'string' ? `'${result.replace(/'/g, "\\'")}'` : result;
51
+ if (item == null) {
52
+ result = 'null';
53
+ } else if (typeof item === 'function') {
54
+ result = item();
55
+ result = typeof result === 'string' ? `'${result.replace(/'/g, "\\'")}'` : result;
56
+ } else {
57
+ result = replaceNumberIndex(v, context);
56
58
  }
57
59
 
58
- return replaceNumberIndex(v, context);
60
+ return ` ${result} `;
59
61
  });
60
62
  return this(exp, context);
61
63
  }