@nokecy/qc-ui 1.1.75 → 1.1.78
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/dist/cjs/exportButton/exportAction.d.ts +74 -0
- package/dist/cjs/exportButton/exportAction.js +199 -0
- package/dist/cjs/exportButton/index.d.ts +39 -0
- package/dist/cjs/exportButton/index.js +295 -0
- package/dist/cjs/importModal/index.d.ts +9 -0
- package/dist/cjs/importModal/index.js +46 -8
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.js +66 -0
- package/dist/cjs/standardList/StandardAgGridPlus.d.ts +58 -0
- package/dist/cjs/standardList/StandardAgGridPlus.js +698 -0
- package/dist/cjs/standardList/dateFormat.d.ts +16 -0
- package/dist/cjs/standardList/dateFormat.js +56 -0
- package/dist/cjs/standardList/emptyState.d.ts +36 -0
- package/dist/cjs/standardList/emptyState.js +89 -0
- package/dist/cjs/standardList/enumColumns.d.ts +31 -0
- package/dist/cjs/standardList/enumColumns.js +87 -0
- package/dist/cjs/standardList/gridColumnDefs.d.ts +33 -0
- package/dist/cjs/standardList/gridColumnDefs.js +61 -0
- package/dist/cjs/standardList/groupedHeaders.d.ts +28 -0
- package/dist/cjs/standardList/groupedHeaders.js +84 -0
- package/dist/cjs/standardList/groupedHeaders.less +29 -0
- package/dist/cjs/standardList/index.d.ts +20 -0
- package/dist/cjs/standardList/index.js +176 -0
- package/dist/cjs/standardList/listDateDisplay.d.ts +9 -0
- package/dist/cjs/standardList/listDateDisplay.js +64 -0
- package/dist/cjs/standardList/listDefaultSort.d.ts +38 -0
- package/dist/cjs/standardList/listDefaultSort.js +139 -0
- package/dist/cjs/standardList/listRefresh.d.ts +25 -0
- package/dist/cjs/standardList/listRefresh.js +53 -0
- package/dist/cjs/utils/download.d.ts +6 -0
- package/dist/cjs/utils/download.js +23 -0
- package/dist/esm/exportButton/exportAction.d.ts +74 -0
- package/dist/esm/exportButton/exportAction.js +193 -0
- package/dist/esm/exportButton/index.d.ts +39 -0
- package/dist/esm/exportButton/index.js +259 -0
- package/dist/esm/importModal/index.d.ts +9 -0
- package/dist/esm/importModal/index.js +46 -8
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/standardList/StandardAgGridPlus.d.ts +58 -0
- package/dist/esm/standardList/StandardAgGridPlus.js +691 -0
- package/dist/esm/standardList/dateFormat.d.ts +16 -0
- package/dist/esm/standardList/dateFormat.js +50 -0
- package/dist/esm/standardList/emptyState.d.ts +36 -0
- package/dist/esm/standardList/emptyState.js +83 -0
- package/dist/esm/standardList/enumColumns.d.ts +31 -0
- package/dist/esm/standardList/enumColumns.js +82 -0
- package/dist/esm/standardList/gridColumnDefs.d.ts +33 -0
- package/dist/esm/standardList/gridColumnDefs.js +55 -0
- package/dist/esm/standardList/groupedHeaders.d.ts +28 -0
- package/dist/esm/standardList/groupedHeaders.js +78 -0
- package/dist/esm/standardList/groupedHeaders.less +29 -0
- package/dist/esm/standardList/index.d.ts +20 -0
- package/dist/esm/standardList/index.js +15 -0
- package/dist/esm/standardList/listDateDisplay.d.ts +9 -0
- package/dist/esm/standardList/listDateDisplay.js +58 -0
- package/dist/esm/standardList/listDefaultSort.d.ts +38 -0
- package/dist/esm/standardList/listDefaultSort.js +133 -0
- package/dist/esm/standardList/listRefresh.d.ts +25 -0
- package/dist/esm/standardList/listRefresh.js +47 -0
- package/dist/esm/utils/download.d.ts +6 -0
- package/dist/esm/utils/download.js +17 -0
- package/dist/umd/qc-ui.min.css +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "GridEmptyContext", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _emptyState.GridEmptyContext;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "GridEmptyState", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _emptyState.GridEmptyState;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "StandardAgGridColumn", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _StandardAgGridPlus.StandardAgGridColumn;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "StandardAgGridPlus", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function get() {
|
|
27
|
+
return _StandardAgGridPlus.StandardAgGridPlus;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "applyColDefSort", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function get() {
|
|
33
|
+
return _gridColumnDefs.applyColDefSort;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "applyGridValueEnumToColumns", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function get() {
|
|
39
|
+
return _enumColumns.applyGridValueEnumToColumns;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "applyNormalizedEnumFallbacksToColumns", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function get() {
|
|
45
|
+
return _enumColumns.applyNormalizedEnumFallbacksToColumns;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "compositeClasses", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function get() {
|
|
51
|
+
return _groupedHeaders.compositeClasses;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(exports, "createNormalizedEnumFallbackRenderer", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function get() {
|
|
57
|
+
return _enumColumns.createNormalizedEnumFallbackRenderer;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(exports, "detachLiveSortFromColumnDefs", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function get() {
|
|
63
|
+
return _gridColumnDefs.detachLiveSortFromColumnDefs;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
Object.defineProperty(exports, "firstGridSorter", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
get: function get() {
|
|
69
|
+
return _gridColumnDefs.firstGridSorter;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
Object.defineProperty(exports, "flattenColumnDefs", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
get: function get() {
|
|
75
|
+
return _listDefaultSort.flattenColumnDefs;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(exports, "formatDate", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function get() {
|
|
81
|
+
return _dateFormat.formatDate;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperty(exports, "formatDateTime", {
|
|
85
|
+
enumerable: true,
|
|
86
|
+
get: function get() {
|
|
87
|
+
return _dateFormat.formatDateTime;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
Object.defineProperty(exports, "getCompositeColumnEdges", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
get: function get() {
|
|
93
|
+
return _groupedHeaders.getCompositeColumnEdges;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
Object.defineProperty(exports, "getListDateType", {
|
|
97
|
+
enumerable: true,
|
|
98
|
+
get: function get() {
|
|
99
|
+
return _listDateDisplay.getListDateType;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
Object.defineProperty(exports, "hasActiveFilter", {
|
|
103
|
+
enumerable: true,
|
|
104
|
+
get: function get() {
|
|
105
|
+
return _emptyState.hasActiveFilter;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
Object.defineProperty(exports, "inferListDefaultSort", {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
get: function get() {
|
|
111
|
+
return _listDefaultSort.inferListDefaultSort;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
Object.defineProperty(exports, "normalizeExtendedDateColumn", {
|
|
115
|
+
enumerable: true,
|
|
116
|
+
get: function get() {
|
|
117
|
+
return _listDateDisplay.normalizeExtendedDateColumn;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(exports, "normalizeListDateColumn", {
|
|
121
|
+
enumerable: true,
|
|
122
|
+
get: function get() {
|
|
123
|
+
return _listDateDisplay.normalizeListDateColumn;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
Object.defineProperty(exports, "readRefreshToken", {
|
|
127
|
+
enumerable: true,
|
|
128
|
+
get: function get() {
|
|
129
|
+
return _listRefresh.readRefreshToken;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
Object.defineProperty(exports, "resolveListSortPolicy", {
|
|
133
|
+
enumerable: true,
|
|
134
|
+
get: function get() {
|
|
135
|
+
return _listDefaultSort.resolveListSortPolicy;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
Object.defineProperty(exports, "shouldRefresh", {
|
|
139
|
+
enumerable: true,
|
|
140
|
+
get: function get() {
|
|
141
|
+
return _listRefresh.shouldRefresh;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
Object.defineProperty(exports, "sortingText", {
|
|
145
|
+
enumerable: true,
|
|
146
|
+
get: function get() {
|
|
147
|
+
return _listDefaultSort.sortingText;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
Object.defineProperty(exports, "withCompositeGroupHeader", {
|
|
151
|
+
enumerable: true,
|
|
152
|
+
get: function get() {
|
|
153
|
+
return _groupedHeaders.withCompositeGroupHeader;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
Object.defineProperty(exports, "withCompositeLeafHeader", {
|
|
157
|
+
enumerable: true,
|
|
158
|
+
get: function get() {
|
|
159
|
+
return _groupedHeaders.withCompositeLeafHeader;
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
Object.defineProperty(exports, "withRefreshToken", {
|
|
163
|
+
enumerable: true,
|
|
164
|
+
get: function get() {
|
|
165
|
+
return _listRefresh.withRefreshToken;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
var _StandardAgGridPlus = require("./StandardAgGridPlus");
|
|
169
|
+
var _emptyState = require("./emptyState");
|
|
170
|
+
var _gridColumnDefs = require("./gridColumnDefs");
|
|
171
|
+
var _groupedHeaders = require("./groupedHeaders");
|
|
172
|
+
var _listDateDisplay = require("./listDateDisplay");
|
|
173
|
+
var _dateFormat = require("./dateFormat");
|
|
174
|
+
var _listDefaultSort = require("./listDefaultSort");
|
|
175
|
+
var _listRefresh = require("./listRefresh");
|
|
176
|
+
var _enumColumns = require("./enumColumns");
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type DateColumn = Record<string, any>;
|
|
2
|
+
type ListDateType = 'dateColumn' | 'dateTimeColumn';
|
|
3
|
+
/** 从日期类型、字段及标题识别日历日期与操作时间,排除耗时和工时。@author nokecy */
|
|
4
|
+
export declare const getListDateType: (column: DateColumn) => ListDateType | undefined;
|
|
5
|
+
/** 列表只格式化展示值,保留数据源中的日期供排序、筛选及提交使用。@author nokecy */
|
|
6
|
+
export declare const normalizeListDateColumn: <T extends DateColumn>(column: T) => T;
|
|
7
|
+
/** 配置扩展列由表格内部追加,必须在注入前配置日期渲染器。@author nokecy */
|
|
8
|
+
export declare const normalizeExtendedDateColumn: <T extends DateColumn>(column: T) => T;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.normalizeListDateColumn = exports.normalizeExtendedDateColumn = exports.getListDateType = void 0;
|
|
7
|
+
var _dateFormat = require("./dateFormat");
|
|
8
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
9
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
11
|
+
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; }
|
|
12
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
13
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
14
|
+
/** 从日期类型、字段及标题识别日历日期与操作时间,排除耗时和工时。@author nokecy */
|
|
15
|
+
var getListDateType = exports.getListDateType = function getListDateType(column) {
|
|
16
|
+
var _column$field, _column$headerName;
|
|
17
|
+
var types = (Array.isArray(column.type) ? column.type : [column.type]).map(String);
|
|
18
|
+
var field = String((_column$field = column.field) !== null && _column$field !== void 0 ? _column$field : '');
|
|
19
|
+
var title = String((_column$headerName = column.headerName) !== null && _column$headerName !== void 0 ? _column$headerName : '');
|
|
20
|
+
if (types.some(function (type) {
|
|
21
|
+
return /^(?:dateTimeColumn|dateTime|DateTimeOffset|System\.DateTime(?:Offset)?)$/i.test(type);
|
|
22
|
+
})) return 'dateTimeColumn';
|
|
23
|
+
if (types.some(function (type) {
|
|
24
|
+
return /^(?:numericColumn|numberColumn|number|rightAligned|bool|boolean)$/i.test(type);
|
|
25
|
+
}) || /耗时|时长|工时|天数|毫秒|秒数|分钟数|星期/.test(title) || /(?:Duration|Days|TimeMs|TimeSeconds|TimeMinutes)$/.test(field)) return undefined;
|
|
26
|
+
if (/时间/.test(title)) return 'dateTimeColumn';
|
|
27
|
+
if (types.some(function (type) {
|
|
28
|
+
return /^(?:dateColumn|date|DateOnly|System\.DateOnly)$/i.test(type);
|
|
29
|
+
})) return 'dateColumn';
|
|
30
|
+
if (/(?:Time|At)$/.test(field) || /^(?:time|createdAt|updatedAt|occurredAt)$/i.test(field) || /(?:Create|Creation|Submit|Submitted|Check|Audit|Approve|Approval|Edit|Editor|Modify|Modified|Change|Update|Confirm|Review)Date$/.test(field) || /^(?:create|creation|submit|check|audit|edit|editor|modify|modified|change|update|confirm|review)Date$/i.test(field)) return 'dateTimeColumn';
|
|
31
|
+
if (/(?:Date)$/.test(field) || /^date$/i.test(field) || /日期|交期|开始日|结束日|截止日/.test(title)) return 'dateColumn';
|
|
32
|
+
return undefined;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/** 列表只格式化展示值,保留数据源中的日期供排序、筛选及提交使用。@author nokecy */
|
|
36
|
+
var normalizeListDateColumn = exports.normalizeListDateColumn = function normalizeListDateColumn(column) {
|
|
37
|
+
var _column$type, _column$cellRenderer;
|
|
38
|
+
var dateType = getListDateType(column);
|
|
39
|
+
if (!dateType) return column;
|
|
40
|
+
var formatter = function formatter(_ref) {
|
|
41
|
+
var value = _ref.value;
|
|
42
|
+
return dateType === 'dateTimeColumn' ? (0, _dateFormat.formatDateTime)(value) : (0, _dateFormat.formatDate)(value);
|
|
43
|
+
};
|
|
44
|
+
return _objectSpread(_objectSpread({}, column), {}, {
|
|
45
|
+
type: (_column$type = column.type) !== null && _column$type !== void 0 ? _column$type : dateType,
|
|
46
|
+
valueFormatter: formatter,
|
|
47
|
+
// 某些表格包装层默认渲染原值;显式渲染保证页面列也使用格式化结果。
|
|
48
|
+
cellRenderer: (_column$cellRenderer = column.cellRenderer) !== null && _column$cellRenderer !== void 0 ? _column$cellRenderer : formatter
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/** 配置扩展列由表格内部追加,必须在注入前配置日期渲染器。@author nokecy */
|
|
53
|
+
var normalizeExtendedDateColumn = exports.normalizeExtendedDateColumn = function normalizeExtendedDateColumn(column) {
|
|
54
|
+
var normalized = normalizeListDateColumn(_objectSpread(_objectSpread({}, column), {}, {
|
|
55
|
+
field: column.name,
|
|
56
|
+
headerName: column.displayName,
|
|
57
|
+
type: column.propertyType
|
|
58
|
+
}));
|
|
59
|
+
if (!getListDateType(normalized)) return column;
|
|
60
|
+
return _objectSpread(_objectSpread({}, column), {}, {
|
|
61
|
+
propertyType: getListDateType(normalized),
|
|
62
|
+
cellRenderer: normalized.cellRenderer
|
|
63
|
+
});
|
|
64
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 列表默认排序的纯逻辑:由列定义推断(状态优先、再按记录时间),或由页面显式指定。@author nokecy
|
|
3
|
+
*/
|
|
4
|
+
/** 列表默认排序;exclusive 表示由页面显式指定,取代状态/时间推断,其他列的初始排序一并清掉。 */
|
|
5
|
+
export type ListDefaultSort = {
|
|
6
|
+
field: string;
|
|
7
|
+
sort: 'asc' | 'desc';
|
|
8
|
+
sortIndex: number;
|
|
9
|
+
}[] & {
|
|
10
|
+
exclusive?: boolean;
|
|
11
|
+
};
|
|
12
|
+
/** 页面显式指定的默认排序(AgGridPlus 的 defaultSort 属性)。 */
|
|
13
|
+
export type ListDefaultSortOverride = {
|
|
14
|
+
field: string;
|
|
15
|
+
sort: 'asc' | 'desc';
|
|
16
|
+
}[];
|
|
17
|
+
/**
|
|
18
|
+
* 默认排序的字段口径,由宿主提供:
|
|
19
|
+
* `statusFields` 按优先级列出「状态」字段(有状态的单据先按状态升序);
|
|
20
|
+
* `timestampFields` 按优先级列出「记录时间」字段(其次按它倒序)。
|
|
21
|
+
* 不传则不识别状态,只按列名/标题规则推断记录时间。
|
|
22
|
+
*/
|
|
23
|
+
export type ListSortPolicy = {
|
|
24
|
+
statusFields?: readonly string[];
|
|
25
|
+
timestampFields?: readonly string[];
|
|
26
|
+
};
|
|
27
|
+
export declare const resolveListSortPolicy: (policy?: ListSortPolicy) => {
|
|
28
|
+
statusFields: string[];
|
|
29
|
+
statusFieldSet: Set<string>;
|
|
30
|
+
timestampFields: string[];
|
|
31
|
+
timestampFieldSet: Set<string>;
|
|
32
|
+
};
|
|
33
|
+
type ResolvedSortPolicy = ReturnType<typeof resolveListSortPolicy>;
|
|
34
|
+
export declare const flattenColumnDefs: (columns: any[] | undefined, result?: Record<string, any>[]) => Record<string, any>[];
|
|
35
|
+
/** 有状态的单据按状态、再按真实记录时间排序;无状态页保留显式业务排序,否则采用实际时间字段。@author nokecy */
|
|
36
|
+
export declare const inferListDefaultSort: (columns: Record<string, any>[], override?: ListDefaultSortOverride, policy?: ListSortPolicy | ResolvedSortPolicy) => ListDefaultSort;
|
|
37
|
+
export declare const sortingText: (sorting: ListDefaultSort) => string;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.sortingText = exports.resolveListSortPolicy = exports.inferListDefaultSort = exports.flattenColumnDefs = void 0;
|
|
7
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
8
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
9
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
12
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
13
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
14
|
+
/**
|
|
15
|
+
* 列表默认排序的纯逻辑:由列定义推断(状态优先、再按记录时间),或由页面显式指定。@author nokecy
|
|
16
|
+
*/
|
|
17
|
+
/** 列表默认排序;exclusive 表示由页面显式指定,取代状态/时间推断,其他列的初始排序一并清掉。 */
|
|
18
|
+
|
|
19
|
+
/** 页面显式指定的默认排序(AgGridPlus 的 defaultSort 属性)。 */
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 默认排序的字段口径,由宿主提供:
|
|
23
|
+
* `statusFields` 按优先级列出「状态」字段(有状态的单据先按状态升序);
|
|
24
|
+
* `timestampFields` 按优先级列出「记录时间」字段(其次按它倒序)。
|
|
25
|
+
* 不传则不识别状态,只按列名/标题规则推断记录时间。
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
var resolveListSortPolicy = exports.resolveListSortPolicy = function resolveListSortPolicy(policy) {
|
|
29
|
+
var _policy$statusFields, _policy$timestampFiel;
|
|
30
|
+
var statusFields = _toConsumableArray((_policy$statusFields = policy === null || policy === void 0 ? void 0 : policy.statusFields) !== null && _policy$statusFields !== void 0 ? _policy$statusFields : []);
|
|
31
|
+
var timestampFields = _toConsumableArray((_policy$timestampFiel = policy === null || policy === void 0 ? void 0 : policy.timestampFields) !== null && _policy$timestampFiel !== void 0 ? _policy$timestampFiel : []);
|
|
32
|
+
return {
|
|
33
|
+
statusFields: statusFields,
|
|
34
|
+
statusFieldSet: new Set(statusFields.map(function (field) {
|
|
35
|
+
return field.toLowerCase();
|
|
36
|
+
})),
|
|
37
|
+
timestampFields: timestampFields,
|
|
38
|
+
timestampFieldSet: new Set(timestampFields.map(function (field) {
|
|
39
|
+
return field.toLowerCase();
|
|
40
|
+
}))
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
var isRecordTimestamp = function isRecordTimestamp(column, recordTimestampFieldSet) {
|
|
44
|
+
var _column$field, _column$headerName;
|
|
45
|
+
var field = String((_column$field = column.field) !== null && _column$field !== void 0 ? _column$field : '').toLowerCase();
|
|
46
|
+
var title = String((_column$headerName = column.headerName) !== null && _column$headerName !== void 0 ? _column$headerName : '');
|
|
47
|
+
if (/(?:expiry|expiration|production|manufactur|delivery|required|need|effective|valid|shelf)/i.test(field) || /有效期|生产日期|交货日期|需求日期|要求日期|保质期/.test(title)) return false;
|
|
48
|
+
if (recordTimestampFieldSet.has(field)) return true;
|
|
49
|
+
if (/(?:create|creation|submit|submitted|audit|check|approve|review|modif|update|change|document|order|bill|invoice|statement|receipt|record|business|make|confirm|transfer|occurred).*(?:time|date)$/i.test(field)) return true;
|
|
50
|
+
return (column.type === 'dateColumn' || column.type === 'dateTimeColumn' || /日期|时间/.test(title)) && /创建|制单|单据|开单|录入|发生|提交|审核|修改|更改|业务|对账|开票|确认|转移/.test(title);
|
|
51
|
+
};
|
|
52
|
+
var flattenColumnDefs = exports.flattenColumnDefs = function flattenColumnDefs(columns) {
|
|
53
|
+
var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
54
|
+
var _iterator = _createForOfIteratorHelper(columns !== null && columns !== void 0 ? columns : []),
|
|
55
|
+
_step;
|
|
56
|
+
try {
|
|
57
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
58
|
+
var column = _step.value;
|
|
59
|
+
if (Array.isArray(column === null || column === void 0 ? void 0 : column.children) && column.children.length) flattenColumnDefs(column.children, result);else result.push(column !== null && column !== void 0 ? column : {});
|
|
60
|
+
}
|
|
61
|
+
} catch (err) {
|
|
62
|
+
_iterator.e(err);
|
|
63
|
+
} finally {
|
|
64
|
+
_iterator.f();
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/** 有状态的单据按状态、再按真实记录时间排序;无状态页保留显式业务排序,否则采用实际时间字段。@author nokecy */
|
|
70
|
+
var inferListDefaultSort = exports.inferListDefaultSort = function inferListDefaultSort(columns, override, policy) {
|
|
71
|
+
var _ref = 'statusFieldSet' in (policy !== null && policy !== void 0 ? policy : {}) ? policy : resolveListSortPolicy(policy),
|
|
72
|
+
documentStatusFields = _ref.statusFields,
|
|
73
|
+
recordTimestampFields = _ref.timestampFields,
|
|
74
|
+
timestampFieldSet = _ref.timestampFieldSet;
|
|
75
|
+
if (override !== null && override !== void 0 && override.length) {
|
|
76
|
+
return Object.assign(override.map(function (item, index) {
|
|
77
|
+
return {
|
|
78
|
+
field: item.field,
|
|
79
|
+
sort: item.sort,
|
|
80
|
+
sortIndex: index
|
|
81
|
+
};
|
|
82
|
+
}), {
|
|
83
|
+
exclusive: true
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
var leaves = columns.filter(function (column) {
|
|
87
|
+
return column.field && column.sortable !== false;
|
|
88
|
+
});
|
|
89
|
+
var statusColumn = documentStatusFields.map(function (field) {
|
|
90
|
+
return leaves.find(function (column) {
|
|
91
|
+
return String(column.field).toLowerCase() === field.toLowerCase();
|
|
92
|
+
});
|
|
93
|
+
}).find(Boolean);
|
|
94
|
+
var timestamps = leaves.filter(function (column) {
|
|
95
|
+
return isRecordTimestamp(column, timestampFieldSet);
|
|
96
|
+
});
|
|
97
|
+
var timestampColumn = recordTimestampFields.map(function (field) {
|
|
98
|
+
return timestamps.find(function (column) {
|
|
99
|
+
return String(column.field).toLowerCase() === field.toLowerCase();
|
|
100
|
+
});
|
|
101
|
+
}).find(Boolean);
|
|
102
|
+
if (statusColumn) {
|
|
103
|
+
return [{
|
|
104
|
+
field: String(statusColumn.field),
|
|
105
|
+
sort: 'asc',
|
|
106
|
+
sortIndex: 0
|
|
107
|
+
}].concat(_toConsumableArray(timestampColumn ? [{
|
|
108
|
+
field: String(timestampColumn.field),
|
|
109
|
+
sort: 'desc',
|
|
110
|
+
sortIndex: 1
|
|
111
|
+
}] : []));
|
|
112
|
+
}
|
|
113
|
+
var explicitSorts = leaves.filter(function (column) {
|
|
114
|
+
return column.initialSort === 'asc' || column.initialSort === 'desc' || column.sort === 'asc' || column.sort === 'desc';
|
|
115
|
+
}).sort(function (left, right) {
|
|
116
|
+
var _left$sortIndex, _right$sortIndex;
|
|
117
|
+
return Number((_left$sortIndex = left.sortIndex) !== null && _left$sortIndex !== void 0 ? _left$sortIndex : 0) - Number((_right$sortIndex = right.sortIndex) !== null && _right$sortIndex !== void 0 ? _right$sortIndex : 0);
|
|
118
|
+
});
|
|
119
|
+
if (explicitSorts.length) {
|
|
120
|
+
return explicitSorts.map(function (column, index) {
|
|
121
|
+
var _column$initialSort;
|
|
122
|
+
return {
|
|
123
|
+
field: String(column.field),
|
|
124
|
+
sort: (_column$initialSort = column.initialSort) !== null && _column$initialSort !== void 0 ? _column$initialSort : column.sort,
|
|
125
|
+
sortIndex: Number.isFinite(Number(column.sortIndex)) ? Number(column.sortIndex) : index
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
return timestampColumn ? [{
|
|
130
|
+
field: String(timestampColumn.field),
|
|
131
|
+
sort: 'desc',
|
|
132
|
+
sortIndex: 0
|
|
133
|
+
}] : [];
|
|
134
|
+
};
|
|
135
|
+
var sortingText = exports.sortingText = function sortingText(sorting) {
|
|
136
|
+
return sorting.map(function (item) {
|
|
137
|
+
return "".concat(item.field, " ").concat(item.sort);
|
|
138
|
+
}).join(', ');
|
|
139
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 「保存后回列表,列表要是新的」这件事的判定逻辑。
|
|
3
|
+
*
|
|
4
|
+
* 为什么需要它:`pubGoBack()` 只是 push 回父路径再关掉表单页的标签,
|
|
5
|
+
* 而列表页在 KeepAlive 缓存里,push 回去是**直接复原缓存的那棵树,不会重新拉数据**——
|
|
6
|
+
* 用户刚保存的记录不在列表里,于是以为没存上,再存一遍。全仓有 196 处这样的返回。
|
|
7
|
+
*
|
|
8
|
+
* 判定单独拆出来是因为它有三个都会出错的边界:缓存页不活跃时不能刷、同一个 refresh 值不能重复刷、
|
|
9
|
+
* 挂载时 URL 上已有的 refresh 值不算(那是别人触发的,自己刚加载完,再刷一次纯属浪费)。
|
|
10
|
+
*
|
|
11
|
+
* @author nokecy
|
|
12
|
+
*/
|
|
13
|
+
export type RefreshDecisionInput = {
|
|
14
|
+
/** 当前页面是否是活跃页面。KeepAlive 缓存的页面 useEffect 照样在跑,不判这个会串台 */
|
|
15
|
+
isActive: boolean;
|
|
16
|
+
/** URL 上的 refresh 值 */
|
|
17
|
+
refresh?: string | null;
|
|
18
|
+
/** 上一次已经响应过的 refresh 值 */
|
|
19
|
+
lastHandled?: string | null;
|
|
20
|
+
};
|
|
21
|
+
export declare const shouldRefresh: ({ isActive, refresh, lastHandled }: RefreshDecisionInput) => boolean;
|
|
22
|
+
/** 从 location.search 里取 refresh。 */
|
|
23
|
+
export declare const readRefreshToken: (search?: string | null) => string | null;
|
|
24
|
+
/** 给列表路径带上刷新标记;已有 refresh 的会被替换而不是叠加。 */
|
|
25
|
+
export declare const withRefreshToken: (listPath: string, token: string | number) => string;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.withRefreshToken = exports.shouldRefresh = exports.readRefreshToken = void 0;
|
|
7
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
11
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
12
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
+
/**
|
|
14
|
+
* 「保存后回列表,列表要是新的」这件事的判定逻辑。
|
|
15
|
+
*
|
|
16
|
+
* 为什么需要它:`pubGoBack()` 只是 push 回父路径再关掉表单页的标签,
|
|
17
|
+
* 而列表页在 KeepAlive 缓存里,push 回去是**直接复原缓存的那棵树,不会重新拉数据**——
|
|
18
|
+
* 用户刚保存的记录不在列表里,于是以为没存上,再存一遍。全仓有 196 处这样的返回。
|
|
19
|
+
*
|
|
20
|
+
* 判定单独拆出来是因为它有三个都会出错的边界:缓存页不活跃时不能刷、同一个 refresh 值不能重复刷、
|
|
21
|
+
* 挂载时 URL 上已有的 refresh 值不算(那是别人触发的,自己刚加载完,再刷一次纯属浪费)。
|
|
22
|
+
*
|
|
23
|
+
* @author nokecy
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
var shouldRefresh = exports.shouldRefresh = function shouldRefresh(_ref) {
|
|
27
|
+
var isActive = _ref.isActive,
|
|
28
|
+
refresh = _ref.refresh,
|
|
29
|
+
lastHandled = _ref.lastHandled;
|
|
30
|
+
return Boolean(isActive && refresh && refresh !== lastHandled);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** 从 location.search 里取 refresh。 */
|
|
34
|
+
var readRefreshToken = exports.readRefreshToken = function readRefreshToken(search) {
|
|
35
|
+
if (!search) return null;
|
|
36
|
+
try {
|
|
37
|
+
return new URLSearchParams(search).get('refresh');
|
|
38
|
+
} catch (_unused) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/** 给列表路径带上刷新标记;已有 refresh 的会被替换而不是叠加。 */
|
|
44
|
+
var withRefreshToken = exports.withRefreshToken = function withRefreshToken(listPath, token) {
|
|
45
|
+
var _listPath$split = listPath.split('?'),
|
|
46
|
+
_listPath$split2 = _slicedToArray(_listPath$split, 2),
|
|
47
|
+
path = _listPath$split2[0],
|
|
48
|
+
_listPath$split2$ = _listPath$split2[1],
|
|
49
|
+
search = _listPath$split2$ === void 0 ? '' : _listPath$split2$;
|
|
50
|
+
var params = new URLSearchParams(search);
|
|
51
|
+
params.set('refresh', String(token));
|
|
52
|
+
return "".concat(path, "?").concat(params.toString());
|
|
53
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.saveAs = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* 把 Blob 存成本地文件。
|
|
9
|
+
*
|
|
10
|
+
* @author nokecy
|
|
11
|
+
*/
|
|
12
|
+
var saveAs = exports.saveAs = function saveAs(blob, filename) {
|
|
13
|
+
var nav = window.navigator;
|
|
14
|
+
if (typeof nav.msSaveBlob === 'function') {
|
|
15
|
+
nav.msSaveBlob(blob, filename);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
var link = document.createElement('a');
|
|
19
|
+
link.href = window.URL.createObjectURL(blob);
|
|
20
|
+
link.download = filename;
|
|
21
|
+
link.click();
|
|
22
|
+
window.URL.revokeObjectURL(link.href);
|
|
23
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 导出按钮的行为决策与地址构造。
|
|
3
|
+
*
|
|
4
|
+
* 抽成纯函数是为了能直接测:这里的分支决定了「现场点导出会发生什么」,
|
|
5
|
+
* 而它最容易出问题的两个场景——模板没配、模板接口挂了——在页面里很难复现。
|
|
6
|
+
*
|
|
7
|
+
* @author nokecy
|
|
8
|
+
*/
|
|
9
|
+
/** 导出模板服务的接口地址:可用模板列表与按模板渲染文件。默认指向 MES 后端的 export-template 服务,其他后端可在 ExportButton 上覆盖。 */
|
|
10
|
+
export interface ExportTemplateApi {
|
|
11
|
+
/** 按页面标识取可用模板(GET,参数 gridKey) */
|
|
12
|
+
options: string;
|
|
13
|
+
/** 按模板渲染并下载(GET,参数 TemplateId、Filter) */
|
|
14
|
+
render: string;
|
|
15
|
+
}
|
|
16
|
+
/** 默认的导出模板服务地址。 */
|
|
17
|
+
export declare const DEFAULT_EXPORT_TEMPLATE_API: ExportTemplateApi;
|
|
18
|
+
/** 后端 `export-template/options` 返回的模板项 */
|
|
19
|
+
export interface ExportTemplateOption {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
isDefault: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** 导出按钮该以什么形态出现 */
|
|
25
|
+
export type ExportAction =
|
|
26
|
+
/** 没有可用模板:走页面自带的旧导出入口 */
|
|
27
|
+
{
|
|
28
|
+
kind: 'legacy';
|
|
29
|
+
}
|
|
30
|
+
/** 只有一个模板:按钮直接导 */
|
|
31
|
+
| {
|
|
32
|
+
kind: 'single';
|
|
33
|
+
template: ExportTemplateOption;
|
|
34
|
+
}
|
|
35
|
+
/** 多个模板:下拉选择 */
|
|
36
|
+
| {
|
|
37
|
+
kind: 'menu';
|
|
38
|
+
templates: ExportTemplateOption[];
|
|
39
|
+
defaultTemplate: ExportTemplateOption;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* 根据可用模板决定导出按钮的行为。
|
|
43
|
+
*
|
|
44
|
+
* 传 null / undefined 表示「没拿到模板列表」(接口失败或还没加载),
|
|
45
|
+
* 与「确实一个模板都没配」一样回落到旧导出——模板服务出问题不该让现场导不出数据。
|
|
46
|
+
*/
|
|
47
|
+
export declare const resolveExportAction: (templates: ExportTemplateOption[] | null | undefined) => ExportAction;
|
|
48
|
+
/**
|
|
49
|
+
* 导出接口地址。这里已经把参数百分号编码好了(Gridify 的值里可能有 `&` `#` `+`,不编会截断 query string)。
|
|
50
|
+
*
|
|
51
|
+
* <b>因此下载不能走 `downloadBlob`</b>:它内部还会 `encodeURI(url)` 再编一次,
|
|
52
|
+
* `%` 被转义成 `%25`(`boxCode%3D*BOX001` → `boxCode%253D*BOX001`),
|
|
53
|
+
* 后端解析不出筛选串——现场表现是「在列表上筛完点导出,导出的是全量」。
|
|
54
|
+
* 见本目录 index.tsx 里的 `download`。
|
|
55
|
+
*/
|
|
56
|
+
export declare const buildExportUrl: (templateId: string, filter?: string | null, renderUrl?: string) => string;
|
|
57
|
+
/**
|
|
58
|
+
* 从响应头取导出文件名。
|
|
59
|
+
*
|
|
60
|
+
* 文件名是运维在模板上配的(可带 {date} 之类的占位),只有服务端知道最终值;
|
|
61
|
+
* 客户端自己起名会让那项配置永远不生效。头里取不到就用兜底名。
|
|
62
|
+
*
|
|
63
|
+
* 后端用 `filename*=UTF-8''xxx`(RFC 5987)传中文名,老式 `filename="xxx"` 也认。
|
|
64
|
+
*/
|
|
65
|
+
export declare const resolveFileName: (contentDisposition: string | undefined | null, fallback: string) => string;
|
|
66
|
+
/**
|
|
67
|
+
* 从导出失败的异常里取出给人看的错误信息。
|
|
68
|
+
*
|
|
69
|
+
* 导出请求是 `responseType: 'blob'`,后端返回的 JSON 错误体也会被 axios 当成 blob 收下,
|
|
70
|
+
* `e.response.data.error.message` 这条路永远取不到东西——现场看到的是 axios 自己的
|
|
71
|
+
* "Request failed with status code 500",既不知道是数据太多超时还是模板配错。
|
|
72
|
+
* 所以先把 blob 读回来解析一次。
|
|
73
|
+
*/
|
|
74
|
+
export declare const resolveExportError: (error: any) => Promise<string>;
|