amis-core 1.0.0-beta.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 (211) hide show
  1. package/dist/Root.js +94 -0
  2. package/dist/RootRenderer.js +288 -0
  3. package/dist/SchemaRenderer.js +323 -0
  4. package/dist/Scoped.js +252 -0
  5. package/dist/WithRootStore.js +44 -0
  6. package/dist/WithStore.js +179 -0
  7. package/dist/__tests__/compat.test.d.ts +1 -0
  8. package/dist/__tests__/factory.test.d.ts +1 -0
  9. package/dist/__tests__/filter.test.d.ts +1 -0
  10. package/dist/__tests__/helper.d.ts +13 -0
  11. package/dist/__tests__/tokenize.test.d.ts +1 -0
  12. package/dist/actions/Action.js +119 -0
  13. package/dist/actions/AjaxAction.js +96 -0
  14. package/dist/actions/BreakAction.js +35 -0
  15. package/dist/actions/BroadcastAction.js +49 -0
  16. package/dist/actions/CmptAction.js +60 -0
  17. package/dist/actions/ContinueAction.js +35 -0
  18. package/dist/actions/CopyAction.js +43 -0
  19. package/dist/actions/CustomAction.js +49 -0
  20. package/dist/actions/DialogAction.js +104 -0
  21. package/dist/actions/DrawerAction.js +66 -0
  22. package/dist/actions/EmailAction.js +48 -0
  23. package/dist/actions/LinkAction.js +52 -0
  24. package/dist/actions/LoopAction.js +107 -0
  25. package/dist/actions/PageAction.js +80 -0
  26. package/dist/actions/ParallelAction.js +40 -0
  27. package/dist/actions/SwitchAction.js +52 -0
  28. package/dist/actions/ToastAction.js +35 -0
  29. package/dist/components/LazyComponent.js +99 -0
  30. package/dist/env.js +20 -0
  31. package/dist/envOverwrite.js +43 -0
  32. package/dist/factory.js +308 -0
  33. package/dist/index.js +218 -0
  34. package/dist/index2.js +255 -0
  35. package/dist/locale.js +114 -0
  36. package/dist/renderers/Form.js +1162 -0
  37. package/dist/renderers/Item.js +636 -0
  38. package/dist/renderers/Options.js +881 -0
  39. package/dist/renderers/Placeholder.js +31 -0
  40. package/dist/renderers/builtin.js +27 -0
  41. package/dist/renderers/wrapControl.js +507 -0
  42. package/dist/src/Root.d.ts +37 -0
  43. package/dist/src/RootRenderer.d.ts +27 -0
  44. package/dist/src/SchemaRenderer.d.ts +37 -0
  45. package/dist/src/Scoped.d.ts +38 -0
  46. package/dist/src/WithRootStore.d.ts +737 -0
  47. package/dist/src/WithStore.d.ts +5 -0
  48. package/dist/src/actions/Action.d.ts +38 -0
  49. package/dist/src/actions/AjaxAction.d.ts +25 -0
  50. package/dist/src/actions/BreakAction.d.ts +15 -0
  51. package/dist/src/actions/BroadcastAction.d.ts +16 -0
  52. package/dist/src/actions/CmptAction.d.ts +20 -0
  53. package/dist/src/actions/ContinueAction.d.ts +15 -0
  54. package/dist/src/actions/CopyAction.d.ts +20 -0
  55. package/dist/src/actions/CustomAction.d.ts +17 -0
  56. package/dist/src/actions/Decorators.d.ts +25 -0
  57. package/dist/src/actions/DialogAction.d.ts +57 -0
  58. package/dist/src/actions/DrawerAction.d.ts +30 -0
  59. package/dist/src/actions/EmailAction.d.ts +23 -0
  60. package/dist/src/actions/LinkAction.d.ts +24 -0
  61. package/dist/src/actions/LoopAction.d.ts +19 -0
  62. package/dist/src/actions/PageAction.d.ts +39 -0
  63. package/dist/src/actions/ParallelAction.d.ts +8 -0
  64. package/dist/src/actions/SwitchAction.d.ts +11 -0
  65. package/dist/src/actions/ToastAction.d.ts +19 -0
  66. package/dist/src/actions/index.d.ts +21 -0
  67. package/dist/src/components/LazyComponent.d.ts +32 -0
  68. package/dist/src/env.d.ts +172 -0
  69. package/dist/src/envOverwrite.d.ts +4 -0
  70. package/dist/src/factory.d.ts +78 -0
  71. package/dist/src/index.d.ts +25 -0
  72. package/dist/src/locale.d.ts +82 -0
  73. package/dist/src/renderers/Form.d.ts +352 -0
  74. package/dist/src/renderers/Item.d.ts +795 -0
  75. package/dist/src/renderers/Options.d.ts +150 -0
  76. package/dist/src/renderers/Placeholder.d.ts +6 -0
  77. package/dist/src/renderers/builtin.d.ts +1 -0
  78. package/dist/src/renderers/wrapControl.d.ts +446 -0
  79. package/dist/src/schema.d.ts +369 -0
  80. package/dist/src/store/app.d.ts +89 -0
  81. package/dist/src/store/combo.d.ts +8504 -0
  82. package/dist/src/store/crud.d.ts +124 -0
  83. package/dist/src/store/form.d.ts +3394 -0
  84. package/dist/src/store/formItem.d.ts +130 -0
  85. package/dist/src/store/iRenderer.d.ts +46 -0
  86. package/dist/src/store/index.d.ts +105 -0
  87. package/dist/src/store/list.d.ts +270 -0
  88. package/dist/src/store/manager.d.ts +115 -0
  89. package/dist/src/store/modal.d.ts +84 -0
  90. package/dist/src/store/node.d.ts +22 -0
  91. package/dist/src/store/pagination.d.ts +58 -0
  92. package/dist/src/store/root.d.ts +79 -0
  93. package/dist/src/store/service.d.ts +71 -0
  94. package/dist/src/store/table-v2.d.ts +309 -0
  95. package/dist/src/store/table.d.ts +8334 -0
  96. package/dist/src/theme.d.ts +83 -0
  97. package/dist/src/types.d.ts +217 -0
  98. package/dist/src/utils/Animation.d.ts +22 -0
  99. package/dist/src/utils/ColorScale.d.ts +19 -0
  100. package/dist/src/utils/DataSchema.d.ts +25 -0
  101. package/dist/src/utils/DataScope.d.ts +23 -0
  102. package/dist/src/utils/RootClose.d.ts +4 -0
  103. package/dist/src/utils/SimpleMap.d.ts +8 -0
  104. package/dist/src/utils/api.d.ts +27 -0
  105. package/dist/src/utils/attachmentAdpator.d.ts +7 -0
  106. package/dist/src/utils/autobind.d.ts +7 -0
  107. package/dist/src/utils/columnsSplit.d.ts +1 -0
  108. package/dist/src/utils/dataMapping.d.ts +3 -0
  109. package/dist/src/utils/date.d.ts +4 -0
  110. package/dist/src/utils/debug.d.ts +26 -0
  111. package/dist/src/utils/dom.d.ts +13 -0
  112. package/dist/src/utils/errors.d.ts +6 -0
  113. package/dist/src/utils/escapeHtml.d.ts +1 -0
  114. package/dist/src/utils/filter-schema.d.ts +12 -0
  115. package/dist/src/utils/filter.d.ts +1 -0
  116. package/dist/src/utils/formatDuration.d.ts +1 -0
  117. package/dist/src/utils/formula.d.ts +16 -0
  118. package/dist/src/utils/getVariable.d.ts +3 -0
  119. package/dist/src/utils/grammar.d.ts +4 -0
  120. package/dist/src/utils/handleAction.d.ts +6 -0
  121. package/dist/src/utils/helper.d.ts +286 -0
  122. package/dist/src/utils/icon.d.ts +12 -0
  123. package/dist/src/utils/image.d.ts +17 -0
  124. package/dist/src/utils/index.d.ts +12 -0
  125. package/dist/src/utils/isPureVariable.d.ts +1 -0
  126. package/dist/src/utils/json-schema-2-amis-schema.d.ts +6 -0
  127. package/dist/src/utils/keyToPath.d.ts +6 -0
  128. package/dist/src/utils/makeSorter.d.ts +1 -0
  129. package/dist/src/utils/markdown.d.ts +5 -0
  130. package/dist/src/utils/normalizeLink.d.ts +1 -0
  131. package/dist/src/utils/normalizeOptions.d.ts +7 -0
  132. package/dist/src/utils/object.d.ts +15 -0
  133. package/dist/src/utils/offset.d.ts +14 -0
  134. package/dist/src/utils/offsetParent.d.ts +4 -0
  135. package/dist/src/utils/optionValueCompare.d.ts +3 -0
  136. package/dist/src/utils/position.d.ts +15 -0
  137. package/dist/src/utils/prettyBytes.d.ts +1 -0
  138. package/dist/src/utils/renderer-event.d.ts +44 -0
  139. package/dist/src/utils/replaceText.d.ts +6 -0
  140. package/dist/src/utils/resize-sensor.d.ts +6 -0
  141. package/dist/src/utils/resolveVariable.d.ts +1 -0
  142. package/dist/src/utils/resolveVariableAndFilter.d.ts +1 -0
  143. package/dist/src/utils/scrollPosition.d.ts +6 -0
  144. package/dist/src/utils/string2regExp.d.ts +1 -0
  145. package/dist/src/utils/stripNumber.d.ts +1 -0
  146. package/dist/src/utils/style.d.ts +10 -0
  147. package/dist/src/utils/tokenize.d.ts +1 -0
  148. package/dist/src/utils/tpl-builtin.d.ts +18 -0
  149. package/dist/src/utils/tpl-lodash.d.ts +4 -0
  150. package/dist/src/utils/tpl.d.ts +11 -0
  151. package/dist/src/utils/validations.d.ts +39 -0
  152. package/dist/store/app.js +190 -0
  153. package/dist/store/combo.js +154 -0
  154. package/dist/store/crud.js +413 -0
  155. package/dist/store/form.js +579 -0
  156. package/dist/store/formItem.js +846 -0
  157. package/dist/store/iRenderer.js +189 -0
  158. package/dist/store/index.js +103 -0
  159. package/dist/store/list.js +248 -0
  160. package/dist/store/manager.js +56 -0
  161. package/dist/store/modal.js +54 -0
  162. package/dist/store/node.js +93 -0
  163. package/dist/store/pagination.js +60 -0
  164. package/dist/store/root.js +45 -0
  165. package/dist/store/service.js +415 -0
  166. package/dist/store/table-v2.js +471 -0
  167. package/dist/store/table.js +1105 -0
  168. package/dist/theme.js +93 -0
  169. package/dist/tsconfig.tsbuildinfo +1 -0
  170. package/dist/utils/Animation.js +290 -0
  171. package/dist/utils/DataSchema.js +120 -0
  172. package/dist/utils/DataScope.js +151 -0
  173. package/dist/utils/SimpleMap.js +46 -0
  174. package/dist/utils/api.js +555 -0
  175. package/dist/utils/autobind.js +94 -0
  176. package/dist/utils/dataMapping.js +136 -0
  177. package/dist/utils/date.js +90 -0
  178. package/dist/utils/debug.js +343 -0
  179. package/dist/utils/errors.js +23 -0
  180. package/dist/utils/escapeHtml.js +24 -0
  181. package/dist/utils/filter-schema.js +75 -0
  182. package/dist/utils/filter.js +481 -0
  183. package/dist/utils/formatDuration.js +27 -0
  184. package/dist/utils/formula.js +165 -0
  185. package/dist/utils/getVariable.js +29 -0
  186. package/dist/utils/grammar.js +54 -0
  187. package/dist/utils/helper.js +1283 -0
  188. package/dist/utils/isPureVariable.js +16 -0
  189. package/dist/utils/keyToPath.js +34 -0
  190. package/dist/utils/makeSorter.js +30 -0
  191. package/dist/utils/normalizeLink.js +47 -0
  192. package/dist/utils/normalizeOptions.js +92 -0
  193. package/dist/utils/object.js +156 -0
  194. package/dist/utils/offset.js +36 -0
  195. package/dist/utils/offsetParent.js +27 -0
  196. package/dist/utils/optionValueCompare.js +25 -0
  197. package/dist/utils/position.js +50 -0
  198. package/dist/utils/prettyBytes.js +28 -0
  199. package/dist/utils/renderer-event.js +131 -0
  200. package/dist/utils/replaceText.js +35 -0
  201. package/dist/utils/resize-sensor.js +177 -0
  202. package/dist/utils/resolveVariable.js +39 -0
  203. package/dist/utils/resolveVariableAndFilter.js +37 -0
  204. package/dist/utils/string2regExp.js +18 -0
  205. package/dist/utils/stripNumber.js +20 -0
  206. package/dist/utils/tokenize.js +33 -0
  207. package/dist/utils/tpl-builtin.js +71 -0
  208. package/dist/utils/tpl-lodash.js +71 -0
  209. package/dist/utils/tpl.js +140 -0
  210. package/dist/utils/validations.js +377 -0
  211. package/package.json +121 -0
