@epxing/utils 0.0.0-stage → 5.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API.md +602 -0
- package/README.md +22 -2
- package/dist/_vendor/.pnpm/jsencrypt@3.5.4/_vendor/jsencrypt/bin/jsencrypt.min.js +1691 -0
- package/dist/_virtual/_commonjsHelpers.js +6 -0
- package/dist/_virtual/jsencrypt.min.js +31 -0
- package/dist/_virtual/jsencrypt.min2.js +4 -0
- package/dist/_virtual/preload-helper.js +88 -0
- package/dist/assets/ai-BBFn3QRy.png +0 -0
- package/dist/assets/ai_import-BxQ7Ohn6.png +0 -0
- package/dist/assets/app-DBNIokDP.png +0 -0
- package/dist/assets/approval-DGcBv-re.png +0 -0
- package/dist/assets/create_market_system-BH__UVbt.png +0 -0
- package/dist/assets/create_system-irg--ePh.png +0 -0
- package/dist/assets/custom-C-ujlHz1.png +0 -0
- package/dist/assets/default-icon-2193FMjv.png +0 -0
- package/dist/assets/ex_link-4fYPd9nh.png +0 -0
- package/dist/assets/excel-BYqRm2Y8.png +0 -0
- package/dist/assets/folder-CFVsNbjj.png +0 -0
- package/dist/assets/form-DD9HV-jN.png +0 -0
- package/dist/assets/import-tfKWbWVS.png +0 -0
- package/dist/assets/meta-Qorpi70B.png +0 -0
- package/dist/assets/module-DQrs7VAS.png +0 -0
- package/dist/assets/null-B2An29h4.png +0 -0
- package/dist/assets/option-CG02tIgh.svg +1 -0
- package/dist/assets/photo-uscRzRXF.png +0 -0
- package/dist/assets/process-Dcndu9m2.png +0 -0
- package/dist/assets/rule-DcYhYse0.png +0 -0
- package/dist/assets/service-CLYLpPl3.png +0 -0
- package/dist/assets/single_file-B3TJtJli.png +0 -0
- package/dist/assets/snapshot-history-BsVY9cVj.png +0 -0
- package/dist/assets/snapshot-manual-DBRfFHYI.png +0 -0
- package/dist/assets/snapshot-realtime-DjHnJI6C.png +0 -0
- package/dist/assets/staff-Bn_-_00l.png +0 -0
- package/dist/assets/sync_append-Bm8mtvZs.png +0 -0
- package/dist/assets/sync_append_update-DzjxqJ_U.png +0 -0
- package/dist/assets/sync_loading-D7LoNPFP.png +0 -0
- package/dist/assets/sync_replace-Cbbzz327.png +0 -0
- package/dist/assets/sync_update-Birao6Cr.png +0 -0
- package/dist/assets/userRole-D1LAdM6N.png +0 -0
- package/dist/assets/user_bg-BFHtaZjz.png +0 -0
- package/dist/src/Config.js +25 -0
- package/dist/src/asset-images.js +125 -0
- package/dist/src/assets/images/add.png.js +4 -0
- package/dist/src/assets/images/ai-button.png.js +4 -0
- package/dist/src/assets/images/ai.png.js +4 -0
- package/dist/src/assets/images/ai_import.png.js +4 -0
- package/dist/src/assets/images/app.png.js +4 -0
- package/dist/src/assets/images/approval.png.js +4 -0
- package/dist/src/assets/images/book.png.js +4 -0
- package/dist/src/assets/images/canvas-editor/alignment.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/arrow-left.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/arrow-right.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/block.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/bold.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/catalog.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/center.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/checkbox.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/close.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/codeblock.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/color.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/control.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/date.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/exit-fullscreen.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/format.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/highlight.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/hyperlink.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/image.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/italic.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/justify.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/latex.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/left.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/line-dash-dot-dot.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/line-dash-dot.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/line-dash-large-gap.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/line-dash-small-gap.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/line-dot.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/line-double.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/line-single.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/line-wavy.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/list.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/option.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/page-break.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/page-mode.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/page-scale-add.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/page-scale-minus.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/painter.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/paper-direction.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/paper-margin.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/paper-size.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/print.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/radio.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/redo.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/request-fullscreen.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/right.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/row-margin.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/search.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/separator.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/signature-undo.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/signature.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/size-add.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/size-minus.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/strikeout.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/subscript.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/superscript.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/table.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/title.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/trash.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/underline.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/undo.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/watermark.svg.js +4 -0
- package/dist/src/assets/images/canvas-editor/word-tool.svg.js +4 -0
- package/dist/src/assets/images/clear.png.js +4 -0
- package/dist/src/assets/images/create_market_system.png.js +4 -0
- package/dist/src/assets/images/create_system.png.js +4 -0
- package/dist/src/assets/images/custom.png.js +4 -0
- package/dist/src/assets/images/default-icon.png.js +4 -0
- package/dist/src/assets/images/ex_link.png.js +4 -0
- package/dist/src/assets/images/excel.png.js +4 -0
- package/dist/src/assets/images/file.png.js +4 -0
- package/dist/src/assets/images/folder.png.js +4 -0
- package/dist/src/assets/images/hall/form.png.js +4 -0
- package/dist/src/assets/images/hall/meta.png.js +4 -0
- package/dist/src/assets/images/hall/process.png.js +4 -0
- package/dist/src/assets/images/hall/rule.png.js +4 -0
- package/dist/src/assets/images/hall/service.png.js +4 -0
- package/dist/src/assets/images/hall/userRole.png.js +4 -0
- package/dist/src/assets/images/hr.png.js +4 -0
- package/dist/src/assets/images/import.png.js +4 -0
- package/dist/src/assets/images/jian.png.js +4 -0
- package/dist/src/assets/images/module.png.js +4 -0
- package/dist/src/assets/images/null.png.js +4 -0
- package/dist/src/assets/images/photo.png.js +4 -0
- package/dist/src/assets/images/qq.png.js +4 -0
- package/dist/src/assets/images/robot.png.js +4 -0
- package/dist/src/assets/images/single_file.png.js +4 -0
- package/dist/src/assets/images/snapshot-history.png.js +4 -0
- package/dist/src/assets/images/snapshot-manual.png.js +4 -0
- package/dist/src/assets/images/snapshot-realtime.png.js +4 -0
- package/dist/src/assets/images/staff.png.js +4 -0
- package/dist/src/assets/images/switch_app.png.js +4 -0
- package/dist/src/assets/images/sync_append.png.js +4 -0
- package/dist/src/assets/images/sync_append_update.png.js +4 -0
- package/dist/src/assets/images/sync_loading.png.js +4 -0
- package/dist/src/assets/images/sync_replace.png.js +4 -0
- package/dist/src/assets/images/sync_update.png.js +4 -0
- package/dist/src/assets/images/user_bg.png.js +4 -0
- package/dist/src/assets/images/weixin.png.js +4 -0
- package/dist/src/chart-config-update.js +17 -0
- package/dist/src/chart-data-adapters.js +112 -0
- package/dist/src/chart-option-override.js +128 -0
- package/dist/src/chart-option-paths.js +64 -0
- package/dist/src/chart-registry.js +46 -0
- package/dist/src/chart-render-host.js +57 -0
- package/dist/src/chart-request-broker.js +176 -0
- package/dist/src/chartTheme.js +683 -0
- package/dist/src/collection.js +25 -0
- package/dist/src/date-helper.js +60 -0
- package/dist/src/dom-helper.js +22 -0
- package/dist/src/eval-with.js +14 -0
- package/dist/src/fieldFactory.js +5 -0
- package/dist/src/formula.js +365 -0
- package/dist/src/hljs-lite.js +29 -0
- package/dist/src/index.js +24 -0
- package/dist/src/lazy-jsencrypt.js +13 -0
- package/dist/src/legacy.js +25 -0
- package/dist/src/locale.js +88 -0
- package/dist/src/menu-open.js +43 -0
- package/dist/src/mermaid.js +79 -0
- package/dist/src/meta.js +4 -0
- package/dist/src/mobile-chart-appearance.js +148 -0
- package/dist/src/moment-compat.js +558 -0
- package/dist/src/nav-history.js +184 -0
- package/dist/src/page.js +116 -0
- package/dist/src/pdf.viewer.js +4 -0
- package/dist/src/placeholder.js +64 -0
- package/dist/src/public.js +49 -0
- package/dist/src/security.js +26 -0
- package/dist/src/storage.js +107 -0
- package/dist/src/token-storage.js +108 -0
- package/dist/src/util.js +4 -0
- package/package.json +109 -3
- package/src/Config.js +25 -0
- package/src/asset-images.js +16 -0
- package/src/chart-config-update.js +16 -0
- package/src/chart-data-adapters.js +106 -0
- package/src/chart-option-override.js +126 -0
- package/src/chart-option-paths.js +63 -0
- package/src/chart-registry.js +41 -0
- package/src/chart-render-host.js +56 -0
- package/src/chart-request-broker.js +171 -0
- package/src/chartTheme.js +711 -0
- package/src/collection.js +28 -0
- package/src/date-helper.js +72 -0
- package/src/dom-helper.js +26 -0
- package/src/eval-with.js +21 -0
- package/src/fieldFactory.js +3 -0
- package/src/formula.js +362 -0
- package/src/hljs-lite.js +41 -0
- package/src/index.js +2 -0
- package/src/lazy-jsencrypt.js +36 -0
- package/src/legacy.js +29 -0
- package/src/locale.js +104 -0
- package/src/menu-open.js +72 -0
- package/src/mermaid.js +115 -0
- package/src/meta.js +2 -0
- package/src/mobile-chart-appearance.js +147 -0
- package/src/moment-compat.d.ts +91 -0
- package/src/moment-compat.js +744 -0
- package/src/nav-history.js +274 -0
- package/src/page.js +129 -0
- package/src/pdf.viewer.js +2 -0
- package/src/placeholder.js +107 -0
- package/src/public.js +11 -0
- package/src/security.js +29 -0
- package/src/storage.js +135 -0
- package/src/token-storage.js +120 -0
- package/src/util.js +2 -0
- package/types/Config.d.ts +4 -0
- package/types/collection.d.ts +40 -0
- package/types/date-helper.d.ts +11 -0
- package/types/date-time.d.ts +2 -0
- package/types/date.d.ts +1 -0
- package/types/dom-helper.d.ts +3 -0
- package/types/dom.d.ts +1 -0
- package/types/index.d.ts +1 -0
- package/types/moment-compat.d.ts +91 -0
- package/types/page.d.ts +56 -0
- package/types/placeholder.d.ts +42 -0
- package/types/public.d.ts +10 -0
- package/types/storage.d.ts +31 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// T33 element-ui 解耦:YearRange / yearTable 原本深度 import `element-ui/src/utils/date-util`。
|
|
2
|
+
//
|
|
3
|
+
// 为何必须搬出来:element-ui 的 date-util → `element-ui/src/locale` → `import Vue from 'vue'`
|
|
4
|
+
// → `Vue.prototype.$isServer`。Vue3 的 `vue` 包**没有 default 导出**,摘掉 `vue: '@vue/compat'`
|
|
5
|
+
// 别名后这行拿到 undefined,模块在 **import 期**就 TypeError。dom.js / util.js / clickoutside.js /
|
|
6
|
+
// popup-manager.js / locale 同理(都靠 `Vue.prototype.$isServer`)。
|
|
7
|
+
//
|
|
8
|
+
// 这里按 element-ui 2.15.14 的语义原样移植我方用到的那几个(纯函数,无 Vue、无 fecha)。
|
|
9
|
+
// 差异仅一处:modifyWithTimeString 的 'HH:mm:ss' 解析用正则,不再走 fecha.parse。
|
|
10
|
+
|
|
11
|
+
export function isDate (date) {
|
|
12
|
+
if (date === null || date === undefined) return false
|
|
13
|
+
if (isNaN(new Date(date).getTime())) return false
|
|
14
|
+
if (Array.isArray(date)) return false // new Date([new Date()]) 会被 JS 解成合法日期
|
|
15
|
+
return true
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function getDayCountOfMonth (year, month) {
|
|
19
|
+
if (isNaN(+month)) return 31
|
|
20
|
+
return new Date(year, +month + 1, 0).getDate()
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getDayCountOfYear (year) {
|
|
24
|
+
const isLeapYear = year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)
|
|
25
|
+
return isLeapYear ? 366 : 365
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function nextDate (date, amount = 1) {
|
|
29
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// 换年/月时把「日」夹到目标月的天数内(1/31 → 2 月不会溢出成 3/3)
|
|
33
|
+
function changeYearMonthAndClampDate (date, year, month) {
|
|
34
|
+
const monthDate = Math.min(date.getDate(), getDayCountOfMonth(year, month))
|
|
35
|
+
return modifyDate(date, year, month, monthDate)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function nextMonth (date) {
|
|
39
|
+
const year = date.getFullYear()
|
|
40
|
+
const month = date.getMonth()
|
|
41
|
+
return month === 11
|
|
42
|
+
? changeYearMonthAndClampDate(date, year + 1, 0)
|
|
43
|
+
: changeYearMonthAndClampDate(date, year, month + 1)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function prevYear (date, amount = 1) {
|
|
47
|
+
return changeYearMonthAndClampDate(date, date.getFullYear() - amount, date.getMonth())
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function nextYear (date, amount = 1) {
|
|
51
|
+
return changeYearMonthAndClampDate(date, date.getFullYear() + amount, date.getMonth())
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function range (n) {
|
|
55
|
+
return Array.apply(null, { length: n }).map((_, i) => i)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function modifyDate (date, y, m, d) {
|
|
59
|
+
return new Date(y, m, d, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function modifyTime (date, h, m, s) {
|
|
63
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), h, m, s, date.getMilliseconds())
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// element-ui 原实现走 fecha.parse(time, 'HH:mm:ss');这里直接正则取三段,语义一致
|
|
67
|
+
export function modifyWithTimeString (date, time) {
|
|
68
|
+
if (date == null || !time) return date
|
|
69
|
+
const m = /^(\d{1,2}):(\d{1,2}):(\d{1,2})/.exec(String(time))
|
|
70
|
+
if (!m) return date
|
|
71
|
+
return modifyTime(date, Number(m[1]), Number(m[2]), Number(m[3]))
|
|
72
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// T33 element-ui 解耦:替代 `element-ui/src/utils/dom` 的 hasClass 与 `.../utils/util` 的
|
|
2
|
+
// arrayFindIndex / coerceTruthyValueToArray。
|
|
3
|
+
//
|
|
4
|
+
// 为何必须搬:element-ui 的 dom.js / util.js 开头都是 `import Vue from 'vue'` +
|
|
5
|
+
// `Vue.prototype.$isServer`;Vue3 的 `vue` 包无 default 导出,摘掉 compat 别名后 import 期即崩。
|
|
6
|
+
// 这三个函数本身与 Vue 无关,原样移植。
|
|
7
|
+
|
|
8
|
+
export function hasClass (el, cls) {
|
|
9
|
+
if (!el || !cls) return false
|
|
10
|
+
if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.')
|
|
11
|
+
if (el.classList) return el.classList.contains(cls)
|
|
12
|
+
return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function arrayFindIndex (arr, pred) {
|
|
16
|
+
for (let i = 0; i !== arr.length; ++i) {
|
|
17
|
+
if (pred(arr[i])) return i
|
|
18
|
+
}
|
|
19
|
+
return -1
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function coerceTruthyValueToArray (val) {
|
|
23
|
+
if (Array.isArray(val)) return val
|
|
24
|
+
if (val) return [val]
|
|
25
|
+
return []
|
|
26
|
+
}
|
package/src/eval-with.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// 带显式作用域的表达式求值,替代「先声明局部变量、再直接 eval 让表达式去捕获」的写法。
|
|
2
|
+
// 那种写法在 Vite 生产包里会挂:rollup 摇树会把只被 eval 字符串引用的局部变量当未使用删掉
|
|
3
|
+
// (rollup 4 实测 `const that = this; eval('that.x')` 打完只剩 `eval('that.x')`;esbuild 压缩本身
|
|
4
|
+
// 会保留、terser 也救不回来——删除发生在压缩之前;webpack 遇到直接 eval 会整段放弃优化,Vue2 版因此没事),
|
|
5
|
+
// 运行时 ReferenceError,而调用处大多包着 try/catch,表现为表达式静默解析成空串或原样字符串。
|
|
6
|
+
// 这里把变量名作为 Function 形参、变量值作为实参传进去——形参名是字符串,不受摇树 / 压缩影响;
|
|
7
|
+
// 函数体里再直接 eval,保留 eval 的完整语义(语句、完成值、this、找不到的名字照样抛 ReferenceError)。
|
|
8
|
+
// 同一组形参只编译一次。
|
|
9
|
+
const cache = new Map()
|
|
10
|
+
|
|
11
|
+
export function evalWith (expr, scope = {}, thisArg) {
|
|
12
|
+
const names = Object.keys(scope)
|
|
13
|
+
const key = names.join(',')
|
|
14
|
+
let fn = cache.get(key)
|
|
15
|
+
if (!fn) {
|
|
16
|
+
// eslint-disable-next-line no-new-func
|
|
17
|
+
fn = new Function(...names, '__expr__', 'return eval(__expr__)')
|
|
18
|
+
cache.set(key, fn)
|
|
19
|
+
}
|
|
20
|
+
return fn.call(thisArg, ...names.map(name => scope[name]), expr)
|
|
21
|
+
}
|
package/src/formula.js
ADDED
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
// 公式串来自数据库,这里的日期函数是它们的实现。走兼容层而不是直接 dayjs:
|
|
2
|
+
// `DATE_ADD` / `DATE_SUBTRACT`(见本文件下方)会把日期对象**作为公式结果流出去**
|
|
3
|
+
// (util.js 的 evalExpression 直接返回它),下游按 moment 的用法消费——包括隐式
|
|
4
|
+
// 转字符串(模板里的 `{{ 结果 }}` 走 String()),所以兼容层的 toString 也必须对齐。
|
|
5
|
+
// ⚠️ 这里曾写成 `FORMULA_ADD/SUBTRACT`,全仓无此标识符,是笔误。
|
|
6
|
+
import moment from '@epxing/utils/src/moment-compat'
|
|
7
|
+
import { get, set, size, map, orderBy, filter, find, nth, every, some } from 'lodash-es'
|
|
8
|
+
export const EQ = (v1, v2) => v1 === v2
|
|
9
|
+
export const NE = (v1, v2) => v1 !== v2
|
|
10
|
+
export const LT = (v1, v2, type) => {
|
|
11
|
+
if (type === 'date') {
|
|
12
|
+
return moment(v1).isBefore(v2)
|
|
13
|
+
} else {
|
|
14
|
+
return v1 < v2
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export const LE = (v1, v2, type) => {
|
|
18
|
+
if (type === 'date') {
|
|
19
|
+
return moment(v1).isSameOrBefore(v2)
|
|
20
|
+
} else {
|
|
21
|
+
return v1 <= v2
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const GT = (v1, v2, type) => {
|
|
26
|
+
if (type === 'date') {
|
|
27
|
+
return moment(v1).isAfter(v2)
|
|
28
|
+
} else {
|
|
29
|
+
return v1 > v2
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export const GE = (v1, v2, type) => {
|
|
33
|
+
if (type === 'date') {
|
|
34
|
+
return moment(v1).isSameOrAfter(v2)
|
|
35
|
+
} else {
|
|
36
|
+
return v1 >= v2
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export const AND = (...logical) => {
|
|
40
|
+
return logical.every(item => item)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const OR = (...logical) => {
|
|
44
|
+
return logical.some(item => item)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const NOT = (logical) => {
|
|
48
|
+
return !logical
|
|
49
|
+
}
|
|
50
|
+
export const IN = (v1, ...v2) => {
|
|
51
|
+
if (v2.length === 0) return false
|
|
52
|
+
if (v2.length > 1) {
|
|
53
|
+
return v2.includes(v1)
|
|
54
|
+
} else {
|
|
55
|
+
return v2[0].split(',').includes(v1)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export const IN_TEXT = (v1, v2) => {
|
|
59
|
+
return v2.includes(v1)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const IF = (v1, v2, v3) => {
|
|
63
|
+
return v1 ? v2 : v3
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export const ISEMPTY = (v1) => {
|
|
67
|
+
return v1 === '' || v1 === null || v1 === undefined
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** 数学函数 **/
|
|
71
|
+
|
|
72
|
+
export const SUM = (v1, v2) => {
|
|
73
|
+
return v1 + v2
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const SUBTRACT = (v1, v2) => {
|
|
77
|
+
return v1 - v2
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export const PRODUCT = (v1, v2) => {
|
|
81
|
+
return v1 * v2
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export const DIVIDED = (v1, v2) => {
|
|
85
|
+
return v1 / v2
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export const MOD = (v1, v2) => {
|
|
89
|
+
return v1 % v2
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export const POW = (v1, v2) => {
|
|
93
|
+
return Math.pow(v1, v2)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export const MAX = (...v1) => {
|
|
97
|
+
return Math.max(...v1)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export const MIN = (...v1) => {
|
|
101
|
+
return Math.min(...v1)
|
|
102
|
+
}
|
|
103
|
+
export const ABS = (v1) => {
|
|
104
|
+
return Math.abs(v1)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export const FLOOR = (v1) => {
|
|
108
|
+
return Math.floor(v1)
|
|
109
|
+
}
|
|
110
|
+
export const CEIL = (v1) => {
|
|
111
|
+
return Math.ceil(v1)
|
|
112
|
+
}
|
|
113
|
+
export const ROUND = (v1) => {
|
|
114
|
+
return Math.round(v1)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export const RANDOM = (v1, v2) => {
|
|
118
|
+
return Math.floor(Math.random() * (v2 - v1 + 1) + v1)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export const AVERAGE = (...v1) => {
|
|
122
|
+
return v1.reduce((a, b) => a + b) / v1.length
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** 日期函数 **/
|
|
126
|
+
|
|
127
|
+
export const DATE_SUBTRACT = (v1, v2, unit = 'days') => {
|
|
128
|
+
return moment(v1).subtract(v2, unit)
|
|
129
|
+
}
|
|
130
|
+
export const DATE_ADD = (v1, v2, unit = 'days') => {
|
|
131
|
+
return moment(v1).add(v2, unit)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export const DATE_FORMAT = (v1, format = 'YYYY-MM-DD') => {
|
|
135
|
+
return moment(v1).format(format)
|
|
136
|
+
}
|
|
137
|
+
export const FORMAT_DATE = (v1, format = 'YYYY-MM-DD') => {
|
|
138
|
+
return moment(v1).format(format)
|
|
139
|
+
}
|
|
140
|
+
export const DATEDIF = (v1, v2, unit = 'days') => {
|
|
141
|
+
return moment(v1).diff(v2, unit)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export const NOW = (format = 'YYYY-MM-DD HH:mm:ss') => {
|
|
145
|
+
return moment().format(format)
|
|
146
|
+
}
|
|
147
|
+
export const GET_DATE = (v1, unit) => {
|
|
148
|
+
return moment(v1).get(unit)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** 字符串函数 **/
|
|
152
|
+
export const CONCATENATE = (...v1) => {
|
|
153
|
+
return v1.join('')
|
|
154
|
+
}
|
|
155
|
+
export const VALUE = (v1) => {
|
|
156
|
+
return Number(v1)
|
|
157
|
+
}
|
|
158
|
+
export const LEN = (v1) => {
|
|
159
|
+
return v1.length
|
|
160
|
+
}
|
|
161
|
+
export const REPLACE_STR = (v1, v2, v3) => {
|
|
162
|
+
return v1.replace(v2, v3)
|
|
163
|
+
}
|
|
164
|
+
export const SUBSTRING = (v1, v2, v3) => {
|
|
165
|
+
return v1.substr(v2, v3)
|
|
166
|
+
}
|
|
167
|
+
export const UPPER = (v1) => {
|
|
168
|
+
return v1.toUpperCase()
|
|
169
|
+
}
|
|
170
|
+
export const LOWER = (v1) => {
|
|
171
|
+
return v1.toLowerCase()
|
|
172
|
+
}
|
|
173
|
+
export const TRIM = (v1) => {
|
|
174
|
+
return v1.trim()
|
|
175
|
+
}
|
|
176
|
+
export const TEXT = (v1) => {
|
|
177
|
+
return v1.toString()
|
|
178
|
+
}
|
|
179
|
+
export const REPLACE = (v1, v2, v3, newtext) => {
|
|
180
|
+
const startPart = v1.slice(0, v2)
|
|
181
|
+
const endPart = v1.slice(v2 + v3)
|
|
182
|
+
return startPart + newtext + endPart
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** 对象函数 */
|
|
186
|
+
export const GET = (object, path, defaultValue) => {
|
|
187
|
+
return get(object, path, defaultValue || '')
|
|
188
|
+
}
|
|
189
|
+
export const SET = (object, path, defaultValue) => {
|
|
190
|
+
return set(object, path, defaultValue || '')
|
|
191
|
+
}
|
|
192
|
+
export const KEYS = (object) => {
|
|
193
|
+
return Object.keys(object)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export const VALUES = (object) => {
|
|
197
|
+
return Object.values(object)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** 集合条件表达式
|
|
201
|
+
* FILTER / FIND / EVERY / SOME 的条件参数除 lodash 简写外,还支持写成条件表达式串,写法与组件 showIf 一致:
|
|
202
|
+
* SOME(data, "IS_MAIN != '1'") FILTER(data, "STATUS == '2' && AGE > 18")
|
|
203
|
+
* FIND(data, "ISEMPTY(REMARK)") EVERY(data, "IN(STATUS, '1,2')")
|
|
204
|
+
* 元素的字段名直接当变量用,另注入 item 指向元素本身(字段名含 # | 等非法标识符时用 item['字段#'] 取)。
|
|
205
|
+
* 不含运算符的字符串(如 "IS_MAIN")仍走 lodash 的属性简写(真值判断),条件对象 / 函数原样透传,旧配置不受影响。
|
|
206
|
+
*/
|
|
207
|
+
const CONDITION_EXPRESSION_RE = /[=<>!&|(]/
|
|
208
|
+
const IDENTIFIER_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/
|
|
209
|
+
const IDENTIFIER_ALL_RE = /[A-Za-z_$][A-Za-z0-9_$]*/g
|
|
210
|
+
// 关键字 / 字面量不能当形参名,注入会直接语法错误
|
|
211
|
+
const RESERVED_WORDS = ['true', 'false', 'null', 'undefined', 'NaN', 'Infinity', 'this', 'typeof', 'instanceof', 'in', 'of', 'new', 'delete', 'void', 'function', 'return', 'var', 'let', 'const', 'if', 'else', 'do', 'while', 'for', 'break', 'continue', 'switch', 'case', 'default', 'try', 'catch', 'finally', 'throw', 'class', 'super', 'yield', 'await', 'item']
|
|
212
|
+
const conditionCache = {}
|
|
213
|
+
const conditionErrorLogged = {}
|
|
214
|
+
|
|
215
|
+
// 条件表达式里可直接调用的公式函数(懒收集,取值发生在调用时,不受模块内定义顺序影响)
|
|
216
|
+
let conditionHelpers = null
|
|
217
|
+
const getConditionHelpers = () => {
|
|
218
|
+
if (!conditionHelpers) {
|
|
219
|
+
const library = {
|
|
220
|
+
EQ,
|
|
221
|
+
NE,
|
|
222
|
+
LT,
|
|
223
|
+
LE,
|
|
224
|
+
GT,
|
|
225
|
+
GE,
|
|
226
|
+
AND,
|
|
227
|
+
OR,
|
|
228
|
+
NOT,
|
|
229
|
+
IN,
|
|
230
|
+
IN_TEXT,
|
|
231
|
+
IF,
|
|
232
|
+
ISEMPTY,
|
|
233
|
+
ABS,
|
|
234
|
+
MAX,
|
|
235
|
+
MIN,
|
|
236
|
+
ROUND,
|
|
237
|
+
FLOOR,
|
|
238
|
+
CEIL,
|
|
239
|
+
MOD,
|
|
240
|
+
POW,
|
|
241
|
+
SUM,
|
|
242
|
+
SUBTRACT,
|
|
243
|
+
PRODUCT,
|
|
244
|
+
DIVIDED,
|
|
245
|
+
AVERAGE,
|
|
246
|
+
VALUE,
|
|
247
|
+
CONCATENATE,
|
|
248
|
+
LEN,
|
|
249
|
+
TEXT,
|
|
250
|
+
UPPER,
|
|
251
|
+
LOWER,
|
|
252
|
+
TRIM,
|
|
253
|
+
SUBSTRING,
|
|
254
|
+
REPLACE_STR,
|
|
255
|
+
NOW,
|
|
256
|
+
DATE_FORMAT,
|
|
257
|
+
FORMAT_DATE,
|
|
258
|
+
DATEDIF,
|
|
259
|
+
DATE_ADD,
|
|
260
|
+
DATE_SUBTRACT,
|
|
261
|
+
GET_DATE,
|
|
262
|
+
GET,
|
|
263
|
+
KEYS,
|
|
264
|
+
VALUES,
|
|
265
|
+
SIZE,
|
|
266
|
+
MAP,
|
|
267
|
+
JOIN,
|
|
268
|
+
NTH,
|
|
269
|
+
FILTER,
|
|
270
|
+
FIND,
|
|
271
|
+
EVERY,
|
|
272
|
+
SOME
|
|
273
|
+
}
|
|
274
|
+
conditionHelpers = { names: Object.keys(library), values: Object.values(library) }
|
|
275
|
+
}
|
|
276
|
+
return conditionHelpers
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// 按「表达式 + 元素字段签名」缓存编译结果,避免逐条 new Function
|
|
280
|
+
const compileCondition = (cacheKey, expression, fields) => {
|
|
281
|
+
if (!conditionCache[cacheKey]) {
|
|
282
|
+
const helpers = getConditionHelpers()
|
|
283
|
+
// 表达式里出现、但元素上没有的字段补成 undefined 形参,避免整条判断因 ReferenceError 静默失效
|
|
284
|
+
const missing = (expression.match(IDENTIFIER_ALL_RE) || []).filter(name => {
|
|
285
|
+
return !fields.includes(name) && !helpers.names.includes(name) && !RESERVED_WORDS.includes(name)
|
|
286
|
+
})
|
|
287
|
+
const placeholders = missing.filter((name, index) => missing.indexOf(name) === index)
|
|
288
|
+
try {
|
|
289
|
+
// eslint-disable-next-line no-new-func
|
|
290
|
+
conditionCache[cacheKey] = new Function(...helpers.names, ...placeholders, 'item', ...fields, `return (${expression})`)
|
|
291
|
+
conditionCache[cacheKey].placeholderCount = placeholders.length
|
|
292
|
+
} catch (e) {
|
|
293
|
+
console.error(`[formula] 条件表达式有语法错误:${expression}`, e)
|
|
294
|
+
const invalid = () => false
|
|
295
|
+
invalid.placeholderCount = 0
|
|
296
|
+
conditionCache[cacheKey] = invalid
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return conditionCache[cacheKey]
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// 条件参数归一化:条件表达式串编译成谓词,其余(属性名 / 条件对象 / 函数)原样交给 lodash
|
|
303
|
+
const toIteratee = (iteratee) => {
|
|
304
|
+
if (typeof iteratee !== 'string' || !CONDITION_EXPRESSION_RE.test(iteratee)) return iteratee
|
|
305
|
+
return (item) => {
|
|
306
|
+
const source = (item && typeof item === 'object') ? item : {}
|
|
307
|
+
const fields = Object.keys(source).filter(key => IDENTIFIER_RE.test(key))
|
|
308
|
+
const cacheKey = `${iteratee}\n${fields.join(',')}`
|
|
309
|
+
const compiled = compileCondition(cacheKey, iteratee, fields)
|
|
310
|
+
const helpers = getConditionHelpers()
|
|
311
|
+
const placeholders = new Array(compiled.placeholderCount || 0).fill(undefined)
|
|
312
|
+
try {
|
|
313
|
+
return !!compiled(...helpers.values, ...placeholders, item, ...fields.map(key => source[key]))
|
|
314
|
+
} catch (e) {
|
|
315
|
+
if (!conditionErrorLogged[cacheKey]) {
|
|
316
|
+
conditionErrorLogged[cacheKey] = true
|
|
317
|
+
console.error(`[formula] 条件表达式执行出错:${iteratee}`, e)
|
|
318
|
+
}
|
|
319
|
+
return false
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/** 集合函数 */
|
|
325
|
+
export const MAP = (array, iteratee) => {
|
|
326
|
+
return map(array, iteratee)
|
|
327
|
+
}
|
|
328
|
+
export const SIZE = (array) => {
|
|
329
|
+
return size(array)
|
|
330
|
+
}
|
|
331
|
+
export const JOIN = (array, separator = ',') => {
|
|
332
|
+
return array.join(separator)
|
|
333
|
+
}
|
|
334
|
+
export const ORDER_BY = (array, iteratee, orders) => {
|
|
335
|
+
if (typeof iteratee === 'string') {
|
|
336
|
+
iteratee = [iteratee]
|
|
337
|
+
}
|
|
338
|
+
if (typeof orders === 'string') {
|
|
339
|
+
orders = [orders]
|
|
340
|
+
}
|
|
341
|
+
return orderBy(array, iteratee, orders)
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export const FILTER = (array, iteratee) => {
|
|
345
|
+
return filter(array, toIteratee(iteratee))
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
export const FIND = (array, iteratee) => {
|
|
349
|
+
return find(array, toIteratee(iteratee))
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
export const NTH = (array, n) => {
|
|
353
|
+
return nth(array, n)
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export const EVERY = (array, iteratee) => {
|
|
357
|
+
return every(array, toIteratee(iteratee))
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
export const SOME = (array, iteratee) => {
|
|
361
|
+
return some(array, toIteratee(iteratee))
|
|
362
|
+
}
|
package/src/hljs-lite.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// 精简版 highlight.js:只注册 AI 对话里实际会出现的语言。
|
|
2
|
+
// 全量 import 'highlight.js' 会带上约 190 种语言(~900KB),而它用在 markdown-it 的**同步**
|
|
3
|
+
// highlight 回调里、不能改成动态 import —— 故改 core + 按需注册,保持同步的同时大幅瘦身。
|
|
4
|
+
//
|
|
5
|
+
// ⚠️ 为什么这个文件放在 packages/utils/ 而不是它唯一的调用方所在的
|
|
6
|
+
// packages/components/src/ai-chat-page/ 下(别顺手挪回去):
|
|
7
|
+
// vite.config.mjs 的 manualChunks 对任何路径匹配 packages/components/ 且目录不在
|
|
8
|
+
// lazyComponentDirs 白名单里的模块,一律强制 return 'frame'——这个判定只看模块的物理路径,
|
|
9
|
+
// 不看它是被静态 import 还是动态 import() 到达的。ai-chat-page 在 src/frame.eager.js 的
|
|
10
|
+
// eager 白名单里,所以本文件放在那儿时,即使只被 markdown.js 的 import() 动态引用,也会被强并
|
|
11
|
+
// 回 frame chunk,动态加载在产物层面形同虚设(frame-chunk-lazy 批次 B 复盘实测踩过一次)。
|
|
12
|
+
// packages/utils/ 不在 manualChunks 的任何强并规则里,rollup 会按「动态 import 边界」自然分包,
|
|
13
|
+
// 和 markdown-it 一起落进独立的懒加载 chunk。
|
|
14
|
+
import hljs from 'highlight.js/lib/core'
|
|
15
|
+
import json from 'highlight.js/lib/languages/json'
|
|
16
|
+
import javascript from 'highlight.js/lib/languages/javascript'
|
|
17
|
+
import typescript from 'highlight.js/lib/languages/typescript'
|
|
18
|
+
import xml from 'highlight.js/lib/languages/xml' // 同时覆盖 html
|
|
19
|
+
import css from 'highlight.js/lib/languages/css'
|
|
20
|
+
import sql from 'highlight.js/lib/languages/sql'
|
|
21
|
+
import java from 'highlight.js/lib/languages/java'
|
|
22
|
+
import python from 'highlight.js/lib/languages/python'
|
|
23
|
+
import bash from 'highlight.js/lib/languages/bash'
|
|
24
|
+
import yaml from 'highlight.js/lib/languages/yaml'
|
|
25
|
+
import markdown from 'highlight.js/lib/languages/markdown'
|
|
26
|
+
|
|
27
|
+
hljs.registerLanguage('json', json)
|
|
28
|
+
hljs.registerLanguage('javascript', javascript)
|
|
29
|
+
hljs.registerLanguage('typescript', typescript)
|
|
30
|
+
hljs.registerLanguage('xml', xml)
|
|
31
|
+
hljs.registerLanguage('html', xml)
|
|
32
|
+
hljs.registerLanguage('css', css)
|
|
33
|
+
hljs.registerLanguage('sql', sql)
|
|
34
|
+
hljs.registerLanguage('java', java)
|
|
35
|
+
hljs.registerLanguage('python', python)
|
|
36
|
+
hljs.registerLanguage('bash', bash)
|
|
37
|
+
hljs.registerLanguage('shell', bash)
|
|
38
|
+
hljs.registerLanguage('yaml', yaml)
|
|
39
|
+
hljs.registerLanguage('markdown', markdown)
|
|
40
|
+
|
|
41
|
+
export default hljs
|
package/src/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// jsencrypt 按需加载(四个调用点共用:Login / ClientLogin / PersonalInfo / Mine)。
|
|
2
|
+
//
|
|
3
|
+
// 为什么值得单独抽一个文件:jsencrypt 182.8KB 只在**提交密码那一刻**才需要,而 login 目录
|
|
4
|
+
// 在 src/frame.eager.js 白名单里(应用外壳要能渲染登录页),于是整个库被钉在首屏 chunk 里。
|
|
5
|
+
// 走 SSO 带 token 进来的用户永远执行不到这段代码,却要为它付下载+解析。
|
|
6
|
+
//
|
|
7
|
+
// ⚠️ 所有调用点必须**一次全改**:只要还剩一处静态 import,jsencrypt 就仍是首屏的「共享底」,
|
|
8
|
+
// 剩下几处的动态 import 会去蹭它,体积一点不降(本仓库在共享底上栽过,见
|
|
9
|
+
// docs/superpowers/specs/2026-08-04-frame-chunk-lazy-design.md 的踩坑记录)。
|
|
10
|
+
//
|
|
11
|
+
// 说明符沿用 'jsencrypt/bin/jsencrypt.min':vite.config.mjs 的 epxAliases() 把它别名到
|
|
12
|
+
// 'jsencrypt'(3.x 的 exports 没暴露 ./bin/* 子路径),绕过别名会解析失败。
|
|
13
|
+
//
|
|
14
|
+
// 调用方必须自己 try/catch 这个 Promise——失败不是理论情况,chunk 404(发版后旧页面还留着旧
|
|
15
|
+
// 清单)、广告拦截器拦子资源、断网都会走到这里,13 个调用点已经全部接住(Task 3 code review 修复)。
|
|
16
|
+
//
|
|
17
|
+
// ⚠️ 这里的 `pending = null` 只清了我们自己这层的记忆化,不代表下次调用一定会真的重新发请求:
|
|
18
|
+
// 浏览器原生 ES 模块加载器会把同一个 chunk URL 的失败结果缓存在当前页面的 module map 里,
|
|
19
|
+
// 同一 URL 再 `import()` 一次会直接复用失败结果、不会有新的网络请求(已实测:abort 一次后,
|
|
20
|
+
// 原地再点一次登录,Network 面板 0 次新请求)。也就是说"退一步重试"这件事,页面不刷新时
|
|
21
|
+
// 帮不上忙——真正能重试成功的路径是刷新页面(拿到新的 module map)。所以各调用点的报错文案
|
|
22
|
+
// 写的是「请刷新页面重试」而不是「请重试」。这层的 `pending = null` 仍然有意义:至少保证
|
|
23
|
+
// 「刷新前的这次失败」不会把后续同一会话里的其它调用点(比如换个入口)也一起卡死在缓存的
|
|
24
|
+
// rejected promise 上。
|
|
25
|
+
let pending = null
|
|
26
|
+
|
|
27
|
+
export default function loadJSEncrypt () {
|
|
28
|
+
if (pending) return pending
|
|
29
|
+
pending = import('jsencrypt/bin/jsencrypt.min')
|
|
30
|
+
.then(mod => mod.default || mod.JSEncrypt || mod)
|
|
31
|
+
.catch(err => {
|
|
32
|
+
pending = null
|
|
33
|
+
throw err
|
|
34
|
+
})
|
|
35
|
+
return pending
|
|
36
|
+
}
|
package/src/legacy.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import util from '@epxing/core/src/runtime-utils/util'
|
|
2
|
+
// axios / mixins 已随 T17 迁 @epxing/core;barrel 暂经相对路径引用真身保持导出面不变(T23 收敛 barrel)
|
|
3
|
+
// ADR-009:跨包引用必须用裸说明符(单包构建外置为 @epxing/core 依赖;相对路径会把 core 打进 utils 产物)
|
|
4
|
+
import axios from '@epxing/core/src/axios'
|
|
5
|
+
import Config from './Config'
|
|
6
|
+
import FieldFactory from '@epxing/core/src/runtime-utils/fieldFactory'
|
|
7
|
+
import Meta from '@epxing/core/src/runtime-utils/meta'
|
|
8
|
+
import Page from './page'
|
|
9
|
+
import http from '@epxing/core/src/api'
|
|
10
|
+
import mixin from '@epxing/core/src/mixins/global'
|
|
11
|
+
// import router from '@epxing/core/src/router'
|
|
12
|
+
import PdfViewer from '@epxing/core/src/runtime-utils/pdf.viewer'
|
|
13
|
+
// 统一的 #{path} 占位符解析(见 placeholder.js 头注释:存量有 8 种不同语义的复制品)
|
|
14
|
+
import placeholder from './placeholder'
|
|
15
|
+
const pdfViewer = new PdfViewer()
|
|
16
|
+
export {
|
|
17
|
+
axios,
|
|
18
|
+
Config,
|
|
19
|
+
FieldFactory,
|
|
20
|
+
Meta,
|
|
21
|
+
Page,
|
|
22
|
+
util,
|
|
23
|
+
http,
|
|
24
|
+
mixin,
|
|
25
|
+
// router,
|
|
26
|
+
PdfViewer,
|
|
27
|
+
pdfViewer,
|
|
28
|
+
placeholder
|
|
29
|
+
}
|