@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.
Files changed (33) hide show
  1. package/dist/index.min.css +1 -1
  2. package/dist/loader.esm.min.js +1 -1
  3. package/es/components/design-view-layout/design-view-layout.css +11 -11
  4. package/es/components/design-view-layout/design-view-layout.mjs +1 -1
  5. package/es/components/field-transfer/components/Transfer/AdvancedTransfer.mjs +6 -1
  6. package/es/components/field-transfer/components/Transfer/TransferTree.mjs +6 -1
  7. package/es/hooks/design-view/page/usePage.mjs +1 -1
  8. package/es/hooks/design-view/useDesigner.d.ts +1 -1
  9. package/es/hooks/design-view/useDesigner.mjs +6 -1
  10. package/es/hooks/design-view/widget/useSelectedWidget.d.ts +1 -1
  11. package/es/hooks/design-view/widget/useSelectedWidget.mjs +31 -9
  12. package/es/index.mjs +2 -1
  13. package/es/schema/common-config/button-editor-config.mjs +4 -2
  14. package/es/schema/common-config/common-field-editor-config.d.ts +1 -1
  15. package/es/schema/field/card-list-field.d.ts +4 -0
  16. package/es/schema/field/card-list-field.mjs +269 -0
  17. package/es/schema/field/data-table-column.d.ts +81 -0
  18. package/es/schema/field/data-table-column.mjs +221 -0
  19. package/es/schema/field/descriptions-field.d.ts +3 -0
  20. package/es/schema/field/index.d.ts +14 -0
  21. package/es/schema/field/index.mjs +66 -0
  22. package/es/schema/index.d.ts +1 -0
  23. package/es/schema/index.mjs +1 -0
  24. package/es/utils/design-plugin-pkg-util/design-plugin-pkg-util.d.ts +1 -1
  25. package/es/utils/design-plugin-pkg-util/design-plugin-pkg-util.mjs +1 -29
  26. package/es/utils/index.mjs +1 -0
  27. package/es/utils/transform-js/index.mjs +1 -0
  28. package/es/utils/transform-js/transform-js.d.ts +7 -6
  29. package/es/utils/transform-js/transform-js.mjs +62 -68
  30. package/package.json +8 -6
  31. package/dist/assets/transform-js.worker-jL3ThXZ5.js +0 -172438
  32. package/es/assets/transform-js.worker-CI2jwZbi.js +0 -230912
  33. 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,3 @@
1
+ export declare function runPropEditor(selectedRef: IObject, propEditorList: IObject[]): IObject[];
2
+ export declare function runStyleEditor(_selectedRef: IObject, propEditorList: IObject[]): IObject[];
3
+ export declare function runEventEditor(): never[];
@@ -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 };
@@ -13,3 +13,4 @@ export * from './common-config/autofill-editor-config';
13
13
  export * from './common-config/column-editor-config';
14
14
  export * from './search/BaseSearch';
15
15
  export * from './search/BaseDate';
16
+ export * from './field';
@@ -12,3 +12,4 @@ import "./common-config/autofill-editor-config.mjs";
12
12
  import "./common-config/column-editor-config.mjs";
13
13
  import "./search/BaseSearch.mjs";
14
14
  import "./search/BaseDate.mjs";
15
+ import "./field/index.mjs";
@@ -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, platform: Platform, kit?: string[]): Promise<LoadPluginResult>;
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, platform, kit = []) {
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
  /**
@@ -10,4 +10,5 @@ import "./init-widget-info/init-widget-info.mjs";
10
10
  import "./design-plugin-pkg-util/design-plugin-pkg-util.mjs";
11
11
  import "./schema/index.mjs";
12
12
  import "./transform-js/transform-js.mjs";
13
+ import "./transform-js/index.mjs";
13
14
  import "./flatten.mjs";
@@ -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 字符串(在 Worker 中执行)
3
- * @param code - 源代码字符串(支持 TS 语法)
3
+ * 将 TypeScript/ES 代码编译为可在运行时执行的 JS 字符串
4
+ * @param code - 源代码字符串(支持 TS 语法,可为 URI 编码)
4
5
  * @param needExport - 是否在末尾追加 `return exports`,默认为 true
5
- * @returns 编译后可执行的 JS 字符串,失败时返回 null
6
+ * @returns 编译后可执行的 JS 字符串
6
7
  */
7
- export declare function buildRunJs(code: string, needExport?: boolean): Promise<string | null>;
8
+ export declare function buildRunJs(code: string, needExport?: boolean): Promise<string>;
8
9
  /**
9
- * 解析代码字符串并提取所有命名导出函数的方法映射(在 Worker 中执行)
10
+ * 解析代码字符串并提取所有命名导出函数的方法映射
10
11
  * @param code - 包含命名导出函数的代码字符串
11
12
  * @returns 以函数名为键的方法映射对象,解析失败时返回空对象
12
13
  */
13
- export declare function initMethodMap(code: string): Promise<IObject>;
14
+ export declare function initMethodMap(code: string): Promise<ExportMethod>;
@@ -1,82 +1,76 @@
1
1
  //#region src/utils/transform-js/transform-js.ts
2
- /** Worker 支持的操作类型 */
3
- var WorkerMessageType = /* @__PURE__ */ function(WorkerMessageType) {
4
- WorkerMessageType["BUILD_RUN_JS"] = "BUILD_RUN_JS";
5
- WorkerMessageType["INIT_METHOD_MAP"] = "INIT_METHOD_MAP";
6
- return WorkerMessageType;
7
- }(WorkerMessageType || {});
8
- /** 懒加载的 Worker 单例 */
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
- * Worker 发送任务并等待结果
41
- * @param type - 操作类型
42
- * @param payload - 操作参数
43
- * @returns 操作结果的 Promise
44
- */
45
- function postTask(type, payload) {
46
- return new Promise((resolve, reject) => {
47
- const id = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
48
- _pendingMap.set(id, {
49
- resolve,
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 字符串(在 Worker 中执行)
63
- * @param code - 源代码字符串(支持 TS 语法)
23
+ * 将 TypeScript/ES 代码编译为可在运行时执行的 JS 字符串
24
+ * @param code - 源代码字符串(支持 TS 语法,可为 URI 编码)
64
25
  * @param needExport - 是否在末尾追加 `return exports`,默认为 true
65
- * @returns 编译后可执行的 JS 字符串,失败时返回 null
26
+ * @returns 编译后可执行的 JS 字符串
66
27
  */
67
- function buildRunJs(code, needExport = true) {
68
- return postTask(WorkerMessageType.BUILD_RUN_JS, {
69
- code,
70
- needExport
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
- * 解析代码字符串并提取所有命名导出函数的方法映射(在 Worker 中执行)
50
+ * 解析代码字符串并提取所有命名导出函数的方法映射
75
51
  * @param code - 包含命名导出函数的代码字符串
76
52
  * @returns 以函数名为键的方法映射对象,解析失败时返回空对象
77
53
  */
78
- function initMethodMap(code) {
79
- return postTask(WorkerMessageType.INIT_METHOD_MAP, { code });
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.16",
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.16",
49
- "@gct-paas/core-web": "0.1.4-dev.16",
50
- "@gct-paas/schema": "0.1.4-dev.16",
51
- "@gct-paas/scss": "0.1.4-dev.16",
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": "cee8da739039182f4df08a2c0126cdd578fbc33b"
82
+ "gitHead": "d79e561695bc9a4ff14b7c1bc735a595a32ed3e9"
81
83
  }