@@ -0,0 +1,35 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ var helper = require('./helper.js');
11
+ var object = require('./object.js');
12
+
13
+ /**
14
+ * 对文本进行替换
15
+ */
16
+ function replaceText(schema, replaceText, replaceTextIgnoreKeys) {
17
+ // 进行文本替换
18
+ if (replaceText && object.isObject(replaceText)) {
19
+ var replaceKeys_1 = Object.keys(replaceText);
20
+ replaceKeys_1.sort(function (a, b) { return b.length - a.length; }); // 避免用户将短的放前面
21
+ var IgnoreKeys_1 = new Set(replaceTextIgnoreKeys || []);
22
+ helper.JSONTraverse(schema, function (value, key, object) {
23
+ if (typeof value === 'string' && !IgnoreKeys_1.has(key)) {
24
+ for (var _i = 0, replaceKeys_2 = replaceKeys_1; _i < replaceKeys_2.length; _i++) {
25
+ var replaceKey = replaceKeys_2[_i];
26
+ if (~value.indexOf(replaceKey)) {
27
+ value = object[key] = value.replaceAll(replaceKey, replaceText[replaceKey]);
28
+ }
29
+ }
30
+ }
31
+ });
32
+ }
33
+ }
34
+
35
+ exports.replaceText = replaceText;
@@ -0,0 +1,177 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ /**
11
+ * @file resize-sensor.js.
12
+ * @author fex
13
+ */
14
+ var EventQueue = /** @class */ (function () {
15
+ function EventQueue() {
16
+ this.q = [];
17
+ }
18
+ EventQueue.prototype.add = function (cb) {
19
+ this.q.push(cb);
20
+ };
21
+ EventQueue.prototype.call = function () {
22
+ var args = [];
23
+ for (var _i = 0; _i < arguments.length; _i++) {
24
+ args[_i] = arguments[_i];
25
+ }
26
+ this.q.forEach(function (fn) {
27
+ fn.apply(void 0, args);
28
+ });
29
+ };
30
+ return EventQueue;
31
+ }());
32
+ function getComputedStyle(element, prop) {
33
+ if (element.currentStyle) {
34
+ return element.currentStyle[prop];
35
+ }
36
+ else if (window.getComputedStyle) {
37
+ var style = window.getComputedStyle(element, undefined);
38
+ return style ? style.getPropertyValue(prop) : undefined;
39
+ }
40
+ else {
41
+ return element.style[prop];
42
+ }
43
+ }
44
+ function attachResizeEvent(element, resized) {
45
+ if (!element) {
46
+ return;
47
+ }
48
+ if (!element.resizedAttached) {
49
+ element.resizedAttached = new EventQueue();
50
+ element.resizedAttached.add(resized);
51
+ }
52
+ else if (element.resizedAttached) {
53
+ element.resizedAttached.add(resized);
54
+ return;
55
+ }
56
+ var resizeSensor = (element.resizeSensor =
57
+ document.createElement('div'));
58
+ resizeSensor.className = 'resize-sensor';
59
+ var style = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;';
60
+ var styleChild = 'position: absolute; left: 0; top: 0;';
61
+ resizeSensor.style.cssText = style;
62
+ resizeSensor.innerHTML = "\n <div class=\"resize-sensor-expand\" style=\"".concat(style, "\">\n <div style=\"").concat(styleChild, "\"></div>\n </div>\n <div class=\"resize-sensor-shrink\" style=\"").concat(style, "\">\n <div style=\"").concat(styleChild, " width: 200%; height: 200%\"></div>\n </div>\n <div class=\"resize-sensor-appear\" style=\"").concat(style, "animation-name: apearSensor; animation-duration: 0.2s;\"></div>");
63
+ // 要定义 resizeSensor 这个动画,靠这个监听出现。
64
+ element.appendChild(resizeSensor);
65
+ element.hasInlineStyle = element.hasAttribute('style');
66
+ var position = (element.originPosition = getComputedStyle(element, 'position'));
67
+ if (!~['fixed', 'absolute'].indexOf(position)) {
68
+ element.style.position = 'relative';
69
+ }
70
+ var expand = resizeSensor.children[0];
71
+ var expandChild = expand.children[0];
72
+ var shrink = resizeSensor.children[1];
73
+ // let shrinkChild = shrink.children[0] as HTMLElement;
74
+ var appear = resizeSensor.children[2];
75
+ var lastWidth, lastHeight;
76
+ var reset = function () {
77
+ expandChild.style.width = expand.offsetWidth + 10 + 'px';
78
+ expandChild.style.height = expand.offsetHeight + 10 + 'px';
79
+ expand.scrollLeft = expand.scrollWidth;
80
+ expand.scrollTop = expand.scrollHeight;
81
+ shrink.scrollLeft = shrink.scrollWidth;
82
+ shrink.scrollTop = shrink.scrollHeight;
83
+ lastWidth = element.offsetWidth;
84
+ lastHeight = element.offsetHeight;
85
+ };
86
+ var appeared = function () {
87
+ reset();
88
+ // 如果初始是隐藏状态,首次显示也触发resize事件。
89
+ if (isHidden) {
90
+ changed();
91
+ isHidden = false;
92
+ }
93
+ };
94
+ reset();
95
+ var changed = function () {
96
+ if (element.resizedAttached) {
97
+ element.resizedAttached.call();
98
+ }
99
+ };
100
+ var addEvent = function (el, name, cb) {
101
+ if (el.attachEvent) {
102
+ el.attachEvent('on' + name, cb);
103
+ }
104
+ else {
105
+ el.addEventListener(name, cb);
106
+ }
107
+ };
108
+ var removeEvent = function (el, name, cb) {
109
+ if (el.detachEvent) {
110
+ el.detachEvent('on' + name, cb);
111
+ }
112
+ else {
113
+ el.removeEventListener(name, cb);
114
+ }
115
+ };
116
+ var onScroll = function (e) {
117
+ if (element.offsetWidth != lastWidth ||
118
+ element.offsetHeight != lastHeight) {
119
+ changed();
120
+ }
121
+ reset();
122
+ };
123
+ addEvent(expand, 'scroll', onScroll);
124
+ addEvent(shrink, 'scroll', onScroll);
125
+ addEvent(appear, 'animationstart', appeared);
126
+ var isHidden = !expand.offsetWidth;
127
+ return function () {
128
+ removeEvent(expand, 'scroll', onScroll);
129
+ removeEvent(shrink, 'scroll', onScroll);
130
+ removeEvent(appear, 'animationstart', appeared);
131
+ };
132
+ }
133
+ function detach(element) {
134
+ if (element.resizeSensor) {
135
+ if (element.hasInlineStyle) {
136
+ element.style.position = element.originPosition;
137
+ }
138
+ else {
139
+ element.removeAttribute('style');
140
+ }
141
+ try {
142
+ element.removeChild(element.resizeSensor);
143
+ }
144
+ catch (e) { }
145
+ delete element.resizeSensor;
146
+ delete element.resizedAttached;
147
+ delete element.hasInlineStyle;
148
+ delete element.originPosition;
149
+ }
150
+ }
151
+ function resizeSensor(element, callback, once) {
152
+ if (once === void 0) { once = false; }
153
+ if (!element) {
154
+ return function () { };
155
+ }
156
+ var disposeEvent = undefined;
157
+ if (once) {
158
+ disposeEvent = attachResizeEvent(element, function () {
159
+ callback.apply(this, arguments);
160
+ disposeEvent === null || disposeEvent === void 0 ? void 0 : disposeEvent();
161
+ detach(element);
162
+ });
163
+ return;
164
+ }
165
+ disposeEvent = attachResizeEvent(element, callback);
166
+ var detached = false;
167
+ return function () {
168
+ if (detached)
169
+ return;
170
+ detached = true;
171
+ disposeEvent === null || disposeEvent === void 0 ? void 0 : disposeEvent();
172
+ detach(element);
173
+ };
174
+ }
175
+
176
+ exports.getComputedStyle = getComputedStyle;
177
+ exports.resizeSensor = resizeSensor;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ var amisFormula = require('amis-formula');
11
+ var getVariable = require('./getVariable.js');
12
+
13
+ function resolveVariable(path, data) {
14
+ if (data === void 0) { data = {}; }
15
+ if (path === '&' || path == '$$') {
16
+ return data;
17
+ }
18
+ else if (!path || typeof path !== 'string') {
19
+ return undefined;
20
+ }
21
+ else if (!~path.indexOf(':')) {
22
+ // 简单用法直接用 getVariable
23
+ return getVariable.getVariable(data, path[0] === '$' ? path.substring(1) : path);
24
+ }
25
+ // window:xxx ls:xxx.xxx
26
+ // 带 namespace 的用公式
27
+ // 主要是用公式会严格点,不能出现奇怪的变量名
28
+ try {
29
+ return new amisFormula.Evaluator(data).evalute(amisFormula.parse(path, {
30
+ variableMode: true,
31
+ allowFilter: false
32
+ }));
33
+ }
34
+ catch (e) {
35
+ return undefined;
36
+ }
37
+ }
38
+
39
+ exports.resolveVariable = resolveVariable;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ var amisFormula = require('amis-formula');
11
+
12
+ var resolveVariableAndFilter = function (path, data, defaultFilter, fallbackValue) {
13
+ if (data === void 0) { data = {}; }
14
+ if (defaultFilter === void 0) { defaultFilter = '| html'; }
15
+ if (fallbackValue === void 0) { fallbackValue = function (value) { return value; }; }
16
+ if (!path || typeof path !== 'string') {
17
+ return undefined;
18
+ }
19
+ try {
20
+ var ast = amisFormula.parse(path, {
21
+ evalMode: false,
22
+ allowFilter: true
23
+ });
24
+ var ret = new amisFormula.Evaluator(data, {
25
+ defaultFilter: defaultFilter
26
+ }).evalute(ast);
27
+ return ret == null && !~path.indexOf('default') && !~path.indexOf('now')
28
+ ? fallbackValue(ret)
29
+ : ret;
30
+ }
31
+ catch (e) {
32
+ console.warn(e);
33
+ return undefined;
34
+ }
35
+ };
36
+
37
+ exports.resolveVariableAndFilter = resolveVariableAndFilter;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ function string2regExp(value, caseSensitive) {
11
+ if (caseSensitive === void 0) { caseSensitive = false; }
12
+ if (typeof value !== 'string') {
13
+ throw new TypeError('Expected a string');
14
+ }
15
+ return new RegExp(value.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d'), !caseSensitive ? 'i' : '');
16
+ }
17
+
18
+ exports.string2regExp = string2regExp;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ // 主要用于解决 0.1+0.2 结果的精度问题导致太长
11
+ function stripNumber(number) {
12
+ if (typeof number === 'number') {
13
+ return parseFloat(number.toPrecision(12));
14
+ }
15
+ else {
16
+ return number;
17
+ }
18
+ }
19
+
20
+ exports.stripNumber = stripNumber;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ var amisFormula = require('amis-formula');
11
+
12
+ var tokenize = function (str, data, defaultFilter) {
13
+ if (defaultFilter === void 0) { defaultFilter = '| html'; }
14
+ if (!str || typeof str !== 'string') {
15
+ return str;
16
+ }
17
+ try {
18
+ var ast = amisFormula.parse(str, {
19
+ evalMode: false,
20
+ allowFilter: true
21
+ });
22
+ var result = new amisFormula.Evaluator(data, {
23
+ defaultFilter: defaultFilter
24
+ }).evalute(ast);
25
+ return "".concat(result == null ? '' : result);
26
+ }
27
+ catch (e) {
28
+ console.warn(e);
29
+ return str;
30
+ }
31
+ };
32
+
33
+ exports.tokenize = tokenize;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ var amisFormula = require('amis-formula');
11
+ require('moment');
12
+ require('tslib');
13
+ require('lodash/isPlainObject');
14
+ var tokenize = require('./tokenize.js');
15
+ require('./filter.js');
16
+
17
+ function matchSynatax(str) {
18
+ var from = 0;
19
+ while (true) {
20
+ var idx = str.indexOf('$', from);
21
+ if (~idx) {
22
+ var nextToken = str[idx + 1];
23
+ // 如果没有下一个字符,或者下一个字符是引号或者空格
24
+ // 这个一般不是取值用法
25
+ if (!nextToken || ~['"', "'", ' '].indexOf(nextToken)) {
26
+ from = idx + 1;
27
+ continue;
28
+ }
29
+ // 如果上个字符是转义也不是取值用法
30
+ var prevToken = str[idx - 1];
31
+ if (prevToken && prevToken === '\\') {
32
+ from = idx + 1;
33
+ continue;
34
+ }
35
+ return true;
36
+ }
37
+ else {
38
+ break;
39
+ }
40
+ }
41
+ return false;
42
+ }
43
+ function register() {
44
+ return {
45
+ name: 'builtin',
46
+ test: function (str) { return typeof str === 'string' && matchSynatax(str); },
47
+ removeEscapeToken: function (str) {
48
+ return typeof str === 'string' ? str.replace(/\\\$/g, '$') : str;
49
+ },
50
+ compile: function (str, data, defaultFilter) {
51
+ if (defaultFilter === void 0) { defaultFilter = '| html'; }
52
+ try {
53
+ return tokenize.tokenize(str, data, defaultFilter);
54
+ }
55
+ catch (e) {
56
+ return "error: ".concat(e.message);
57
+ }
58
+ }
59
+ };
60
+ }
61
+
62
+ Object.defineProperty(exports, 'getFilters', {
63
+ enumerable: true,
64
+ get: function () { return amisFormula.getFilters; }
65
+ });
66
+ Object.defineProperty(exports, 'registerFilter', {
67
+ enumerable: true,
68
+ get: function () { return amisFormula.registerFilter; }
69
+ });
70
+ exports.tokenize = tokenize.tokenize;
71
+ exports.register = register;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ var tslib = require('tslib');
11
+ var template = require('lodash/template');
12
+ var amisFormula = require('amis-formula');
13
+ var moment = require('moment');
14
+ require('lodash/isPlainObject');
15
+ require('./filter.js');
16
+
17
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
18
+
19
+ var template__default = /*#__PURE__*/_interopDefaultLegacy(template);
20
+ var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
21
+
22
+ var imports = {
23
+ default: undefined,
24
+ moment: moment__default["default"],
25
+ countDown: function (end) {
26
+ if (!end) {
27
+ return '--';
28
+ }
29
+ var date = new Date(parseInt(end, 10) * 1000);
30
+ var now = Date.now();
31
+ if (date.getTime() < now) {
32
+ return '已结束';
33
+ }
34
+ return Math.ceil((date.getTime() - now) / (1000 * 60 * 60 * 24)) + '天';
35
+ },
36
+ formatDate: function (value, format, inputFormat) {
37
+ if (format === void 0) { format = 'LLL'; }
38
+ if (inputFormat === void 0) { inputFormat = ''; }
39
+ return moment__default["default"](value, inputFormat).format(format);
40
+ }
41
+ };
42
+ // 缓存一下提升性能
43
+ var EVAL_CACHE = {};
44
+ function lodashCompile(str, data) {
45
+ try {
46
+ var filters = amisFormula.getFilters();
47
+ var finnalImports = tslib.__assign(tslib.__assign(tslib.__assign({}, filters), { formatTimeStamp: filters.date, formatNumber: filters.number, defaultValue: filters.defaut }), imports);
48
+ delete finnalImports.default; // default 是个关键字,不能 imports 到 lodash 里面去。
49
+ var fn = EVAL_CACHE[str] ||
50
+ (EVAL_CACHE[str] = template__default["default"](str, {
51
+ imports: finnalImports,
52
+ variable: 'data',
53
+ // 如果不传这个,默认模板语法也存在 ${xxx} 语法,这个跟内置语法规则冲突。
54
+ // 为了不带来困惑,禁用掉这种用法。
55
+ interpolate: /<%=([\s\S]+?)%>/g
56
+ }));
57
+ return fn.call(data, data);
58
+ }
59
+ catch (e) {
60
+ return "<span class=\"text-danger\">".concat(e.message, "</span>");
61
+ }
62
+ }
63
+ function register() {
64
+ return {
65
+ name: 'lodash',
66
+ test: function (str) { return !!~str.indexOf('<%'); },
67
+ compile: function (str, data) { return lodashCompile(str, data); }
68
+ };
69
+ }
70
+
71
+ exports.register = register;
@@ -0,0 +1,140 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ var tslib = require('tslib');
11
+ var tplBuiltin = require('./tpl-builtin.js');
12
+ var tplLodash = require('./tpl-lodash.js');
13
+ var amisFormula = require('amis-formula');
14
+
15
+ var enginers = {};
16
+ function registerTplEnginer(name, enginer) {
17
+ enginers[name] = enginer;
18
+ }
19
+ function filter(tpl, data) {
20
+ if (data === void 0) { data = {}; }
21
+ var rest = [];
22
+ for (var _i = 2; _i < arguments.length; _i++) {
23
+ rest[_i - 2] = arguments[_i];
24
+ }
25
+ if (!tpl || typeof tpl !== 'string') {
26
+ return '';
27
+ }
28
+ var keys = Object.keys(enginers);
29
+ for (var i = 0, len = keys.length; i < len; i++) {
30
+ var enginer = enginers[keys[i]];
31
+ if (enginer.test(tpl)) {
32
+ return enginer.compile.apply(enginer, tslib.__spreadArray([tpl, data], rest, false));
33
+ }
34
+ else if (enginer.removeEscapeToken) {
35
+ tpl = enginer.removeEscapeToken(tpl);
36
+ }
37
+ }
38
+ return tpl;
39
+ }
40
+ // 缓存一下提升性能
41
+ var EVAL_CACHE = {};
42
+ var customEvalExpressionFn;
43
+ function setCustomEvalExpression(fn) {
44
+ customEvalExpressionFn = fn;
45
+ }
46
+ // 几乎所有的 visibleOn requiredOn 都是通过这个方法判断出来结果,很粗暴也存在风险,建议自己实现。
47
+ // 如果想自己实现,请通过 setCustomEvalExpression 来替换。
48
+ function evalExpression(expression, data) {
49
+ if (typeof customEvalExpressionFn === 'function') {
50
+ return customEvalExpressionFn(expression, data);
51
+ }
52
+ if (!expression || typeof expression !== 'string') {
53
+ return false;
54
+ }
55
+ /* jshint evil:true */
56
+ try {
57
+ if (typeof expression === 'string' &&
58
+ expression.substring(0, 2) === '${' &&
59
+ expression[expression.length - 1] === '}') {
60
+ // 启用新版本的公式表达式
61
+ return evalFormula(expression, data);
62
+ }
63
+ // 后续改用 FormulaExec['js']
64
+ var debug = false;
65
+ var idx = expression.indexOf('debugger');
66
+ if (~idx) {
67
+ debug = true;
68
+ expression = expression.replace(/debugger;?/, '');
69
+ }
70
+ var fn = void 0;
71
+ if (expression in EVAL_CACHE) {
72
+ fn = EVAL_CACHE[expression];
73
+ }
74
+ else {
75
+ fn = new Function('data', 'utils', "with(data) {".concat(debug ? 'debugger;' : '', "return !!(").concat(expression, ");}"));
76
+ EVAL_CACHE[expression] = fn;
77
+ }
78
+ data = data || {};
79
+ return fn.call(data, data, amisFormula.getFilters());
80
+ }
81
+ catch (e) {
82
+ console.warn(expression, e);
83
+ return false;
84
+ }
85
+ }
86
+ var AST_CACHE = {};
87
+ function evalFormula(expression, data) {
88
+ var ast = AST_CACHE[expression] ||
89
+ amisFormula.parse(expression, {
90
+ evalMode: false
91
+ });
92
+ AST_CACHE[expression] = ast;
93
+ return amisFormula.evaluate(ast, data, {
94
+ defaultFilter: 'raw'
95
+ });
96
+ }
97
+ var customEvalJsFn;
98
+ function setCustomEvalJs(fn) {
99
+ customEvalJsFn = fn;
100
+ }
101
+ // 这个主要用在 formula 里面,用来动态的改变某个值。也很粗暴,建议自己实现。
102
+ // 如果想自己实现,请通过 setCustomEvalJs 来替换。
103
+ function evalJS(js, data) {
104
+ if (typeof customEvalJsFn === 'function') {
105
+ return customEvalJsFn(js, data);
106
+ }
107
+ /* jshint evil:true */
108
+ try {
109
+ if (typeof js === 'string' &&
110
+ js.substring(0, 2) === '${' &&
111
+ js[js.length - 1] === '}') {
112
+ // 启用新版本的公式表达式
113
+ return evalFormula(js, data);
114
+ }
115
+ var fn = new Function('data', 'utils', "with(data) {".concat(/^\s*return\b/.test(js) ? '' : 'return ').concat(js, ";}"));
116
+ data = data || {};
117
+ return fn.call(data, data, amisFormula.getFilters());
118
+ }
119
+ catch (e) {
120
+ console.warn(js, e);
121
+ return null;
122
+ }
123
+ }
124
+ [tplBuiltin.register, tplLodash.register].forEach(function (fn) {
125
+ if (!fn)
126
+ return;
127
+ var info = fn();
128
+ registerTplEnginer(info.name, {
129
+ test: info.test,
130
+ compile: info.compile,
131
+ removeEscapeToken: info.removeEscapeToken
132
+ });
133
+ });
134
+
135
+ exports.evalExpression = evalExpression;
136
+ exports.evalJS = evalJS;
137
+ exports.filter = filter;
138
+ exports.registerTplEnginer = registerTplEnginer;
139
+ exports.setCustomEvalExpression = setCustomEvalExpression;
140
+ exports.setCustomEvalJs = setCustomEvalJs;