amis-core 6.7.0 → 6.8.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.
- package/esm/Root.js +1 -1
- package/esm/RootRenderer.js +1 -1
- package/esm/SchemaRenderer.d.ts +0 -1
- package/esm/SchemaRenderer.js +15 -6
- package/esm/Scoped.js +2 -1
- package/esm/StatusScoped.js +1 -1
- package/esm/WithRootStore.js +1 -1
- package/esm/WithStore.js +8 -8
- package/esm/actions/Action.js +2 -1
- package/esm/actions/AjaxAction.js +1 -1
- package/esm/actions/BreakAction.js +1 -1
- package/esm/actions/BroadcastAction.js +1 -1
- package/esm/actions/CmptAction.js +1 -1
- package/esm/actions/ContinueAction.js +1 -1
- package/esm/actions/CopyAction.js +1 -1
- package/esm/actions/CustomAction.js +2 -1
- package/esm/actions/DialogAction.js +3 -1
- package/esm/actions/DrawerAction.js +2 -1
- package/esm/actions/EmailAction.js +1 -1
- package/esm/actions/EventAction.js +2 -1
- package/esm/actions/LinkAction.js +1 -1
- package/esm/actions/LoopAction.js +2 -1
- package/esm/actions/PageAction.js +1 -1
- package/esm/actions/ParallelAction.js +1 -1
- package/esm/actions/PrintAction.js +1 -1
- package/esm/actions/StatusAction.js +1 -1
- package/esm/actions/SwitchAction.js +1 -1
- package/esm/actions/ToastAction.js +1 -1
- package/esm/actions/WaitAction.js +1 -1
- package/esm/components/CustomStyle.js +1 -1
- package/esm/components/ErrorBoundary.js +1 -1
- package/esm/components/LazyComponent.js +1 -1
- package/esm/components/Overlay.js +2 -1
- package/esm/components/PopOver.js +2 -1
- package/esm/env.js +1 -1
- package/esm/envOverwrite.js +1 -1
- package/esm/factory.js +1 -1
- package/esm/index.js +2 -2
- package/esm/locale.js +2 -1
- package/esm/polyfills.js +1 -1
- package/esm/renderers/Form.js +42 -16
- package/esm/renderers/Item.d.ts +97 -12
- package/esm/renderers/Item.js +159 -120
- package/esm/renderers/Options.js +2 -1
- package/esm/renderers/Placeholder.js +1 -1
- package/esm/renderers/builtin.js +1 -1
- package/esm/renderers/register.js +1 -1
- package/esm/renderers/wrapControl.js +2 -1
- package/esm/store/app.js +2 -1
- package/esm/store/combo.d.ts +408 -0
- package/esm/store/combo.js +1 -1
- package/esm/store/crud.js +2 -1
- package/esm/store/form.d.ts +170 -0
- package/esm/store/form.js +2 -1
- package/esm/store/formItem.d.ts +5 -0
- package/esm/store/formItem.js +30 -8
- package/esm/store/iRenderer.js +2 -1
- package/esm/store/index.js +1 -1
- package/esm/store/list.js +1 -1
- package/esm/store/manager.js +1 -1
- package/esm/store/modal.js +1 -1
- package/esm/store/node.js +1 -1
- package/esm/store/pagination.js +2 -1
- package/esm/store/root.js +2 -1
- package/esm/store/service.js +2 -1
- package/esm/store/status.js +1 -1
- package/esm/store/table.d.ts +379 -21
- package/esm/store/table.js +84 -54
- package/esm/store/table2.js +1 -1
- package/esm/theme.js +1 -1
- package/esm/utils/Animation.js +1 -1
- package/esm/utils/ColorScale.js +1 -1
- package/esm/utils/DataSchema.js +1 -1
- package/esm/utils/DataScope.js +1 -1
- package/esm/utils/RootClose.js +1 -1
- package/esm/utils/SimpleMap.js +1 -1
- package/esm/utils/api.js +1 -1
- package/esm/utils/arraySlice.js +1 -1
- package/esm/utils/attachmentAdpator.js +1 -1
- package/esm/utils/autobind.js +1 -1
- package/esm/utils/browser.js +1 -1
- package/esm/utils/columnsSplit.js +1 -1
- package/esm/utils/concatData.js +1 -1
- package/esm/utils/dataMapping.js +1 -1
- package/esm/utils/date.js +1 -1
- package/esm/utils/debug.js +17 -3
- package/esm/utils/decodeEntity.js +1 -1
- package/esm/utils/dom.js +1 -1
- package/esm/utils/errors.js +1 -1
- package/esm/utils/escapeHtml.js +1 -1
- package/esm/utils/filter-schema.js +1 -1
- package/esm/utils/filter.js +1 -1
- package/esm/utils/formatDuration.js +1 -1
- package/esm/utils/formula.js +2 -1
- package/esm/utils/getVariable.js +1 -1
- package/esm/utils/grammar.js +1 -1
- package/esm/utils/handleAction.js +1 -1
- package/esm/utils/helper.d.ts +4 -1
- package/esm/utils/helper.js +20 -4
- package/esm/utils/highlight.js +1 -1
- package/esm/utils/icon.js +1 -1
- package/esm/utils/image.js +1 -1
- package/esm/utils/isPureVariable.js +2 -2
- package/esm/utils/json-schema-2-amis-schema.js +1 -1
- package/esm/utils/keyToPath.js +1 -1
- package/esm/utils/labelToString.js +1 -1
- package/esm/utils/makeSorter.js +1 -1
- package/esm/utils/math.js +1 -1
- package/esm/utils/memoryParse.d.ts +2 -1
- package/esm/utils/memoryParse.js +10 -6
- package/esm/utils/normalizeLink.js +1 -1
- package/esm/utils/normalizeOptions.js +1 -1
- package/esm/utils/object.d.ts +2 -4
- package/esm/utils/object.js +1 -1
- package/esm/utils/offset.js +1 -1
- package/esm/utils/offsetParent.js +1 -1
- package/esm/utils/optionValueCompare.js +1 -1
- package/esm/utils/position.js +1 -1
- package/esm/utils/prettyBytes.js +1 -1
- package/esm/utils/printElement.js +1 -1
- package/esm/utils/renderer-event.js +1 -1
- package/esm/utils/replaceText.js +1 -1
- package/esm/utils/resize-sensor.js +30 -1
- package/esm/utils/resolveCondition.js +2 -1
- package/esm/utils/resolveVariable.js +1 -1
- package/esm/utils/resolveVariableAndFilter.js +1 -1
- package/esm/utils/resolveVariableAndFilterForAsync.js +1 -1
- package/esm/utils/scrollPosition.js +1 -1
- package/esm/utils/string2regExp.js +1 -1
- package/esm/utils/stripNumber.js +1 -1
- package/esm/utils/style-helper.js +1 -1
- package/esm/utils/style.js +2 -1
- package/esm/utils/toNumber.js +1 -1
- package/esm/utils/tokenize.js +1 -1
- package/esm/utils/tpl-builtin.js +2 -1
- package/esm/utils/tpl-lodash.js +2 -1
- package/esm/utils/tpl.js +1 -1
- package/esm/utils/uncontrollable.js +1 -1
- package/esm/utils/validateId.js +1 -1
- package/esm/utils/validations.js +2 -1
- package/esm/utils/visitedCache.d.ts +46 -0
- package/esm/utils/visitedCache.js +124 -0
- package/lib/Root.js +1 -1
- package/lib/RootRenderer.js +1 -1
- package/lib/SchemaRenderer.d.ts +0 -1
- package/lib/SchemaRenderer.js +15 -6
- package/lib/Scoped.js +2 -1
- package/lib/StatusScoped.js +1 -1
- package/lib/WithRootStore.js +1 -1
- package/lib/WithStore.js +8 -8
- package/lib/actions/Action.js +2 -1
- package/lib/actions/AjaxAction.js +1 -1
- package/lib/actions/BreakAction.js +1 -1
- package/lib/actions/BroadcastAction.js +1 -1
- package/lib/actions/CmptAction.js +1 -1
- package/lib/actions/ContinueAction.js +1 -1
- package/lib/actions/CopyAction.js +1 -1
- package/lib/actions/CustomAction.js +2 -1
- package/lib/actions/DialogAction.js +3 -1
- package/lib/actions/DrawerAction.js +2 -1
- package/lib/actions/EmailAction.js +1 -1
- package/lib/actions/EventAction.js +2 -1
- package/lib/actions/LinkAction.js +1 -1
- package/lib/actions/LoopAction.js +2 -1
- package/lib/actions/PageAction.js +1 -1
- package/lib/actions/ParallelAction.js +1 -1
- package/lib/actions/PrintAction.js +1 -1
- package/lib/actions/StatusAction.js +1 -1
- package/lib/actions/SwitchAction.js +1 -1
- package/lib/actions/ToastAction.js +1 -1
- package/lib/actions/WaitAction.js +1 -1
- package/lib/components/CustomStyle.js +1 -1
- package/lib/components/ErrorBoundary.js +1 -1
- package/lib/components/LazyComponent.js +1 -1
- package/lib/components/Overlay.js +2 -1
- package/lib/components/PopOver.js +2 -1
- package/lib/env.js +1 -1
- package/lib/envOverwrite.js +1 -1
- package/lib/factory.js +1 -1
- package/lib/index.js +2 -2
- package/lib/locale.js +2 -1
- package/lib/polyfills.js +1 -1
- package/lib/renderers/Form.js +41 -15
- package/lib/renderers/Item.d.ts +98 -13
- package/lib/renderers/Item.js +158 -119
- package/lib/renderers/Options.js +2 -1
- package/lib/renderers/Placeholder.js +1 -1
- package/lib/renderers/builtin.js +1 -1
- package/lib/renderers/register.js +1 -1
- package/lib/renderers/wrapControl.js +2 -1
- package/lib/store/app.js +2 -1
- package/lib/store/combo.d.ts +408 -0
- package/lib/store/combo.js +1 -1
- package/lib/store/crud.js +2 -1
- package/lib/store/form.d.ts +170 -0
- package/lib/store/form.js +2 -1
- package/lib/store/formItem.d.ts +5 -0
- package/lib/store/formItem.js +30 -8
- package/lib/store/iRenderer.js +2 -1
- package/lib/store/index.js +1 -1
- package/lib/store/list.js +1 -1
- package/lib/store/manager.js +1 -1
- package/lib/store/modal.js +1 -1
- package/lib/store/node.js +1 -1
- package/lib/store/pagination.js +2 -1
- package/lib/store/root.js +2 -1
- package/lib/store/service.js +2 -1
- package/lib/store/status.js +1 -1
- package/lib/store/table.d.ts +379 -21
- package/lib/store/table.js +84 -54
- package/lib/store/table2.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/utils/Animation.js +1 -1
- package/lib/utils/ColorScale.js +1 -1
- package/lib/utils/DataSchema.js +1 -1
- package/lib/utils/DataScope.js +1 -1
- package/lib/utils/RootClose.js +1 -1
- package/lib/utils/SimpleMap.js +1 -1
- package/lib/utils/api.js +1 -1
- package/lib/utils/arraySlice.js +1 -1
- package/lib/utils/attachmentAdpator.js +1 -1
- package/lib/utils/autobind.js +1 -1
- package/lib/utils/browser.js +1 -1
- package/lib/utils/columnsSplit.js +1 -1
- package/lib/utils/concatData.js +1 -1
- package/lib/utils/dataMapping.js +1 -1
- package/lib/utils/date.js +1 -1
- package/lib/utils/debug.js +17 -3
- package/lib/utils/decodeEntity.js +1 -1
- package/lib/utils/dom.js +1 -1
- package/lib/utils/errors.js +1 -1
- package/lib/utils/escapeHtml.js +1 -1
- package/lib/utils/filter-schema.js +1 -1
- package/lib/utils/filter.js +1 -1
- package/lib/utils/formatDuration.js +1 -1
- package/lib/utils/formula.js +2 -1
- package/lib/utils/getVariable.js +1 -1
- package/lib/utils/grammar.js +1 -1
- package/lib/utils/handleAction.js +1 -1
- package/lib/utils/helper.d.ts +4 -1
- package/lib/utils/helper.js +19 -3
- package/lib/utils/highlight.js +1 -1
- package/lib/utils/icon.js +1 -1
- package/lib/utils/image.js +1 -1
- package/lib/utils/isPureVariable.js +2 -2
- package/lib/utils/json-schema-2-amis-schema.js +1 -1
- package/lib/utils/keyToPath.js +1 -1
- package/lib/utils/labelToString.js +1 -1
- package/lib/utils/makeSorter.js +1 -1
- package/lib/utils/math.js +1 -1
- package/lib/utils/memoryParse.d.ts +2 -1
- package/lib/utils/memoryParse.js +10 -6
- package/lib/utils/normalizeLink.js +1 -1
- package/lib/utils/normalizeOptions.js +1 -1
- package/lib/utils/object.d.ts +2 -4
- package/lib/utils/object.js +1 -1
- package/lib/utils/offset.js +1 -1
- package/lib/utils/offsetParent.js +1 -1
- package/lib/utils/optionValueCompare.js +1 -1
- package/lib/utils/position.js +1 -1
- package/lib/utils/prettyBytes.js +1 -1
- package/lib/utils/printElement.js +1 -1
- package/lib/utils/renderer-event.js +1 -1
- package/lib/utils/replaceText.js +1 -1
- package/lib/utils/resize-sensor.js +30 -1
- package/lib/utils/resolveCondition.js +2 -1
- package/lib/utils/resolveVariable.js +1 -1
- package/lib/utils/resolveVariableAndFilter.js +1 -1
- package/lib/utils/resolveVariableAndFilterForAsync.js +1 -1
- package/lib/utils/scrollPosition.js +1 -1
- package/lib/utils/string2regExp.js +1 -1
- package/lib/utils/stripNumber.js +1 -1
- package/lib/utils/style-helper.js +1 -1
- package/lib/utils/style.js +2 -1
- package/lib/utils/toNumber.js +1 -1
- package/lib/utils/tokenize.js +1 -1
- package/lib/utils/tpl-builtin.js +2 -1
- package/lib/utils/tpl-lodash.js +2 -1
- package/lib/utils/tpl.js +1 -1
- package/lib/utils/uncontrollable.js +1 -1
- package/lib/utils/validateId.js +1 -1
- package/lib/utils/validations.js +2 -1
- package/lib/utils/visitedCache.d.ts +46 -0
- package/lib/utils/visitedCache.js +128 -0
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-core v6.
|
|
2
|
+
* amis-core v6.8.0
|
|
3
3
|
* Copyright 2018-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -14,7 +14,7 @@ function isPureVariable(path) {
|
|
|
14
14
|
try {
|
|
15
15
|
var ast = memoryParse.memoryParse(path);
|
|
16
16
|
// 只有一个成员说明是纯表达式模式
|
|
17
|
-
return ast.body.length === 1 && ast.body[0].type === 'script';
|
|
17
|
+
return (ast === null || ast === void 0 ? void 0 : ast.body.length) === 1 && ast.body[0].type === 'script';
|
|
18
18
|
}
|
|
19
19
|
catch (err) {
|
|
20
20
|
return false;
|
package/lib/utils/keyToPath.js
CHANGED
package/lib/utils/makeSorter.js
CHANGED
package/lib/utils/math.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ASTNode } from 'amis-formula';
|
|
1
2
|
export declare function memoryParse(input: string, options?: {
|
|
2
3
|
/**
|
|
3
4
|
* 直接是运算表达式?还是从模板开始 ${} 里面才算运算表达式
|
|
@@ -14,4 +15,4 @@ export declare function memoryParse(input: string, options?: {
|
|
|
14
15
|
*/
|
|
15
16
|
allowFilter?: boolean;
|
|
16
17
|
variableNamespaces?: Array<string>;
|
|
17
|
-
}):
|
|
18
|
+
}): ASTNode | undefined;
|
package/lib/utils/memoryParse.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-core v6.
|
|
2
|
+
* amis-core v6.8.0
|
|
3
3
|
* Copyright 2018-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -8,22 +8,26 @@
|
|
|
8
8
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
9
9
|
|
|
10
10
|
var amisFormula = require('amis-formula');
|
|
11
|
+
var visitedCache = require('./visitedCache.js');
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
// NOTE 缓存前40条表达式
|
|
14
|
+
var cache = new visitedCache["default"](40);
|
|
13
15
|
function memoryParse(input, options) {
|
|
14
16
|
if (options === void 0) { options = {
|
|
15
17
|
evalMode: false
|
|
16
18
|
}; }
|
|
17
|
-
//
|
|
19
|
+
// 优化内存缓存释放,比如只缓存最高频的模版
|
|
18
20
|
if (typeof input !== 'string') {
|
|
19
21
|
return;
|
|
20
22
|
}
|
|
21
23
|
var key = input + JSON.stringify(options);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
// get cache result
|
|
25
|
+
if (cache.has(key)) {
|
|
26
|
+
return cache.get(key);
|
|
24
27
|
}
|
|
28
|
+
// run parse function and cache
|
|
25
29
|
var ast = amisFormula.parse(input, options);
|
|
26
|
-
cache
|
|
30
|
+
cache.set(key, ast);
|
|
27
31
|
return ast;
|
|
28
32
|
}
|
|
29
33
|
|
package/lib/utils/object.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
export declare function createObject
|
|
1
|
+
export declare function createObject<P extends {
|
|
2
2
|
[propName: string]: any;
|
|
3
|
-
}, props?:
|
|
4
|
-
[propName: string]: any;
|
|
5
|
-
}, properties?: any): object;
|
|
3
|
+
} | null>(superProps?: P, props?: P, properties?: any): object;
|
|
6
4
|
export declare function extractObjectChain(value: any): object[];
|
|
7
5
|
export declare function createObjectFromChain(chain: Array<object>): object;
|
|
8
6
|
/**
|
package/lib/utils/object.js
CHANGED
package/lib/utils/offset.js
CHANGED
package/lib/utils/position.js
CHANGED
package/lib/utils/prettyBytes.js
CHANGED
package/lib/utils/replaceText.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-core v6.
|
|
2
|
+
* amis-core v6.8.0
|
|
3
3
|
* Copyright 2018-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -167,6 +167,35 @@ function resizeSensor(element, callback, once, type) {
|
|
|
167
167
|
if (!element) {
|
|
168
168
|
return function () { };
|
|
169
169
|
}
|
|
170
|
+
// 优先用 ResizeObserver
|
|
171
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
172
|
+
var rect = element.getBoundingClientRect();
|
|
173
|
+
var originWidth_1 = rect.width;
|
|
174
|
+
var originHeight_1 = rect.height;
|
|
175
|
+
var observer_1 = new ResizeObserver(function (entries) {
|
|
176
|
+
if (once) {
|
|
177
|
+
observer_1.disconnect();
|
|
178
|
+
}
|
|
179
|
+
if (type === 'both') {
|
|
180
|
+
callback();
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
var entry = entries[0];
|
|
184
|
+
var cr = entry.contentRect;
|
|
185
|
+
if ((type === 'width' && cr.width !== originWidth_1) ||
|
|
186
|
+
(type === 'height' && cr.height !== originHeight_1)) {
|
|
187
|
+
callback();
|
|
188
|
+
originWidth_1 = cr.width;
|
|
189
|
+
originHeight_1 = cr.height;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
observer_1.observe(element);
|
|
194
|
+
return function () {
|
|
195
|
+
observer_1.disconnect();
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// 不支持 ResizeObserver 的话,用 polyfill
|
|
170
199
|
var disposeEvent = undefined;
|
|
171
200
|
if (once) {
|
|
172
201
|
disposeEvent = attachResizeEvent(element, function () {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-core v6.
|
|
2
|
+
* amis-core v6.8.0
|
|
3
3
|
* Copyright 2018-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -18,6 +18,7 @@ var moment = require('moment');
|
|
|
18
18
|
var capitalize = require('lodash/capitalize');
|
|
19
19
|
require('amis-formula');
|
|
20
20
|
require('lodash/isPlainObject');
|
|
21
|
+
require('./memoryParse.js');
|
|
21
22
|
var isPureVariable = require('./isPureVariable.js');
|
|
22
23
|
require('@rc-component/mini-decimal');
|
|
23
24
|
var resolveVariableAndFilter = require('./resolveVariableAndFilter.js');
|
package/lib/utils/stripNumber.js
CHANGED
package/lib/utils/style.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-core v6.
|
|
2
|
+
* amis-core v6.8.0
|
|
3
3
|
* Copyright 2018-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -11,6 +11,7 @@ require('tslib');
|
|
|
11
11
|
require('amis-formula');
|
|
12
12
|
require('moment');
|
|
13
13
|
require('lodash/isPlainObject');
|
|
14
|
+
require('./memoryParse.js');
|
|
14
15
|
require('@rc-component/mini-decimal');
|
|
15
16
|
var resolveVariableAndFilter = require('./resolveVariableAndFilter.js');
|
|
16
17
|
require('./filter.js');
|
package/lib/utils/toNumber.js
CHANGED
package/lib/utils/tokenize.js
CHANGED
package/lib/utils/tpl-builtin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-core v6.
|
|
2
|
+
* amis-core v6.8.0
|
|
3
3
|
* Copyright 2018-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -11,6 +11,7 @@ var tslib = require('tslib');
|
|
|
11
11
|
var amisFormula = require('amis-formula');
|
|
12
12
|
require('moment');
|
|
13
13
|
require('lodash/isPlainObject');
|
|
14
|
+
require('./memoryParse.js');
|
|
14
15
|
var tokenize = require('./tokenize.js');
|
|
15
16
|
require('@rc-component/mini-decimal');
|
|
16
17
|
var resolveVariableAndFilterForAsync = require('./resolveVariableAndFilterForAsync.js');
|
package/lib/utils/tpl-lodash.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-core v6.
|
|
2
|
+
* amis-core v6.8.0
|
|
3
3
|
* Copyright 2018-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -12,6 +12,7 @@ var template = require('lodash/template');
|
|
|
12
12
|
var amisFormula = require('amis-formula');
|
|
13
13
|
var moment = require('moment');
|
|
14
14
|
require('lodash/isPlainObject');
|
|
15
|
+
require('./memoryParse.js');
|
|
15
16
|
require('@rc-component/mini-decimal');
|
|
16
17
|
require('./filter.js');
|
|
17
18
|
|
package/lib/utils/tpl.js
CHANGED
package/lib/utils/validateId.js
CHANGED
package/lib/utils/validations.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-core v6.
|
|
2
|
+
* amis-core v6.8.0
|
|
3
3
|
* Copyright 2018-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -12,6 +12,7 @@ var moment = require('moment');
|
|
|
12
12
|
var tpl = require('./tpl.js');
|
|
13
13
|
require('amis-formula');
|
|
14
14
|
var isPlainObject = require('lodash/isPlainObject');
|
|
15
|
+
require('./memoryParse.js');
|
|
15
16
|
var isPureVariable = require('./isPureVariable.js');
|
|
16
17
|
require('@rc-component/mini-decimal');
|
|
17
18
|
var resolveVariableAndFilter = require('./resolveVariableAndFilter.js');
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 缓存值的单元
|
|
3
|
+
*/
|
|
4
|
+
export type CacheEntry<V> = {
|
|
5
|
+
value: V;
|
|
6
|
+
visitCount: number;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* 自动清理访问次数最少key的Map,次数相同时优先淘汰旧项
|
|
10
|
+
* 每次触发清理的计数基于容量的百分比
|
|
11
|
+
* @class VisitedCache
|
|
12
|
+
* @template K - 缓存key的类型
|
|
13
|
+
* @template V - 缓存value的类型
|
|
14
|
+
*/
|
|
15
|
+
export default class VisitedCache<K, V> {
|
|
16
|
+
private capacity;
|
|
17
|
+
private cache;
|
|
18
|
+
private visitCountOrder;
|
|
19
|
+
private keyOrderMatrixForByCount;
|
|
20
|
+
private releaseCount;
|
|
21
|
+
/**
|
|
22
|
+
*
|
|
23
|
+
* @param capacity 容量
|
|
24
|
+
* @param releasePercent 清理数量占容量百分比
|
|
25
|
+
*/
|
|
26
|
+
constructor(capacity: number, releasePercent?: number);
|
|
27
|
+
/**
|
|
28
|
+
* 更新现存项目的缓存顺序
|
|
29
|
+
* @param key
|
|
30
|
+
* @param entry
|
|
31
|
+
*/
|
|
32
|
+
private updateCacheEntryOrder;
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
* @param {K} key
|
|
36
|
+
* @returns {(V | undefined)}
|
|
37
|
+
*/
|
|
38
|
+
get(key: K): V | undefined;
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* @param {K} key
|
|
42
|
+
* @param {V} value
|
|
43
|
+
*/
|
|
44
|
+
set(key: K, value: V): void;
|
|
45
|
+
has(key: K): boolean;
|
|
46
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* amis-core v6.8.0
|
|
3
|
+
* Copyright 2018-2024 fex
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
9
|
+
|
|
10
|
+
var tslib = require('tslib');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 自动清理访问次数最少key的Map,次数相同时优先淘汰旧项
|
|
14
|
+
* 每次触发清理的计数基于容量的百分比
|
|
15
|
+
* @class VisitedCache
|
|
16
|
+
* @template K - 缓存key的类型
|
|
17
|
+
* @template V - 缓存value的类型
|
|
18
|
+
*/
|
|
19
|
+
var VisitedCache = /** @class */ (function () {
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* @param capacity 容量
|
|
23
|
+
* @param releasePercent 清理数量占容量百分比
|
|
24
|
+
*/
|
|
25
|
+
function VisitedCache(capacity, releasePercent) {
|
|
26
|
+
this.visitCountOrder = [];
|
|
27
|
+
this.keyOrderMatrixForByCount = {};
|
|
28
|
+
this.capacity = capacity;
|
|
29
|
+
this.cache = new Map();
|
|
30
|
+
this.releaseCount = (this.capacity * (releasePercent || 1 / 8)) >> 0 || 1;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 更新现存项目的缓存顺序
|
|
34
|
+
* @param key
|
|
35
|
+
* @param entry
|
|
36
|
+
*/
|
|
37
|
+
VisitedCache.prototype.updateCacheEntryOrder = function (key, entry, nextVisitCount) {
|
|
38
|
+
var oldVisitCount = entry.visitCount;
|
|
39
|
+
var oldKeyOrder = this.keyOrderMatrixForByCount[oldVisitCount];
|
|
40
|
+
if (Array.isArray(oldKeyOrder)) {
|
|
41
|
+
// 从key为旧访问次数的顺序数组中删除
|
|
42
|
+
var oldKeyIndex = oldKeyOrder.indexOf(key);
|
|
43
|
+
if (oldKeyIndex !== -1) {
|
|
44
|
+
oldKeyOrder.splice(oldKeyIndex, 1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// 相同访问量,更新访问顺序
|
|
48
|
+
this.keyOrderMatrixForByCount[nextVisitCount] = Array.isArray(this.keyOrderMatrixForByCount[nextVisitCount])
|
|
49
|
+
? tslib.__spreadArray(tslib.__spreadArray([], tslib.__read(this.keyOrderMatrixForByCount[nextVisitCount]), false), [key], false) : [key];
|
|
50
|
+
entry.visitCount = nextVisitCount;
|
|
51
|
+
// 重新按照访问量排序
|
|
52
|
+
this.visitCountOrder = tslib.__spreadArray([], tslib.__read(new Set(tslib.__spreadArray(tslib.__spreadArray([], tslib.__read(this.visitCountOrder), false), [nextVisitCount], false))), false).sort(function (a, b) { return a - b; });
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
*
|
|
56
|
+
* @param {K} key
|
|
57
|
+
* @returns {(V | undefined)}
|
|
58
|
+
*/
|
|
59
|
+
VisitedCache.prototype.get = function (key) {
|
|
60
|
+
if (this.cache.has(key)) {
|
|
61
|
+
var entry = this.cache.get(key);
|
|
62
|
+
if (entry !== undefined) {
|
|
63
|
+
var visitCount = entry.visitCount;
|
|
64
|
+
// 更新访问顺序
|
|
65
|
+
this.updateCacheEntryOrder(key, entry, visitCount + 1);
|
|
66
|
+
return entry.value;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
*
|
|
73
|
+
* @param {K} key
|
|
74
|
+
* @param {V} value
|
|
75
|
+
*/
|
|
76
|
+
VisitedCache.prototype.set = function (key, value) {
|
|
77
|
+
// 更新现存项的值和访问次数及新鲜度
|
|
78
|
+
if (this.cache.has(key)) {
|
|
79
|
+
var entry = this.cache.get(key);
|
|
80
|
+
if (entry !== undefined) {
|
|
81
|
+
var visitCount = entry.visitCount;
|
|
82
|
+
this.updateCacheEntryOrder(key, entry, visitCount + 1);
|
|
83
|
+
entry.value = value;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// 先进行清理
|
|
88
|
+
if (this.cache.size === this.capacity) {
|
|
89
|
+
// TODO 依据最大容量的1/10进行释放,试试效果
|
|
90
|
+
var dynamicReleaseCount = this.releaseCount;
|
|
91
|
+
// const dynamicReleaseCount =
|
|
92
|
+
// (this.keyOrderMatrixForByCount[this.visitCountOrder[this.visitCountOrder.length - 1]].length / (this.capacity)) >>
|
|
93
|
+
// 0 || 1
|
|
94
|
+
var findIndex = 0;
|
|
95
|
+
var released = 0;
|
|
96
|
+
while (released < dynamicReleaseCount &&
|
|
97
|
+
findIndex <= this.visitCountOrder.length - 1) {
|
|
98
|
+
// 最少访问的次数
|
|
99
|
+
var targetCount = this.visitCountOrder[findIndex];
|
|
100
|
+
// 查看其中有没有项
|
|
101
|
+
var targetKeyOrder = this.keyOrderMatrixForByCount[targetCount];
|
|
102
|
+
if (!targetKeyOrder.length) {
|
|
103
|
+
findIndex++;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
while (targetKeyOrder.length > 0 &&
|
|
107
|
+
released < dynamicReleaseCount) {
|
|
108
|
+
this.cache.delete(targetKeyOrder.shift());
|
|
109
|
+
released++;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
var newEntry = {
|
|
115
|
+
visitCount: 1,
|
|
116
|
+
value: value
|
|
117
|
+
};
|
|
118
|
+
this.cache.set(key, newEntry);
|
|
119
|
+
this.updateCacheEntryOrder(key, newEntry, 1);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
VisitedCache.prototype.has = function (key) {
|
|
123
|
+
return this.cache.has(key);
|
|
124
|
+
};
|
|
125
|
+
return VisitedCache;
|
|
126
|
+
}());
|
|
127
|
+
|
|
128
|
+
exports["default"] = VisitedCache;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "amis-core",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.8.0",
|
|
4
4
|
"description": "amis-core",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
],
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@rc-component/mini-decimal": "^1.0.1",
|
|
52
|
-
"amis-formula": "^6.
|
|
52
|
+
"amis-formula": "^6.8.0",
|
|
53
53
|
"classnames": "2.3.2",
|
|
54
54
|
"file-saver": "^2.0.2",
|
|
55
55
|
"hoist-non-react-statics": "^3.3.2",
|