@gct-paas/design 0.1.4-dev.16 → 0.1.4-dev.18
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/index.min.css +1 -1
- package/dist/loader.esm.min.js +1 -1
- package/es/components/design-view-layout/design-view-layout.css +11 -11
- package/es/components/design-view-layout/design-view-layout.mjs +1 -1
- package/es/components/field-transfer/components/Transfer/AdvancedTransfer.mjs +6 -1
- package/es/components/field-transfer/components/Transfer/TransferTree.mjs +6 -1
- package/es/hooks/design-view/page/usePage.mjs +1 -1
- package/es/hooks/design-view/useDesigner.d.ts +1 -1
- package/es/hooks/design-view/useDesigner.mjs +6 -1
- package/es/hooks/design-view/widget/useSelectedWidget.d.ts +1 -1
- package/es/hooks/design-view/widget/useSelectedWidget.mjs +31 -9
- package/es/index.mjs +2 -1
- package/es/schema/common-config/button-editor-config.mjs +4 -2
- package/es/schema/common-config/common-field-editor-config.d.ts +1 -1
- package/es/schema/field/card-list-field.d.ts +4 -0
- package/es/schema/field/card-list-field.mjs +269 -0
- package/es/schema/field/data-table-column.d.ts +81 -0
- package/es/schema/field/data-table-column.mjs +221 -0
- package/es/schema/field/descriptions-field.d.ts +3 -0
- package/es/schema/field/index.d.ts +14 -0
- package/es/schema/field/index.mjs +66 -0
- package/es/schema/index.d.ts +1 -0
- package/es/schema/index.mjs +1 -0
- package/es/utils/design-plugin-pkg-util/design-plugin-pkg-util.d.ts +1 -1
- package/es/utils/design-plugin-pkg-util/design-plugin-pkg-util.mjs +1 -29
- package/es/utils/index.mjs +1 -0
- package/es/utils/transform-js/index.mjs +1 -0
- package/es/utils/transform-js/transform-js.d.ts +7 -6
- package/es/utils/transform-js/transform-js.mjs +62 -68
- package/package.json +8 -6
- package/dist/assets/transform-js.worker-jL3ThXZ5.js +0 -172438
- package/es/assets/transform-js.worker-CI2jwZbi.js +0 -230912
- package/es/utils/transform-js/transform-js.worker.d.ts +0 -1
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { fixedAlignEditor } from "../common-config/column-editor-config.mjs";
|
|
2
|
+
import "lodash-es";
|
|
3
|
+
import { BindCmpStyleEnum, FIELD_TYPE, FormComponents, Platform, ProgressTypeEnum, PropGroup, StyleGroup, TagTypeEnum, TextDecoration, buildShortUUID, fixedAlignENUM, tableColumnWidthEnum, tagEnum } from "@gct-paas/core";
|
|
4
|
+
import "@gct-paas/schema";
|
|
5
|
+
fixedAlignENUM.NONE, tableColumnWidthEnum.ATUO;
|
|
6
|
+
function webRunPropEditor(list) {
|
|
7
|
+
return [
|
|
8
|
+
...list,
|
|
9
|
+
...fixedAlignEditor,
|
|
10
|
+
{
|
|
11
|
+
component: "radio-display-editor",
|
|
12
|
+
name: "displayType",
|
|
13
|
+
label: "sys.pageDesigner.displayStyle",
|
|
14
|
+
group: PropGroup.SHOW,
|
|
15
|
+
_config: { options: [{
|
|
16
|
+
icon: "paperclip",
|
|
17
|
+
label: "sys.pageDesigner.oneFile",
|
|
18
|
+
value: "concise"
|
|
19
|
+
}, {
|
|
20
|
+
icon: "fujian",
|
|
21
|
+
label: "sys.pageDesigner.fileName",
|
|
22
|
+
value: "more"
|
|
23
|
+
}] },
|
|
24
|
+
hidden(widget) {
|
|
25
|
+
if (widget.props.fieldType !== FIELD_TYPE.ATTACHMENT) return true;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
component: "max-display-editor",
|
|
30
|
+
name: "displayMaxNum",
|
|
31
|
+
label: "sys.pageDesigner.displayMaxNum",
|
|
32
|
+
group: PropGroup.SHOW,
|
|
33
|
+
_config: {
|
|
34
|
+
min: 1,
|
|
35
|
+
max: 20,
|
|
36
|
+
precision: 0
|
|
37
|
+
},
|
|
38
|
+
hidden(widget) {
|
|
39
|
+
if (widget.props.fieldType !== FIELD_TYPE.IMAGE) return true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
var styleUtils = {
|
|
45
|
+
columnWidthEditor: [{
|
|
46
|
+
component: "column-width-editor",
|
|
47
|
+
name: {
|
|
48
|
+
number: "columnwidth",
|
|
49
|
+
type: "columnwidthConfigure"
|
|
50
|
+
},
|
|
51
|
+
label: "",
|
|
52
|
+
group: StyleGroup.LAYOUT,
|
|
53
|
+
_config: { columnWidthEnum: [tableColumnWidthEnum.ATUO, tableColumnWidthEnum.ENUMERATION] },
|
|
54
|
+
hidden(widget) {
|
|
55
|
+
return widget.platform == Platform.MOBILE;
|
|
56
|
+
}
|
|
57
|
+
}, {
|
|
58
|
+
component: "column-width-editor",
|
|
59
|
+
name: {
|
|
60
|
+
percentage: "columnwidth",
|
|
61
|
+
type: "columnwidthConfigure"
|
|
62
|
+
},
|
|
63
|
+
label: "",
|
|
64
|
+
group: StyleGroup.LAYOUT,
|
|
65
|
+
_config: { columnWidthEnum: [tableColumnWidthEnum.ATUO, tableColumnWidthEnum.PERCENTAGE] },
|
|
66
|
+
hidden(widget) {
|
|
67
|
+
return widget.platform === Platform.WEB || widget.platform === Platform.PAD;
|
|
68
|
+
}
|
|
69
|
+
}],
|
|
70
|
+
labelFontEditor: [{
|
|
71
|
+
component: "font-editor",
|
|
72
|
+
name: "labelFont",
|
|
73
|
+
label: "sys.name",
|
|
74
|
+
group: StyleGroup.STYLE,
|
|
75
|
+
hidden(widget) {
|
|
76
|
+
return widget.platform === Platform.PAD;
|
|
77
|
+
}
|
|
78
|
+
}],
|
|
79
|
+
contentFontEditor: [{
|
|
80
|
+
component: "font-editor",
|
|
81
|
+
name: "contentFont",
|
|
82
|
+
label: "sys.content",
|
|
83
|
+
group: StyleGroup.STYLE,
|
|
84
|
+
hidden(widget) {
|
|
85
|
+
if (widget.props?.fieldType == FIELD_TYPE.DATA_TABLE_FORMULA || widget.type == FormComponents.DataTableFormula) return true;
|
|
86
|
+
return [
|
|
87
|
+
FIELD_TYPE.ATTACHMENT,
|
|
88
|
+
FIELD_TYPE.IMAGE,
|
|
89
|
+
FIELD_TYPE.SIGNATURE
|
|
90
|
+
].includes(widget.props.fieldType);
|
|
91
|
+
},
|
|
92
|
+
_config: { hiddenColor: true }
|
|
93
|
+
}],
|
|
94
|
+
tagEditor: [{
|
|
95
|
+
component: "boolean-editor",
|
|
96
|
+
name: "tagStyleOpen",
|
|
97
|
+
label: "sys.pageDesigner.tagStyle",
|
|
98
|
+
group: StyleGroup.STYLE,
|
|
99
|
+
hidden(widget) {
|
|
100
|
+
if ([FIELD_TYPE.BOOLEAN, FIELD_TYPE.EXPRESSION].includes(widget.props.fieldType) && widget.props.bindCompStyleType === BindCmpStyleEnum.CMP_BOOLEAN) return true;
|
|
101
|
+
if (widget.props?.fieldType == FIELD_TYPE.DATA_TABLE_FORMULA || widget.type == FormComponents.DataTableFormula) return true;
|
|
102
|
+
return [
|
|
103
|
+
FIELD_TYPE.ATTACHMENT,
|
|
104
|
+
FIELD_TYPE.IMAGE,
|
|
105
|
+
FIELD_TYPE.RDO_REF,
|
|
106
|
+
FIELD_TYPE.SIGNATURE
|
|
107
|
+
].includes(widget.props.fieldType);
|
|
108
|
+
},
|
|
109
|
+
_config: {
|
|
110
|
+
showType: "checkbox",
|
|
111
|
+
options: [{
|
|
112
|
+
label: "sys.pageDesigner.configureContentAsLabelStyle",
|
|
113
|
+
value: true
|
|
114
|
+
}]
|
|
115
|
+
},
|
|
116
|
+
changeCallback: (widget, value) => {
|
|
117
|
+
if (value && !widget.style.tagStyle) widget.style.tagStyle = {
|
|
118
|
+
color: "",
|
|
119
|
+
tagType: TagTypeEnum.RADIUS
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}, {
|
|
123
|
+
component: "tag-editor",
|
|
124
|
+
name: "tagStyle",
|
|
125
|
+
group: StyleGroup.STYLE,
|
|
126
|
+
hidden: (widget) => {
|
|
127
|
+
if ([FIELD_TYPE.BOOLEAN, FIELD_TYPE.EXPRESSION].includes(widget.props.fieldType) && widget.props.bindCompStyleType === BindCmpStyleEnum.CMP_BOOLEAN) return true;
|
|
128
|
+
if ([
|
|
129
|
+
FIELD_TYPE.ATTACHMENT,
|
|
130
|
+
FIELD_TYPE.IMAGE,
|
|
131
|
+
FIELD_TYPE.RDO_REF
|
|
132
|
+
].includes(widget.props.fieldType)) return true;
|
|
133
|
+
if (widget.props?.fieldType == FIELD_TYPE.DATA_TABLE_FORMULA || widget.type == FormComponents.DataTableFormula) return true;
|
|
134
|
+
return !widget.style.tagStyleOpen;
|
|
135
|
+
}
|
|
136
|
+
}],
|
|
137
|
+
columnFormulaStyleByRule: [{
|
|
138
|
+
component: "column-tag-editor",
|
|
139
|
+
name: "columnFontStyleByRule",
|
|
140
|
+
label: "",
|
|
141
|
+
group: StyleGroup.STYLE,
|
|
142
|
+
_config: { generator: getFontStyleRule },
|
|
143
|
+
hidden(widget) {
|
|
144
|
+
return !(widget.props?.fieldType == FIELD_TYPE.DATA_TABLE_FORMULA || widget.type == FormComponents.DataTableFormula);
|
|
145
|
+
}
|
|
146
|
+
}, {
|
|
147
|
+
component: "column-backgound-editor",
|
|
148
|
+
name: "columnBackgroundByRule",
|
|
149
|
+
label: "",
|
|
150
|
+
group: StyleGroup.BACKGROUND,
|
|
151
|
+
_config: { generator: getBackgroundRule },
|
|
152
|
+
hidden(widget) {
|
|
153
|
+
return !(widget.props?.fieldType == FIELD_TYPE.DATA_TABLE_FORMULA || widget.type == FormComponents.DataTableFormula);
|
|
154
|
+
}
|
|
155
|
+
}]
|
|
156
|
+
};
|
|
157
|
+
function runStyleEditor() {
|
|
158
|
+
return [
|
|
159
|
+
...styleUtils.columnWidthEditor,
|
|
160
|
+
...styleUtils.contentFontEditor,
|
|
161
|
+
...styleUtils.tagEditor,
|
|
162
|
+
...styleUtils.columnFormulaStyleByRule
|
|
163
|
+
];
|
|
164
|
+
}
|
|
165
|
+
function mobileRunSubTableStyleEditor() {
|
|
166
|
+
return [
|
|
167
|
+
{
|
|
168
|
+
component: "column-width-editor",
|
|
169
|
+
name: {
|
|
170
|
+
number: "columnwidth",
|
|
171
|
+
type: "columnwidthConfigure"
|
|
172
|
+
},
|
|
173
|
+
label: "",
|
|
174
|
+
group: StyleGroup.LAYOUT,
|
|
175
|
+
_config: { columnWidthEnum: [tableColumnWidthEnum.ATUO, tableColumnWidthEnum.ENUMERATION] },
|
|
176
|
+
hidden(widget) {
|
|
177
|
+
return widget.platform == Platform.MOBILE;
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
...styleUtils.labelFontEditor,
|
|
181
|
+
...styleUtils.contentFontEditor,
|
|
182
|
+
...styleUtils.tagEditor,
|
|
183
|
+
...styleUtils.columnFormulaStyleByRule
|
|
184
|
+
];
|
|
185
|
+
}
|
|
186
|
+
/**添加样式规则 */
|
|
187
|
+
function getFontStyleRule() {
|
|
188
|
+
return {
|
|
189
|
+
id: buildShortUUID("content"),
|
|
190
|
+
displayRule: "",
|
|
191
|
+
contentFont: {
|
|
192
|
+
fontSize: "",
|
|
193
|
+
bold: false,
|
|
194
|
+
italic: false,
|
|
195
|
+
textDecoration: TextDecoration.NONE,
|
|
196
|
+
color: "",
|
|
197
|
+
align: "left"
|
|
198
|
+
},
|
|
199
|
+
tagStyle: {
|
|
200
|
+
color: "#0DAA9C",
|
|
201
|
+
tagType: TagTypeEnum.RADIUS,
|
|
202
|
+
progressBarType: ProgressTypeEnum.CIRCLE
|
|
203
|
+
},
|
|
204
|
+
progressStyle: {
|
|
205
|
+
color: "#0DAA9C",
|
|
206
|
+
tagType: ProgressTypeEnum.CIRCLE
|
|
207
|
+
},
|
|
208
|
+
tagType: tagEnum.TAG,
|
|
209
|
+
tagStyleOpen: false
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**添加背景下规则 */
|
|
213
|
+
function getBackgroundRule() {
|
|
214
|
+
return {
|
|
215
|
+
id: buildShortUUID("background"),
|
|
216
|
+
displayRule: "",
|
|
217
|
+
backgroundColor: ""
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
//#endregion
|
|
221
|
+
export { mobileRunSubTableStyleEditor, runStyleEditor, webRunPropEditor };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LowCodeWidget } from '@gct-paas/schema';
|
|
2
|
+
export declare class FieldOverrideUtil {
|
|
3
|
+
static tableVTablePropEditor(selectedRef: LowCodeWidget.BasicSchema, defaultList: LowCodeWidget.PropEditor[]): LowCodeWidget.PropEditor[];
|
|
4
|
+
/**
|
|
5
|
+
* gct-paas-design src/widgets/web/other/table-select/table-select.ts 里边覆写这个方法
|
|
6
|
+
*
|
|
7
|
+
* @static
|
|
8
|
+
* @param {LowCodeWidget.BasicSchema} selectedRef
|
|
9
|
+
* @param {string} [type]
|
|
10
|
+
* @return {*} {LowCodeWidget.PropEditor[]}
|
|
11
|
+
*/
|
|
12
|
+
static runTableSelectPropEditor(selectedRef: LowCodeWidget.BasicSchema, type?: string): LowCodeWidget.PropEditor[];
|
|
13
|
+
}
|
|
14
|
+
export declare function setupOverride(): void;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { runPropEditor } from "./card-list-field.mjs";
|
|
2
|
+
import { mobileRunSubTableStyleEditor, runStyleEditor, webRunPropEditor } from "./data-table-column.mjs";
|
|
3
|
+
import { MaterialEnum, Platform, SUB_TABLE_EDIT_MODE } from "@gct-paas/core";
|
|
4
|
+
import { FieldEditorOverrideRegistry, padVTableSupportEditFieldTypes } from "@gct-paas/schema";
|
|
5
|
+
//#region src/schema/field/index.ts
|
|
6
|
+
//! 此文件不要写其他逻辑,这里是旧模式的兼容性写法
|
|
7
|
+
var FieldOverrideUtil = class {
|
|
8
|
+
static tableVTablePropEditor(selectedRef, defaultList) {
|
|
9
|
+
const { platform } = selectedRef;
|
|
10
|
+
if (platform === Platform.PAD) {
|
|
11
|
+
const fieldType = selectedRef.props.fieldType;
|
|
12
|
+
return padVTableSupportEditFieldTypes.includes(fieldType) ? webRunPropEditor(defaultList) : runPropEditor(selectedRef, defaultList, false);
|
|
13
|
+
}
|
|
14
|
+
return platform === Platform.WEB ? webRunPropEditor(defaultList) : runPropEditor(selectedRef, defaultList, false);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* gct-paas-design src/widgets/web/other/table-select/table-select.ts 里边覆写这个方法
|
|
18
|
+
*
|
|
19
|
+
* @static
|
|
20
|
+
* @param {LowCodeWidget.BasicSchema} selectedRef
|
|
21
|
+
* @param {string} [type]
|
|
22
|
+
* @return {*} {LowCodeWidget.PropEditor[]}
|
|
23
|
+
*/
|
|
24
|
+
static runTableSelectPropEditor(selectedRef, type) {
|
|
25
|
+
console.log("table-select-field", selectedRef, type);
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
function setupOverride() {
|
|
30
|
+
console.debug("正在注册字段编辑器覆写配置");
|
|
31
|
+
FieldEditorOverrideRegistry.register(MaterialEnum.MaterialTableField, {
|
|
32
|
+
propEditor: (selectedRef, defaultList) => {
|
|
33
|
+
return FieldOverrideUtil.tableVTablePropEditor(selectedRef, defaultList);
|
|
34
|
+
},
|
|
35
|
+
styleEditor: (_selectedRef, _defaultWidget) => runStyleEditor()
|
|
36
|
+
});
|
|
37
|
+
FieldEditorOverrideRegistry.register(MaterialEnum.MaterialEmbedTableField, {
|
|
38
|
+
propEditor: (selectedRef, defaultList) => {
|
|
39
|
+
return FieldOverrideUtil.tableVTablePropEditor(selectedRef, defaultList);
|
|
40
|
+
},
|
|
41
|
+
styleEditor: (_selectedRef, _defaultWidget) => runStyleEditor()
|
|
42
|
+
});
|
|
43
|
+
FieldEditorOverrideRegistry.register(MaterialEnum.MaterialSubTableField, {
|
|
44
|
+
propEditor: (selectedRef, defaultList, preCompInfo) => {
|
|
45
|
+
if (preCompInfo && preCompInfo.props?.editMode === SUB_TABLE_EDIT_MODE.MODAL) return FieldOverrideUtil.runTableSelectPropEditor(selectedRef, "subTable2Field");
|
|
46
|
+
const { platform } = selectedRef;
|
|
47
|
+
if (platform === Platform.PAD) {
|
|
48
|
+
const fieldType = selectedRef.props.fieldType;
|
|
49
|
+
return padVTableSupportEditFieldTypes.includes(fieldType) ? webRunPropEditor(defaultList) : runPropEditor(selectedRef, defaultList, false);
|
|
50
|
+
}
|
|
51
|
+
if (platform === Platform.WEB) return webRunPropEditor(defaultList);
|
|
52
|
+
},
|
|
53
|
+
styleEditor: (selectedRef, _defaultWidget) => {
|
|
54
|
+
return selectedRef.platform === Platform.WEB ? runStyleEditor() : mobileRunSubTableStyleEditor();
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
FieldEditorOverrideRegistry.register(MaterialEnum.MaterialTableSelectField, {
|
|
58
|
+
propEditor: (selectedRef, _defaultList) => {
|
|
59
|
+
return FieldOverrideUtil.runTableSelectPropEditor(selectedRef);
|
|
60
|
+
},
|
|
61
|
+
styleEditor: (_selectedRef, _defaultWidget) => runStyleEditor()
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
setupOverride();
|
|
65
|
+
//#endregion
|
|
66
|
+
export { FieldOverrideUtil, setupOverride };
|
package/es/schema/index.d.ts
CHANGED
package/es/schema/index.mjs
CHANGED
|
@@ -15,7 +15,7 @@ export declare class DesignPluginPgkUtil extends PluginPgkUtil {
|
|
|
15
15
|
* @param {Platform} platform
|
|
16
16
|
* @returns {*} {Promise<LoadPluginResult>}
|
|
17
17
|
*/
|
|
18
|
-
static loadDesignPlugin(_app: App,
|
|
18
|
+
static loadDesignPlugin(_app: App, _platform: Platform, _kit?: string[]): Promise<LoadPluginResult>;
|
|
19
19
|
/**
|
|
20
20
|
* 加载设计态中,已经被从配置中移除的插件
|
|
21
21
|
*
|
|
@@ -15,35 +15,7 @@ var DesignPluginPgkUtil = class extends PluginPgkUtil {
|
|
|
15
15
|
* @param {Platform} platform
|
|
16
16
|
* @returns {*} {Promise<LoadPluginResult>}
|
|
17
17
|
*/
|
|
18
|
-
static async loadDesignPlugin(_app,
|
|
19
|
-
try {
|
|
20
|
-
const result = await this.loadPlugin(PluginModeEnum.DESIGN, platform, kit);
|
|
21
|
-
const [configs, moduleMap] = result;
|
|
22
|
-
configs.forEach((config) => {
|
|
23
|
-
config.plugins.forEach((plugin) => {
|
|
24
|
-
const module = moduleMap[plugin.key];
|
|
25
|
-
if (!module) {
|
|
26
|
-
console.error(`${plugin.key} 插件加载失败,请检查插件配置是否正确`);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
switch (platform) {
|
|
30
|
-
case Platform.MOBILE:
|
|
31
|
-
if (module.mobile) _gct.register.designer.mobile.register(plugin.key, () => new module.mobile());
|
|
32
|
-
break;
|
|
33
|
-
case Platform.PAD:
|
|
34
|
-
if (module.mobile) _gct.register.designer.pad.register(plugin.key, () => new module.mobile());
|
|
35
|
-
break;
|
|
36
|
-
case Platform.WEB:
|
|
37
|
-
if (module.web) _gct.register.designer.web.register(plugin.key, () => new module.web());
|
|
38
|
-
break;
|
|
39
|
-
default: console.warn(`未知平台 ${platform},无法注册插件 ${plugin.key}`);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
return result;
|
|
44
|
-
} catch (error) {
|
|
45
|
-
console.error(error);
|
|
46
|
-
}
|
|
18
|
+
static async loadDesignPlugin(_app, _platform, _kit = []) {
|
|
47
19
|
return [[], {}];
|
|
48
20
|
}
|
|
49
21
|
/**
|
package/es/utils/index.mjs
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./transform-js.mjs";
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
+
import { ExportMethod } from '@gct-paas/schema';
|
|
1
2
|
/**
|
|
2
|
-
* 将 TypeScript/ES 代码编译为可在运行时执行的 JS
|
|
3
|
-
* @param code - 源代码字符串(支持 TS
|
|
3
|
+
* 将 TypeScript/ES 代码编译为可在运行时执行的 JS 字符串
|
|
4
|
+
* @param code - 源代码字符串(支持 TS 语法,可为 URI 编码)
|
|
4
5
|
* @param needExport - 是否在末尾追加 `return exports`,默认为 true
|
|
5
|
-
* @returns 编译后可执行的 JS
|
|
6
|
+
* @returns 编译后可执行的 JS 字符串
|
|
6
7
|
*/
|
|
7
|
-
export declare function buildRunJs(code: string, needExport?: boolean): Promise<string
|
|
8
|
+
export declare function buildRunJs(code: string, needExport?: boolean): Promise<string>;
|
|
8
9
|
/**
|
|
9
|
-
*
|
|
10
|
+
* 解析代码字符串并提取所有命名导出函数的方法映射
|
|
10
11
|
* @param code - 包含命名导出函数的代码字符串
|
|
11
12
|
* @returns 以函数名为键的方法映射对象,解析失败时返回空对象
|
|
12
13
|
*/
|
|
13
|
-
export declare function initMethodMap(code: string): Promise<
|
|
14
|
+
export declare function initMethodMap(code: string): Promise<ExportMethod>;
|
|
@@ -1,82 +1,76 @@
|
|
|
1
1
|
//#region src/utils/transform-js/transform-js.ts
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var _worker = null;
|
|
10
|
-
/** 等待响应的请求映射表,key 为请求 ID */
|
|
11
|
-
var _pendingMap = /* @__PURE__ */ new Map();
|
|
12
|
-
/**
|
|
13
|
-
* 获取(或创建)Worker 单例
|
|
14
|
-
* @returns Worker 实例
|
|
15
|
-
*/
|
|
16
|
-
function getWorker() {
|
|
17
|
-
if (!_worker) {
|
|
18
|
-
_worker = new Worker(new URL(
|
|
19
|
-
/* @vite-ignore */
|
|
20
|
-
"/assets/transform-js.worker-CI2jwZbi.js",
|
|
21
|
-
"" + import.meta.url
|
|
22
|
-
), { type: "module" });
|
|
23
|
-
_worker.onmessage = (event) => {
|
|
24
|
-
const { id, result, error } = event.data;
|
|
25
|
-
const pending = _pendingMap.get(id);
|
|
26
|
-
if (!pending) return;
|
|
27
|
-
_pendingMap.delete(id);
|
|
28
|
-
if (error !== void 0) pending.reject(new Error(error));
|
|
29
|
-
else pending.resolve(result);
|
|
30
|
-
};
|
|
31
|
-
_worker.onerror = (event) => {
|
|
32
|
-
const err = new Error(event.message);
|
|
33
|
-
_pendingMap.forEach((pending) => pending.reject(err));
|
|
34
|
-
_pendingMap.clear();
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
return _worker;
|
|
2
|
+
var _babel = null;
|
|
3
|
+
var _esprima = null;
|
|
4
|
+
var _estraverse = null;
|
|
5
|
+
var _escodegen = null;
|
|
6
|
+
async function loadBabel() {
|
|
7
|
+
if (!_babel) _babel = await import("@babel/standalone");
|
|
8
|
+
return _babel;
|
|
38
9
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
reject
|
|
51
|
-
});
|
|
52
|
-
const request = {
|
|
53
|
-
id,
|
|
54
|
-
type,
|
|
55
|
-
payload
|
|
56
|
-
};
|
|
57
|
-
console.log("Posting task to worker:", request, getWorker);
|
|
58
|
-
resolve(null);
|
|
59
|
-
});
|
|
10
|
+
async function loadAstModules() {
|
|
11
|
+
if (!_esprima) [_esprima, _estraverse, _escodegen] = await Promise.all([
|
|
12
|
+
import("esprima-next"),
|
|
13
|
+
import("estraverse"),
|
|
14
|
+
import("escodegen")
|
|
15
|
+
]);
|
|
16
|
+
return {
|
|
17
|
+
esprima: _esprima,
|
|
18
|
+
estraverse: _estraverse,
|
|
19
|
+
escodegen: _escodegen
|
|
20
|
+
};
|
|
60
21
|
}
|
|
61
22
|
/**
|
|
62
|
-
* 将 TypeScript/ES 代码编译为可在运行时执行的 JS
|
|
63
|
-
* @param code - 源代码字符串(支持 TS
|
|
23
|
+
* 将 TypeScript/ES 代码编译为可在运行时执行的 JS 字符串
|
|
24
|
+
* @param code - 源代码字符串(支持 TS 语法,可为 URI 编码)
|
|
64
25
|
* @param needExport - 是否在末尾追加 `return exports`,默认为 true
|
|
65
|
-
* @returns 编译后可执行的 JS
|
|
26
|
+
* @returns 编译后可执行的 JS 字符串
|
|
66
27
|
*/
|
|
67
|
-
function buildRunJs(code, needExport = true) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
28
|
+
async function buildRunJs(code, needExport = true) {
|
|
29
|
+
const babel = await loadBabel();
|
|
30
|
+
let decoded = code;
|
|
31
|
+
try {
|
|
32
|
+
decoded = decodeURIComponent(code);
|
|
33
|
+
} catch {
|
|
34
|
+
console.warn("decodeURIComponent failed, using original code");
|
|
35
|
+
}
|
|
36
|
+
return (babel.transform(decoded, {
|
|
37
|
+
filename: "inline.ts",
|
|
38
|
+
sourceMaps: false,
|
|
39
|
+
compact: false,
|
|
40
|
+
presets: [["typescript", {
|
|
41
|
+
allowDeclareFields: true,
|
|
42
|
+
optimizeConstEnums: true
|
|
43
|
+
}], ["env", {
|
|
44
|
+
targets: { browsers: "chrome >= 89" },
|
|
45
|
+
modules: "commonjs"
|
|
46
|
+
}]]
|
|
47
|
+
})?.code ?? "") + (needExport ? "\n return exports" : "");
|
|
72
48
|
}
|
|
73
49
|
/**
|
|
74
|
-
*
|
|
50
|
+
* 解析代码字符串并提取所有命名导出函数的方法映射
|
|
75
51
|
* @param code - 包含命名导出函数的代码字符串
|
|
76
52
|
* @returns 以函数名为键的方法映射对象,解析失败时返回空对象
|
|
77
53
|
*/
|
|
78
|
-
function initMethodMap(code) {
|
|
79
|
-
|
|
54
|
+
async function initMethodMap(code) {
|
|
55
|
+
const { esprima, estraverse, escodegen } = await loadAstModules();
|
|
56
|
+
try {
|
|
57
|
+
const ast = esprima.parse(code, { sourceType: "module" });
|
|
58
|
+
const methods = {};
|
|
59
|
+
estraverse.traverse(ast, { enter(node) {
|
|
60
|
+
if (node.type !== "ExportNamedDeclaration") return;
|
|
61
|
+
const { name } = node.declaration.id;
|
|
62
|
+
const { params } = node.declaration;
|
|
63
|
+
methods[name] = {
|
|
64
|
+
type: "EXPORT_Function",
|
|
65
|
+
source: escodegen.generate(node),
|
|
66
|
+
params: params?.map((p) => p.name).join(",") ?? ""
|
|
67
|
+
};
|
|
68
|
+
} });
|
|
69
|
+
return methods;
|
|
70
|
+
} catch (error) {
|
|
71
|
+
console.error(error);
|
|
72
|
+
return {};
|
|
73
|
+
}
|
|
80
74
|
}
|
|
81
75
|
//#endregion
|
|
82
76
|
export { buildRunJs, initMethodMap };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gct-paas/design",
|
|
3
|
-
"version": "0.1.4-dev.
|
|
3
|
+
"version": "0.1.4-dev.18",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "paas 平台设计界面底包",
|
|
6
6
|
"loader": "dist/loader.esm.min.js",
|
|
@@ -44,11 +44,12 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@ant-design/icons-vue": "^7.0.1",
|
|
46
46
|
"@babel/core": "^7.29.0",
|
|
47
|
+
"@babel/standalone": "^7.29.2",
|
|
47
48
|
"@gct-paas/api": "^0.1.2-dev.1",
|
|
48
|
-
"@gct-paas/core": "0.1.4-dev.
|
|
49
|
-
"@gct-paas/core-web": "0.1.4-dev.
|
|
50
|
-
"@gct-paas/schema": "0.1.4-dev.
|
|
51
|
-
"@gct-paas/scss": "0.1.4-dev.
|
|
49
|
+
"@gct-paas/core": "0.1.4-dev.18",
|
|
50
|
+
"@gct-paas/core-web": "0.1.4-dev.18",
|
|
51
|
+
"@gct-paas/schema": "0.1.4-dev.18",
|
|
52
|
+
"@gct-paas/scss": "0.1.4-dev.18",
|
|
52
53
|
"@jsplumb/browser-ui": "^6.2.10",
|
|
53
54
|
"@vueuse/core": "^14.1.0",
|
|
54
55
|
"ant-design-vue": "~3.2.20",
|
|
@@ -67,6 +68,7 @@
|
|
|
67
68
|
},
|
|
68
69
|
"devDependencies": {
|
|
69
70
|
"@types/babel__core": "^7.20.5",
|
|
71
|
+
"@types/babel__standalone": "^7.1.9",
|
|
70
72
|
"@types/estraverse": "^5.1.7"
|
|
71
73
|
},
|
|
72
74
|
"peerDependencies": {
|
|
@@ -77,5 +79,5 @@
|
|
|
77
79
|
"@gct-paas/scss": "*",
|
|
78
80
|
"vue": ">=3"
|
|
79
81
|
},
|
|
80
|
-
"gitHead": "
|
|
82
|
+
"gitHead": "d79e561695bc9a4ff14b7c1bc735a595a32ed3e9"
|
|
81
83
|
}
|