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
package/esm/utils/image.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
|
|
|
@@ -10,7 +10,7 @@ function isPureVariable(path) {
|
|
|
10
10
|
try {
|
|
11
11
|
var ast = memoryParse(path);
|
|
12
12
|
// 只有一个成员说明是纯表达式模式
|
|
13
|
-
return ast.body.length === 1 && ast.body[0].type === 'script';
|
|
13
|
+
return (ast === null || ast === void 0 ? void 0 : ast.body.length) === 1 && ast.body[0].type === 'script';
|
|
14
14
|
}
|
|
15
15
|
catch (err) {
|
|
16
16
|
return false;
|
package/esm/utils/keyToPath.js
CHANGED
package/esm/utils/makeSorter.js
CHANGED
package/esm/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/esm/utils/memoryParse.js
CHANGED
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-core v6.
|
|
2
|
+
* amis-core v6.8.0
|
|
3
3
|
* Copyright 2018-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { parse } from 'amis-formula';
|
|
7
|
+
import VisitedCache from './visitedCache.js';
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
// NOTE 缓存前40条表达式
|
|
10
|
+
var cache = new VisitedCache(40);
|
|
9
11
|
function memoryParse(input, options) {
|
|
10
12
|
if (options === void 0) { options = {
|
|
11
13
|
evalMode: false
|
|
12
14
|
}; }
|
|
13
|
-
//
|
|
15
|
+
// 优化内存缓存释放,比如只缓存最高频的模版
|
|
14
16
|
if (typeof input !== 'string') {
|
|
15
17
|
return;
|
|
16
18
|
}
|
|
17
19
|
var key = input + JSON.stringify(options);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
// get cache result
|
|
21
|
+
if (cache.has(key)) {
|
|
22
|
+
return cache.get(key);
|
|
20
23
|
}
|
|
24
|
+
// run parse function and cache
|
|
21
25
|
var ast = parse(input, options);
|
|
22
|
-
cache
|
|
26
|
+
cache.set(key, ast);
|
|
23
27
|
return ast;
|
|
24
28
|
}
|
|
25
29
|
|
package/esm/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/esm/utils/object.js
CHANGED
package/esm/utils/offset.js
CHANGED
package/esm/utils/position.js
CHANGED
package/esm/utils/prettyBytes.js
CHANGED
package/esm/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
|
|
|
@@ -163,6 +163,35 @@ function resizeSensor(element, callback, once, type) {
|
|
|
163
163
|
if (!element) {
|
|
164
164
|
return function () { };
|
|
165
165
|
}
|
|
166
|
+
// 优先用 ResizeObserver
|
|
167
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
168
|
+
var rect = element.getBoundingClientRect();
|
|
169
|
+
var originWidth_1 = rect.width;
|
|
170
|
+
var originHeight_1 = rect.height;
|
|
171
|
+
var observer_1 = new ResizeObserver(function (entries) {
|
|
172
|
+
if (once) {
|
|
173
|
+
observer_1.disconnect();
|
|
174
|
+
}
|
|
175
|
+
if (type === 'both') {
|
|
176
|
+
callback();
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
var entry = entries[0];
|
|
180
|
+
var cr = entry.contentRect;
|
|
181
|
+
if ((type === 'width' && cr.width !== originWidth_1) ||
|
|
182
|
+
(type === 'height' && cr.height !== originHeight_1)) {
|
|
183
|
+
callback();
|
|
184
|
+
originWidth_1 = cr.width;
|
|
185
|
+
originHeight_1 = cr.height;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
observer_1.observe(element);
|
|
190
|
+
return function () {
|
|
191
|
+
observer_1.disconnect();
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// 不支持 ResizeObserver 的话,用 polyfill
|
|
166
195
|
var disposeEvent = undefined;
|
|
167
196
|
if (once) {
|
|
168
197
|
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
|
|
|
@@ -14,6 +14,7 @@ import moment from 'moment';
|
|
|
14
14
|
import capitalize from 'lodash/capitalize';
|
|
15
15
|
import 'amis-formula';
|
|
16
16
|
import 'lodash/isPlainObject';
|
|
17
|
+
import './memoryParse.js';
|
|
17
18
|
import { isPureVariable } from './isPureVariable.js';
|
|
18
19
|
import '@rc-component/mini-decimal';
|
|
19
20
|
import { resolveVariableAndFilter } from './resolveVariableAndFilter.js';
|
package/esm/utils/stripNumber.js
CHANGED
package/esm/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
|
|
|
@@ -7,6 +7,7 @@ import 'tslib';
|
|
|
7
7
|
import 'amis-formula';
|
|
8
8
|
import 'moment';
|
|
9
9
|
import 'lodash/isPlainObject';
|
|
10
|
+
import './memoryParse.js';
|
|
10
11
|
import '@rc-component/mini-decimal';
|
|
11
12
|
import { resolveVariableAndFilter } from './resolveVariableAndFilter.js';
|
|
12
13
|
import './filter.js';
|
package/esm/utils/toNumber.js
CHANGED
package/esm/utils/tokenize.js
CHANGED
package/esm/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
|
|
|
@@ -7,6 +7,7 @@ import { __awaiter, __generator } from 'tslib';
|
|
|
7
7
|
export { getFilters, registerFilter, registerFunction } from 'amis-formula';
|
|
8
8
|
import 'moment';
|
|
9
9
|
import 'lodash/isPlainObject';
|
|
10
|
+
import './memoryParse.js';
|
|
10
11
|
import { tokenize } from './tokenize.js';
|
|
11
12
|
export { tokenize } from './tokenize.js';
|
|
12
13
|
import '@rc-component/mini-decimal';
|
package/esm/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
|
|
|
@@ -8,6 +8,7 @@ import template from 'lodash/template';
|
|
|
8
8
|
import { getFilters } from 'amis-formula';
|
|
9
9
|
import moment from 'moment';
|
|
10
10
|
import 'lodash/isPlainObject';
|
|
11
|
+
import './memoryParse.js';
|
|
11
12
|
import '@rc-component/mini-decimal';
|
|
12
13
|
import './filter.js';
|
|
13
14
|
|
package/esm/utils/tpl.js
CHANGED
package/esm/utils/validateId.js
CHANGED
package/esm/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
|
|
|
@@ -8,6 +8,7 @@ import moment from 'moment';
|
|
|
8
8
|
import { filter } from './tpl.js';
|
|
9
9
|
import 'amis-formula';
|
|
10
10
|
import isPlainObject from 'lodash/isPlainObject';
|
|
11
|
+
import './memoryParse.js';
|
|
11
12
|
import { isPureVariable } from './isPureVariable.js';
|
|
12
13
|
import '@rc-component/mini-decimal';
|
|
13
14
|
import { resolveVariableAndFilter } from './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,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* amis-core v6.8.0
|
|
3
|
+
* Copyright 2018-2024 fex
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { __spreadArray, __read } from 'tslib';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 自动清理访问次数最少key的Map,次数相同时优先淘汰旧项
|
|
10
|
+
* 每次触发清理的计数基于容量的百分比
|
|
11
|
+
* @class VisitedCache
|
|
12
|
+
* @template K - 缓存key的类型
|
|
13
|
+
* @template V - 缓存value的类型
|
|
14
|
+
*/
|
|
15
|
+
var VisitedCache = /** @class */ (function () {
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @param capacity 容量
|
|
19
|
+
* @param releasePercent 清理数量占容量百分比
|
|
20
|
+
*/
|
|
21
|
+
function VisitedCache(capacity, releasePercent) {
|
|
22
|
+
this.visitCountOrder = [];
|
|
23
|
+
this.keyOrderMatrixForByCount = {};
|
|
24
|
+
this.capacity = capacity;
|
|
25
|
+
this.cache = new Map();
|
|
26
|
+
this.releaseCount = (this.capacity * (releasePercent || 1 / 8)) >> 0 || 1;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 更新现存项目的缓存顺序
|
|
30
|
+
* @param key
|
|
31
|
+
* @param entry
|
|
32
|
+
*/
|
|
33
|
+
VisitedCache.prototype.updateCacheEntryOrder = function (key, entry, nextVisitCount) {
|
|
34
|
+
var oldVisitCount = entry.visitCount;
|
|
35
|
+
var oldKeyOrder = this.keyOrderMatrixForByCount[oldVisitCount];
|
|
36
|
+
if (Array.isArray(oldKeyOrder)) {
|
|
37
|
+
// 从key为旧访问次数的顺序数组中删除
|
|
38
|
+
var oldKeyIndex = oldKeyOrder.indexOf(key);
|
|
39
|
+
if (oldKeyIndex !== -1) {
|
|
40
|
+
oldKeyOrder.splice(oldKeyIndex, 1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// 相同访问量,更新访问顺序
|
|
44
|
+
this.keyOrderMatrixForByCount[nextVisitCount] = Array.isArray(this.keyOrderMatrixForByCount[nextVisitCount])
|
|
45
|
+
? __spreadArray(__spreadArray([], __read(this.keyOrderMatrixForByCount[nextVisitCount]), false), [key], false) : [key];
|
|
46
|
+
entry.visitCount = nextVisitCount;
|
|
47
|
+
// 重新按照访问量排序
|
|
48
|
+
this.visitCountOrder = __spreadArray([], __read(new Set(__spreadArray(__spreadArray([], __read(this.visitCountOrder), false), [nextVisitCount], false))), false).sort(function (a, b) { return a - b; });
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
*
|
|
52
|
+
* @param {K} key
|
|
53
|
+
* @returns {(V | undefined)}
|
|
54
|
+
*/
|
|
55
|
+
VisitedCache.prototype.get = function (key) {
|
|
56
|
+
if (this.cache.has(key)) {
|
|
57
|
+
var entry = this.cache.get(key);
|
|
58
|
+
if (entry !== undefined) {
|
|
59
|
+
var visitCount = entry.visitCount;
|
|
60
|
+
// 更新访问顺序
|
|
61
|
+
this.updateCacheEntryOrder(key, entry, visitCount + 1);
|
|
62
|
+
return entry.value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
*
|
|
69
|
+
* @param {K} key
|
|
70
|
+
* @param {V} value
|
|
71
|
+
*/
|
|
72
|
+
VisitedCache.prototype.set = function (key, value) {
|
|
73
|
+
// 更新现存项的值和访问次数及新鲜度
|
|
74
|
+
if (this.cache.has(key)) {
|
|
75
|
+
var entry = this.cache.get(key);
|
|
76
|
+
if (entry !== undefined) {
|
|
77
|
+
var visitCount = entry.visitCount;
|
|
78
|
+
this.updateCacheEntryOrder(key, entry, visitCount + 1);
|
|
79
|
+
entry.value = value;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// 先进行清理
|
|
84
|
+
if (this.cache.size === this.capacity) {
|
|
85
|
+
// TODO 依据最大容量的1/10进行释放,试试效果
|
|
86
|
+
var dynamicReleaseCount = this.releaseCount;
|
|
87
|
+
// const dynamicReleaseCount =
|
|
88
|
+
// (this.keyOrderMatrixForByCount[this.visitCountOrder[this.visitCountOrder.length - 1]].length / (this.capacity)) >>
|
|
89
|
+
// 0 || 1
|
|
90
|
+
var findIndex = 0;
|
|
91
|
+
var released = 0;
|
|
92
|
+
while (released < dynamicReleaseCount &&
|
|
93
|
+
findIndex <= this.visitCountOrder.length - 1) {
|
|
94
|
+
// 最少访问的次数
|
|
95
|
+
var targetCount = this.visitCountOrder[findIndex];
|
|
96
|
+
// 查看其中有没有项
|
|
97
|
+
var targetKeyOrder = this.keyOrderMatrixForByCount[targetCount];
|
|
98
|
+
if (!targetKeyOrder.length) {
|
|
99
|
+
findIndex++;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
while (targetKeyOrder.length > 0 &&
|
|
103
|
+
released < dynamicReleaseCount) {
|
|
104
|
+
this.cache.delete(targetKeyOrder.shift());
|
|
105
|
+
released++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
var newEntry = {
|
|
111
|
+
visitCount: 1,
|
|
112
|
+
value: value
|
|
113
|
+
};
|
|
114
|
+
this.cache.set(key, newEntry);
|
|
115
|
+
this.updateCacheEntryOrder(key, newEntry, 1);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
VisitedCache.prototype.has = function (key) {
|
|
119
|
+
return this.cache.has(key);
|
|
120
|
+
};
|
|
121
|
+
return VisitedCache;
|
|
122
|
+
}());
|
|
123
|
+
|
|
124
|
+
export { VisitedCache as default };
|
package/lib/Root.js
CHANGED
package/lib/RootRenderer.js
CHANGED
package/lib/SchemaRenderer.d.ts
CHANGED
|
@@ -23,7 +23,6 @@ export declare class SchemaRenderer extends React.Component<SchemaRendererProps,
|
|
|
23
23
|
unbindEvent: (() => void) | undefined;
|
|
24
24
|
isStatic: any;
|
|
25
25
|
constructor(props: SchemaRendererProps);
|
|
26
|
-
componentDidMount(): void;
|
|
27
26
|
componentWillUnmount(): void;
|
|
28
27
|
shouldComponentUpdate(nextProps: SchemaRendererProps): boolean;
|
|
29
28
|
resolveRenderer(props: SchemaRendererProps, force?: boolean): any;
|