@cloudbase/cals 0.4.11-alpha.0 → 0.4.11-alpha.2

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.
@@ -0,0 +1,2 @@
1
+ export declare const wedaDTS = "declare namespace $app {\n namespace dataset {\n\n const state: {\n // Global State \u5168\u5C40\u53D8\u91CF - Don't touch me\n }\n }\n\n namespace utils {\n function ABS(num: number): number;\n function Min(...args: number[]): number;\n function Max(...args: number[]): number;\n function Average(...args: number[]): number;\n function Floor(num: number): number;\n function Ceiling(num: number): number;\n function Round(num: number): number;\n function Sum(...args: number[]): number;\n function Rand(num: number): number;\n\n function If(condition: boolean, val1: any, val2: any): any;\n function IsEmpty(text: string | string[]): boolean;\n function NotNull(val: any): boolean;\n function And(...args: boolean[]): boolean;\n function Or(...args: boolean[]): boolean;\n\n function Len(text: string): number;\n function Contains(text1: string, text2: string): boolean;\n function Split(text1: string, text2: string): string[];\n function Trim(text: string): string;\n function Upper(text: string): string;\n function Lower(text: string): string;\n function Concat(...text: string[]): string;\n\n function Now(): number;\n function Timestamp(arg: number | string | Date): number;\n function Second(arg: number | string | Date): number;\n function Minute(arg: number | string | Date): number;\n function Hour(arg: number | string | Date): number;\n function Day(arg: number | string | Date): number;\n function DayOfWeek(arg: number | string | Date): number;\n function Month(arg: number | string | Date): number;\n function Year(arg: number | string | Date): number;\n function GetDate(year: number, month: number, day: number): number;\n function DateTimeValue(arg: string, val: string): number;\n function Age(arg: number | string | Date, val: number | string | Date): number;\n function AgeOfNow(arg: number | string | Date): number;\n function DateAdd(arg: number | string | Date, day: number): number;\n function MonthAdd(arg: number | string | Date, month: number): number;\n function YearAdd(arg: number | string | Date, year: number): number;\n function DateDiff(startDay: number | string | Date, endDay: number | string | Date): number;\n function HourDiff(startDay: number | string | Date, endDay: number | string | Date): number;\n function MinuteDiff(startDay: number | string | Date, endDay: number | string | Date): number;\n function SecondDiff(startDay: number | string | Date, endDay: number | string | Date): number;\n function MonthDiff(startDay: number | string | Date, endDay: number | string | Date): number;\n function YearDiff(startDay: number | string | Date, endDay: number | string | Date): number;\n function DateText(createdTime: number | string | Date, text: string): string;\n function IsToday(date: number | string | Date): boolean;\n\n }\n\n namespace common {\n // Global Common \u5168\u5C40\u65B9\u6CD5 - Don't touch me\n }\n\n \n\ninterface navigatorOptions {\n packageName: string;\n pageId: string;\n data?: Record<string, any>;\n params?: Record<string, any>;\n events?: Record<string, (data: any) => void>;\n success(res: any);\n fail(res: any);\n complete(res: any);\n}\n\ninterface navigateBackOptions {\n delta: number;\n}\n\n// \u8BBE\u7F6E\u72B6\u6001\nfunction setState(userSetState: Record<string, any>): void\n\n// \u7279\u5236\u8DEF\u7531\nfunction navigateTo(options: navigatorOptions)\nfunction redirectTo(options: navigatorOptions)\nfunction reLaunch(options: navigatorOptions)\nfunction navigateBack(options: navigateBackOptions)\n\n// \u663E\u793A\u63D0\u793A\nfunction showToast(options);\n\n// \u663E\u793A\u6A21\u6001\u63D0\u793A\nfunction showModal(options);\n\n// \u663E\u793A loading \u63D0\u793A\nfunction showLoading(options);\n\n// \u9690\u85CF loading \u63D0\u793A\nfunction hideLoading(options);\n\n// \u9690\u85CF\u63D0\u793A\nfunction hideToast(options);\n\n// sacnCode\nfunction scanCode(options: {\n onlyFromCamera?: boolean;\n enableDefaultBehavior?: boolean;\n scanType?: ('barCode' | 'qrCode')[];\n success?: (res: { result: string; scanType: string }) => void;\n fail?: (err: Error) => void;\n complete?: () => void;\n}): Promise<ScanCodeResult> | ScanCodeResult;\n\n\n}\n\ndeclare const app = $app\n\n// Global For Begin\ndeclare const $for: {\n // For \u5FAA\u73AF\u53D8\u91CF - Don't touch me\n}\ndeclare const forItems = $for\n// Global For End\n\ndeclare namespace $page {\n namespace dataset {\n\n const state: {\n // Page State \u9875\u9762\u53D8\u91CF - Don't touch me\n }\n\n const params: {\n // Page Param \u9875\u9762\u53C2\u6570 - Don't touch me\n }\n }\n\n namespace handler {\n // Page Handler \u9875\u9762\u65B9\u6CD5 - Don't touch me\n }\n\n \n\n// \u8BBE\u7F6E\u72B6\u6001\nfunction setState(userSetState: Record<string, any>): void\n\n\n}\n\ndeclare namespace $comp {\n\n namespace props {\n const data: {\n // Comp Prop Data \u7EC4\u4EF6\u5C5E\u6027 - Don't touch me\n }\n\n namespace events {\n // Comp Prop Events \u7EC4\u4EF6\u4E8B\u4EF6 - Don't touch me\n }\n }\n\n namespace dataset {\n\n const state: {\n // Comp State \u7EC4\u4EF6\u53D8\u91CF - Don't touch me\n }\n }\n\n namespace handler {\n // Comp Handler \u7EC4\u4EF6\u65B9\u6CD5 - Don't touch me\n }\n}\n\n// Global Formula Begin\n\ndeclare function ABS(num: number): number;\ndeclare function Min(...args: number[]): number;\ndeclare function Max(...args: number[]): number;\ndeclare function Average(...args: number[]): number;\ndeclare function Floor(num: number): number;\ndeclare function Ceiling(num: number): number;\ndeclare function Round(num: number): number;\ndeclare function Sum(...args: number[]): number;\ndeclare function Rand(num: number): number;\n\ndeclare function If(condition: boolean, val1: any, val2: any): any;\ndeclare function IsEmpty(text: string | string[]): boolean;\ndeclare function NotNull(val: any): boolean;\ndeclare function And(...args: boolean[]): boolean;\ndeclare function Or(...args: boolean[]): boolean;\n\ndeclare function Len(text: string): number;\ndeclare function Contains(text1: string, text2: string): boolean;\ndeclare function Split(text1: string, text2: string): string[];\ndeclare function Trim(text: string): string;\ndeclare function Upper(text: string): string;\ndeclare function Lower(text: string): string;\ndeclare function Concat(...text: string[]): string;\n\ndeclare function Now(): number;\ndeclare function Timestamp(arg: number | string | Date): number;\ndeclare function Second(arg: number | string | Date): number;\ndeclare function Minute(arg: number | string | Date): number;\ndeclare function Hour(arg: number | string | Date): number;\ndeclare function Day(arg: number | string | Date): number;\ndeclare function DayOfWeek(arg: number | string | Date): number;\ndeclare function Month(arg: number | string | Date): number;\ndeclare function Year(arg: number | string | Date): number;\ndeclare function GetDate(year: number, month: number, day: number): number;\ndeclare function DateTimeValue(arg: string, val: string): number;\ndeclare function Age(arg: number | string | Date, val: number | string | Date): number;\ndeclare function AgeOfNow(arg: number | string | Date): number;\ndeclare function DateAdd(arg: number | string | Date, day: number): number;\ndeclare function MonthAdd(arg: number | string | Date, month: number): number;\ndeclare function YearAdd(arg: number | string | Date, year: number): number;\ndeclare function DateDiff(startDay: number | string | Date, endDay: number | string | Date): number;\ndeclare function HourDiff(startDay: number | string | Date, endDay: number | string | Date): number;\ndeclare function MinuteDiff(startDay: number | string | Date, endDay: number | string | Date): number;\ndeclare function SecondDiff(startDay: number | string | Date, endDay: number | string | Date): number;\ndeclare function MonthDiff(startDay: number | string | Date, endDay: number | string | Date): number;\ndeclare function YearDiff(startDay: number | string | Date, endDay: number | string | Date): number;\ndeclare function DateText(createdTime: number | string | Date, text: string): string;\ndeclare function IsToday(date: number | string | Date): boolean;\n\n\n// Global Formula End\n";
2
+ //# sourceMappingURL=auto-generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-generated.d.ts","sourceRoot":"","sources":["../../../src/utils/dts/auto-generated.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,skQAoOnB,CAAA"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wedaDTS = void 0;
4
+ exports.wedaDTS = `declare namespace $app {
5
+ namespace dataset {
6
+
7
+ const state: {
8
+ // Global State 全局变量 - Don't touch me
9
+ }
10
+ }
11
+
12
+ namespace utils {
13
+ function ABS(num: number): number;
14
+ function Min(...args: number[]): number;
15
+ function Max(...args: number[]): number;
16
+ function Average(...args: number[]): number;
17
+ function Floor(num: number): number;
18
+ function Ceiling(num: number): number;
19
+ function Round(num: number): number;
20
+ function Sum(...args: number[]): number;
21
+ function Rand(num: number): number;
22
+
23
+ function If(condition: boolean, val1: any, val2: any): any;
24
+ function IsEmpty(text: string | string[]): boolean;
25
+ function NotNull(val: any): boolean;
26
+ function And(...args: boolean[]): boolean;
27
+ function Or(...args: boolean[]): boolean;
28
+
29
+ function Len(text: string): number;
30
+ function Contains(text1: string, text2: string): boolean;
31
+ function Split(text1: string, text2: string): string[];
32
+ function Trim(text: string): string;
33
+ function Upper(text: string): string;
34
+ function Lower(text: string): string;
35
+ function Concat(...text: string[]): string;
36
+
37
+ function Now(): number;
38
+ function Timestamp(arg: number | string | Date): number;
39
+ function Second(arg: number | string | Date): number;
40
+ function Minute(arg: number | string | Date): number;
41
+ function Hour(arg: number | string | Date): number;
42
+ function Day(arg: number | string | Date): number;
43
+ function DayOfWeek(arg: number | string | Date): number;
44
+ function Month(arg: number | string | Date): number;
45
+ function Year(arg: number | string | Date): number;
46
+ function GetDate(year: number, month: number, day: number): number;
47
+ function DateTimeValue(arg: string, val: string): number;
48
+ function Age(arg: number | string | Date, val: number | string | Date): number;
49
+ function AgeOfNow(arg: number | string | Date): number;
50
+ function DateAdd(arg: number | string | Date, day: number): number;
51
+ function MonthAdd(arg: number | string | Date, month: number): number;
52
+ function YearAdd(arg: number | string | Date, year: number): number;
53
+ function DateDiff(startDay: number | string | Date, endDay: number | string | Date): number;
54
+ function HourDiff(startDay: number | string | Date, endDay: number | string | Date): number;
55
+ function MinuteDiff(startDay: number | string | Date, endDay: number | string | Date): number;
56
+ function SecondDiff(startDay: number | string | Date, endDay: number | string | Date): number;
57
+ function MonthDiff(startDay: number | string | Date, endDay: number | string | Date): number;
58
+ function YearDiff(startDay: number | string | Date, endDay: number | string | Date): number;
59
+ function DateText(createdTime: number | string | Date, text: string): string;
60
+ function IsToday(date: number | string | Date): boolean;
61
+
62
+ }
63
+
64
+ namespace common {
65
+ // Global Common 全局方法 - Don't touch me
66
+ }
67
+
68
+
69
+
70
+ interface navigatorOptions {
71
+ packageName: string;
72
+ pageId: string;
73
+ data?: Record<string, any>;
74
+ params?: Record<string, any>;
75
+ events?: Record<string, (data: any) => void>;
76
+ success(res: any);
77
+ fail(res: any);
78
+ complete(res: any);
79
+ }
80
+
81
+ interface navigateBackOptions {
82
+ delta: number;
83
+ }
84
+
85
+ // 设置状态
86
+ function setState(userSetState: Record<string, any>): void
87
+
88
+ // 特制路由
89
+ function navigateTo(options: navigatorOptions)
90
+ function redirectTo(options: navigatorOptions)
91
+ function reLaunch(options: navigatorOptions)
92
+ function navigateBack(options: navigateBackOptions)
93
+
94
+ // 显示提示
95
+ function showToast(options);
96
+
97
+ // 显示模态提示
98
+ function showModal(options);
99
+
100
+ // 显示 loading 提示
101
+ function showLoading(options);
102
+
103
+ // 隐藏 loading 提示
104
+ function hideLoading(options);
105
+
106
+ // 隐藏提示
107
+ function hideToast(options);
108
+
109
+ // sacnCode
110
+ function scanCode(options: {
111
+ onlyFromCamera?: boolean;
112
+ enableDefaultBehavior?: boolean;
113
+ scanType?: ('barCode' | 'qrCode')[];
114
+ success?: (res: { result: string; scanType: string }) => void;
115
+ fail?: (err: Error) => void;
116
+ complete?: () => void;
117
+ }): Promise<ScanCodeResult> | ScanCodeResult;
118
+
119
+
120
+ }
121
+
122
+ declare const app = $app
123
+
124
+ // Global For Begin
125
+ declare const $for: {
126
+ // For 循环变量 - Don't touch me
127
+ }
128
+ declare const forItems = $for
129
+ // Global For End
130
+
131
+ declare namespace $page {
132
+ namespace dataset {
133
+
134
+ const state: {
135
+ // Page State 页面变量 - Don't touch me
136
+ }
137
+
138
+ const params: {
139
+ // Page Param 页面参数 - Don't touch me
140
+ }
141
+ }
142
+
143
+ namespace handler {
144
+ // Page Handler 页面方法 - Don't touch me
145
+ }
146
+
147
+
148
+
149
+ // 设置状态
150
+ function setState(userSetState: Record<string, any>): void
151
+
152
+
153
+ }
154
+
155
+ declare namespace $comp {
156
+
157
+ namespace props {
158
+ const data: {
159
+ // Comp Prop Data 组件属性 - Don't touch me
160
+ }
161
+
162
+ namespace events {
163
+ // Comp Prop Events 组件事件 - Don't touch me
164
+ }
165
+ }
166
+
167
+ namespace dataset {
168
+
169
+ const state: {
170
+ // Comp State 组件变量 - Don't touch me
171
+ }
172
+ }
173
+
174
+ namespace handler {
175
+ // Comp Handler 组件方法 - Don't touch me
176
+ }
177
+ }
178
+
179
+ // Global Formula Begin
180
+
181
+ declare function ABS(num: number): number;
182
+ declare function Min(...args: number[]): number;
183
+ declare function Max(...args: number[]): number;
184
+ declare function Average(...args: number[]): number;
185
+ declare function Floor(num: number): number;
186
+ declare function Ceiling(num: number): number;
187
+ declare function Round(num: number): number;
188
+ declare function Sum(...args: number[]): number;
189
+ declare function Rand(num: number): number;
190
+
191
+ declare function If(condition: boolean, val1: any, val2: any): any;
192
+ declare function IsEmpty(text: string | string[]): boolean;
193
+ declare function NotNull(val: any): boolean;
194
+ declare function And(...args: boolean[]): boolean;
195
+ declare function Or(...args: boolean[]): boolean;
196
+
197
+ declare function Len(text: string): number;
198
+ declare function Contains(text1: string, text2: string): boolean;
199
+ declare function Split(text1: string, text2: string): string[];
200
+ declare function Trim(text: string): string;
201
+ declare function Upper(text: string): string;
202
+ declare function Lower(text: string): string;
203
+ declare function Concat(...text: string[]): string;
204
+
205
+ declare function Now(): number;
206
+ declare function Timestamp(arg: number | string | Date): number;
207
+ declare function Second(arg: number | string | Date): number;
208
+ declare function Minute(arg: number | string | Date): number;
209
+ declare function Hour(arg: number | string | Date): number;
210
+ declare function Day(arg: number | string | Date): number;
211
+ declare function DayOfWeek(arg: number | string | Date): number;
212
+ declare function Month(arg: number | string | Date): number;
213
+ declare function Year(arg: number | string | Date): number;
214
+ declare function GetDate(year: number, month: number, day: number): number;
215
+ declare function DateTimeValue(arg: string, val: string): number;
216
+ declare function Age(arg: number | string | Date, val: number | string | Date): number;
217
+ declare function AgeOfNow(arg: number | string | Date): number;
218
+ declare function DateAdd(arg: number | string | Date, day: number): number;
219
+ declare function MonthAdd(arg: number | string | Date, month: number): number;
220
+ declare function YearAdd(arg: number | string | Date, year: number): number;
221
+ declare function DateDiff(startDay: number | string | Date, endDay: number | string | Date): number;
222
+ declare function HourDiff(startDay: number | string | Date, endDay: number | string | Date): number;
223
+ declare function MinuteDiff(startDay: number | string | Date, endDay: number | string | Date): number;
224
+ declare function SecondDiff(startDay: number | string | Date, endDay: number | string | Date): number;
225
+ declare function MonthDiff(startDay: number | string | Date, endDay: number | string | Date): number;
226
+ declare function YearDiff(startDay: number | string | Date, endDay: number | string | Date): number;
227
+ declare function DateText(createdTime: number | string | Date, text: string): string;
228
+ declare function IsToday(date: number | string | Date): boolean;
229
+
230
+
231
+ // Global Formula End
232
+ `;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/utils/dts/build.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const fs_extra_1 = __importDefault(require("fs-extra"));
16
+ const path_1 = __importDefault(require("path"));
17
+ const child_process_1 = __importDefault(require("child_process"));
18
+ const os_1 = __importDefault(require("os"));
19
+ const node_watch_1 = __importDefault(require("node-watch"));
20
+ /**
21
+ * 生成函数公式的 dts
22
+ * 已包含的函数公式:packages/weda-client/src/common/<calculation|logic|text|time>
23
+ */
24
+ function buildFormulaDTS() {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ // 确保在 packages/cals 目录执行该脚本
27
+ const baseDirPath = path_1.default.resolve('..', 'weda-client', 'src', 'common');
28
+ const formulaDirs = ['calculation', 'logic', 'text', 'time'];
29
+ const dtsList = yield Promise.all(formulaDirs.map(fDir => {
30
+ return genDTS(fDir);
31
+ }));
32
+ return dtsList.join('\n');
33
+ function genDTS(fDir) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const randomId = Math.random()
36
+ .toString(36)
37
+ .substring(2, 6);
38
+ const tempDtsPath = path_1.default.resolve(os_1.default.tmpdir(), `weda-temp-${randomId}.d.ts`);
39
+ yield new Promise((resolve) => {
40
+ child_process_1.default.exec(`tsc ${path_1.default.resolve(baseDirPath, fDir, 'index.ts')} --declaration --emitDeclarationOnly --allowSyntheticDefaultImports true --out ${tempDtsPath}`, () => {
41
+ resolve('done');
42
+ });
43
+ });
44
+ const dts = yield fs_extra_1.default.readFile(tempDtsPath, 'utf8');
45
+ yield fs_extra_1.default.remove(tempDtsPath);
46
+ // 去掉最外层的模块声明
47
+ return dts.replace(/^declare module.*$/m, '').replace(/\}$/m, '').replace(/^\s+/mg, '');
48
+ });
49
+ }
50
+ });
51
+ }
52
+ function genWeDaAPPDTS() {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ console.log('genWeDaAPPDTS processing...');
55
+ /**
56
+ * 获取所有的 DTS
57
+ */
58
+ const wedaFrameworkDTS = yield fs_extra_1.default.readFile(path_1.default.resolve(__dirname, 'weda-framework.d.ts'), 'utf8'); // 低码框架
59
+ const wedaAPIDTS = yield fs_extra_1.default.readFile(path_1.default.resolve(__dirname, 'weda-api.d.ts'), 'utf8'); // 低码 API
60
+ const formulaDTS = yield buildFormulaDTS(); // 函数公式
61
+ /**
62
+ * 聚合 DTS
63
+ */
64
+ const wedaDTS = groupDTSs({ wedaFrameworkDTS, wedaAPIDTS, formulaDTS });
65
+ /**
66
+ * 将聚合结果保存在 auto-generated.ts
67
+ */
68
+ yield fs_extra_1.default.writeFile(path_1.default.resolve(__dirname, 'auto-generated.ts'), `export const wedaDTS = \`${wedaDTS}\``, 'utf8');
69
+ console.log('genWeDaAPPDTS done!');
70
+ });
71
+ }
72
+ /**
73
+ * 聚合所有的 DTS(不包括动态生成的)
74
+ */
75
+ function groupDTSs({ wedaFrameworkDTS = '', wedaAPIDTS = '', formulaDTS = '' }) {
76
+ let resultDts = wedaFrameworkDTS;
77
+ // 函数公式:$app.utils.xxx
78
+ resultDts = resultDts.replace("// Formula 函数公式 - Don't touch me", formulaDTS.replace(/export/g, ''));
79
+ // 函数公式:全局变量提示
80
+ resultDts = resultDts.replace("// Global Formula 全局函数公式- Don't touch me", formulaDTS.replace(/export/g, 'declare'));
81
+ // 增加 API
82
+ const appAPIDTS = wedaAPIDTS.replace(/[\s\S]*\/\/ ============ App API Begin ============ \/\/([\s\S]*?)\/\/ ============ App API End ============ \/\/[\s\S]*/, '$1');
83
+ resultDts = resultDts.replace("// App API - Don't touch me", appAPIDTS);
84
+ const pageAPIDTS = wedaAPIDTS.replace(/[\s\S]*\/\/ ============ Page API Begin ============ \/\/([\s\S]*?)\/\/ ============ Page API End ============ \/\/[\s\S]*/, '$1');
85
+ resultDts = resultDts.replace("// Page API - Don't touch me", pageAPIDTS);
86
+ return resultDts;
87
+ }
88
+ function main() {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ yield genWeDaAPPDTS();
91
+ const [, , watchArgv] = process.argv;
92
+ if (watchArgv === '--watch') {
93
+ console.log('Start watching mode');
94
+ (0, node_watch_1.default)(path_1.default.resolve(__dirname, 'weda-framework.d.ts'), genWeDaAPPDTS);
95
+ (0, node_watch_1.default)(path_1.default.resolve(__dirname, 'weda-api.d.ts'), genWeDaAPPDTS);
96
+ }
97
+ });
98
+ }
99
+ main();
@@ -0,0 +1,42 @@
1
+ import { IJsonSchemaObject } from '../../types';
2
+ interface ICodeItem {
3
+ name: string;
4
+ code: string;
5
+ }
6
+ export interface IInputData {
7
+ globalState?: IJsonSchemaObject;
8
+ pageState?: IJsonSchemaObject;
9
+ compState?: IJsonSchemaObject;
10
+ pageParams?: IJsonSchemaObject;
11
+ forState?: IJsonSchemaObject;
12
+ globalCommonCodes?: ICodeItem[];
13
+ pageHandlerCodes?: ICodeItem[];
14
+ compHandlerCodes?: ICodeItem[];
15
+ compPropData?: IJsonSchemaObject;
16
+ compPropEvents?: string[];
17
+ }
18
+ export interface IOptions {
19
+ isCompMode?: boolean;
20
+ needGlobalFormula?: boolean;
21
+ needGlobalFor?: boolean;
22
+ }
23
+ /**
24
+ * 通过该类可以共享同个dts。
25
+ * 场景:在 weda 中,低代码的变更会通知更改 dts,而低码编辑器和表达式编辑器对 dts 的需求是不一样的,这样不同的 dts 共享的是同一份全的 dts。如果直接调用 generateWeDaAppDTS 会导致 dts 重复地解析
26
+ */
27
+ export declare class WeDaDTS {
28
+ private static _dts;
29
+ static updateDTS(inputData?: IInputData, options?: Pick<IOptions, "isCompMode">): Promise<void>;
30
+ static getDTS(options?: Omit<IOptions, "isCompMode">): string;
31
+ }
32
+ /**
33
+ * 生成 WeDa 应用的低码代码提示的 dts 类型声明内容
34
+ */
35
+ export declare function generateWeDaAppDTS(inputData?: IInputData, options?: IOptions): Promise<string>;
36
+ export declare const workerCode = "\nimportScripts('https://qbase.cdn-go.cn/lcap/lcap-resource-cdngo/-/release/_url/devtools/typescriptServices.min.js');\n\nts.transpileOptionValueCompilerOptions.forEach(item => {\n if (['emitDeclarationOnly', 'declaration'].includes(item.name)) {\n item.transpileOptionValue = true\n }\n})\naddEventListener('message', (message) => {\n const {action, data: {id, code}} = message.data\n switch(action) {\n case 'dts':\n const dts = ts.transpile(code, {})\n postMessage({action: 'dts_back', data: {id, dts}})\n break\n default:\n break\n }\n})\n";
37
+ /**
38
+ * 通过 js/ts 代码生成 dts
39
+ */
40
+ export declare function transpileToDTS(code: string): Promise<string>;
41
+ export {};
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/dts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAI/C,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAA;IAC/B,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAA;IAC9B,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAA;IAC9B,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AACD,MAAM,WAAW,QAAQ;IAEvB,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAeD;;;GAGG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAQ;WAEd,SAAS,CAAC,SAAS,GAAE,UAAe,EAAE,OAAO,GAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAyB;IAIhH,MAAM,CAAC,MAAM,CAAC,OAAO,GAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAsD;CAUzG;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,GAAE,UAAe,EAAE,OAAO,GAAE,QAAgF,GAAG,OAAO,CAAC,MAAM,CAAC,CAuG/K;AAGD,eAAO,MAAM,UAAU,onBAmBtB,CAAA;AA6CD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5D"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.transpileToDTS = exports.workerCode = exports.generateWeDaAppDTS = exports.WeDaDTS = void 0;
36
+ const jstt = __importStar(require("json-schema-to-typescript-for-browser/dist/bundle.js"));
37
+ const auto_generated_1 = require("./auto-generated");
38
+ const compile = jstt.compile;
39
+ const DtsPlaceholder = {
40
+ GLOBAL_STATE: "// Global State 全局变量 - Don't touch me",
41
+ PAGE_STATE: "// Page State 页面变量 - Don't touch me",
42
+ COMP_STATE: "// Comp State 组件变量 - Don't touch me",
43
+ PAGE_PARAMS: "// Page Param 页面参数 - Don't touch me",
44
+ FOR_STATE: "// For 循环变量 - Don't touch me",
45
+ GLOBAL_COMMON_CODES: "// Global Common 全局方法 - Don't touch me",
46
+ PAGE_HANDLER_CODES: "// Page Handler 页面方法 - Don't touch me",
47
+ COMP_HANDLER_CODES: "// Comp Handler 组件方法 - Don't touch me",
48
+ COMP_PROP_DATA: "// Comp Prop Data 组件属性 - Don't touch me",
49
+ COMP_PROP_EVENTS: "// Comp Prop Events 组件事件 - Don't touch me",
50
+ };
51
+ /**
52
+ * 通过该类可以共享同个dts。
53
+ * 场景:在 weda 中,低代码的变更会通知更改 dts,而低码编辑器和表达式编辑器对 dts 的需求是不一样的,这样不同的 dts 共享的是同一份全的 dts。如果直接调用 generateWeDaAppDTS 会导致 dts 重复地解析
54
+ */
55
+ class WeDaDTS {
56
+ static updateDTS(inputData = {}, options = { isCompMode: false }) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ WeDaDTS._dts = yield generateWeDaAppDTS(inputData, Object.assign(Object.assign({}, options), { needGlobalFormula: true, needGlobalFor: true }));
59
+ });
60
+ }
61
+ static getDTS(options = { needGlobalFormula: false, needGlobalFor: false }) {
62
+ let resultDts = WeDaDTS._dts;
63
+ if (!options.needGlobalFormula) {
64
+ resultDts = resultDts.replace(/^\/\/ Global Formula Begin[\s\S]*^\/\/ Global Formula End$/m, '');
65
+ }
66
+ if (!options.needGlobalFor) {
67
+ resultDts = resultDts.replace(/^\/\/ Global For Begin[\s\S]*^\/\/ Global For End$/m, '');
68
+ }
69
+ return resultDts;
70
+ }
71
+ }
72
+ exports.WeDaDTS = WeDaDTS;
73
+ /**
74
+ * 生成 WeDa 应用的低码代码提示的 dts 类型声明内容
75
+ */
76
+ function generateWeDaAppDTS(inputData = {}, options = { isCompMode: false, needGlobalFormula: false, needGlobalFor: false }) {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ let resultDts = auto_generated_1.wedaDTS;
79
+ const placeholderMap = {
80
+ globalState: DtsPlaceholder.GLOBAL_STATE,
81
+ pageState: DtsPlaceholder.PAGE_STATE,
82
+ compState: DtsPlaceholder.COMP_STATE,
83
+ pageParams: DtsPlaceholder.PAGE_PARAMS,
84
+ forState: DtsPlaceholder.FOR_STATE,
85
+ globalCommonCodes: DtsPlaceholder.GLOBAL_COMMON_CODES,
86
+ pageHandlerCodes: DtsPlaceholder.PAGE_HANDLER_CODES,
87
+ compHandlerCodes: DtsPlaceholder.COMP_HANDLER_CODES,
88
+ compPropData: DtsPlaceholder.COMP_PROP_DATA,
89
+ compPropEvents: DtsPlaceholder.COMP_PROP_EVENTS
90
+ };
91
+ const hanlderMap = {
92
+ globalCommonCodes: function (inputData) {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ const dts = yield Promise.all(inputData.map((item) => __awaiter(this, void 0, void 0, function* () {
95
+ const dts = yield transpileToDTS(item.code);
96
+ return `namespace ${item.name} { ${dts} }`;
97
+ })));
98
+ return dts.join('\n');
99
+ });
100
+ },
101
+ pageHandlerCodes: function (inputData) {
102
+ return __awaiter(this, void 0, void 0, function* () {
103
+ const IParams = `{
104
+ data?: {
105
+ target?: {
106
+ [key: string]: any
107
+ }
108
+ },
109
+ event?: {
110
+ target?: EventTarget
111
+ currentTarget?: EventTarget
112
+ detail?: {
113
+ detail?: {
114
+ [key: string]: any
115
+ }
116
+ }
117
+ }
118
+ forItems?: {
119
+ [key: string]: any
120
+ }
121
+ }`;
122
+ const dts = yield Promise.all(inputData.map((item) => __awaiter(this, void 0, void 0, function* () {
123
+ const dts = yield transpileToDTS(item.code);
124
+ // 将 export default function() 替换成类似 export function onClick
125
+ return dts.replace(/default function\s*\([\s\S]*?\)/, `function ${item.name} (params: ${IParams})`);
126
+ })));
127
+ return dts.join('\n');
128
+ });
129
+ },
130
+ compHandlerCodes: function (inputData) {
131
+ return this.pageHandlerCodes(inputData);
132
+ },
133
+ compPropEvents: function (inputData) {
134
+ const IData = `any`;
135
+ return inputData.map(eventName => {
136
+ return `function ${eventName}(data?: ${IData}): void`;
137
+ }).join('\n');
138
+ }
139
+ };
140
+ yield Promise.all(Object.keys(inputData).map((key) => __awaiter(this, void 0, void 0, function* () {
141
+ const handler = hanlderMap[key];
142
+ let dts = '';
143
+ // 优先判断是否有独立的处理逻辑
144
+ if (handler) {
145
+ dts = yield handler.call(hanlderMap, inputData[key]);
146
+ }
147
+ const placeholder = placeholderMap[key];
148
+ if (placeholder) {
149
+ dts = dts || (yield _compile(inputData[key]));
150
+ resultDts = resultDts.replace(placeholder, dts + placeholder);
151
+ }
152
+ return null;
153
+ })));
154
+ // 根据是否组件模式删除一些类型定义
155
+ if (options === null || options === void 0 ? void 0 : options.isCompMode) {
156
+ resultDts = resultDts.replace(/^declare namespace \$page[\s\S]*?^\}$/m, '');
157
+ }
158
+ else {
159
+ resultDts = resultDts.replace(/^declare namespace \$comp[\s\S]*?^\}$/m, '');
160
+ }
161
+ // 根据是否需要全局提示函数公式删除一些类型定义
162
+ if (!(options === null || options === void 0 ? void 0 : options.needGlobalFormula)) {
163
+ resultDts = resultDts.replace(/^\/\/ Global Formula Begin[\s\S]*^\/\/ Global Formula End$/m, '');
164
+ }
165
+ if (!(options === null || options === void 0 ? void 0 : options.needGlobalFor)) {
166
+ resultDts = resultDts.replace(/^\/\/ Global For Begin[\s\S]*^\/\/ Global For End$/m, '');
167
+ }
168
+ // console.log(resultDts)
169
+ return resultDts;
170
+ function _compile(jsonschema) {
171
+ return __awaiter(this, void 0, void 0, function* () {
172
+ let dts = yield compile(jsonschema, 'IWeDa', { additionalProperties: false, bannerComment: '', format: false });
173
+ dts = dts.replace(/^export interface.*$/m, '').replace(/^\}$/m, '');
174
+ return dts;
175
+ });
176
+ }
177
+ });
178
+ }
179
+ exports.generateWeDaAppDTS = generateWeDaAppDTS;
180
+ // 仅仅为了与 unittest 共享,外部请不要使用
181
+ exports.workerCode = `
182
+ importScripts('https://qbase.cdn-go.cn/lcap/lcap-resource-cdngo/-/release/_url/devtools/typescriptServices.min.js');
183
+
184
+ ts.transpileOptionValueCompilerOptions.forEach(item => {
185
+ if (['emitDeclarationOnly', 'declaration'].includes(item.name)) {
186
+ item.transpileOptionValue = true
187
+ }
188
+ })
189
+ addEventListener('message', (message) => {
190
+ const {action, data: {id, code}} = message.data
191
+ switch(action) {
192
+ case 'dts':
193
+ const dts = ts.transpile(code, {})
194
+ postMessage({action: 'dts_back', data: {id, dts}})
195
+ break
196
+ default:
197
+ break
198
+ }
199
+ })
200
+ `;
201
+ function TypescriptWorker() {
202
+ let typescriptWorker = null;
203
+ let sendMessageCallbackFn = {};
204
+ return function getInstance() {
205
+ if (!typescriptWorker) {
206
+ const workerURL = URL.createObjectURL(new Blob([exports.workerCode]));
207
+ typescriptWorker = new Worker(workerURL);
208
+ typescriptWorker.onmessage = function (event) {
209
+ const { action } = event.data;
210
+ if (action === 'dts_back') {
211
+ const { data: { id, dts } } = event.data;
212
+ sendMessageCallbackFn[id] && sendMessageCallbackFn[id](dts);
213
+ }
214
+ };
215
+ }
216
+ function sendMessage(msgData, callbackFn) {
217
+ const id = Math.random()
218
+ .toString(36)
219
+ .substring(2, 5);
220
+ msgData.data.id = id;
221
+ sendMessageCallbackFn[id] = callbackFn;
222
+ typescriptWorker.postMessage(msgData);
223
+ }
224
+ return { sendMessage };
225
+ };
226
+ }
227
+ /**
228
+ * 使用:
229
+ * const typescriptWorker = getTypescriptWorker();
230
+ * typescriptWorker.sendMessage({ action: 'dts', data: { code } }, dts => {
231
+ *
232
+ * })
233
+ * // 以下暂未实现
234
+ * typescriptWorker.sendMessage({ action: 'ts', data: { code } }, ts => {
235
+ *
236
+ * })
237
+ */
238
+ const getTypescriptWorker = TypescriptWorker();
239
+ /**
240
+ * 通过 js/ts 代码生成 dts
241
+ */
242
+ function transpileToDTS(code) {
243
+ return new Promise(resolve => {
244
+ const typescriptWorker = getTypescriptWorker();
245
+ typescriptWorker.sendMessage({ action: 'dts', data: { code } }, (dts) => {
246
+ resolve(dts);
247
+ });
248
+ });
249
+ }
250
+ exports.transpileToDTS = transpileToDTS;
@@ -1,5 +1,6 @@
1
1
  export * from '../parser';
2
2
  export * from '../types/index';
3
3
  export * from './constant';
4
+ export * from './dts/index';
4
5
  export { isUnitlessNumber } from './CSSProperty';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -18,5 +18,6 @@ exports.isUnitlessNumber = void 0;
18
18
  __exportStar(require("../parser"), exports);
19
19
  __exportStar(require("../types/index"), exports);
20
20
  __exportStar(require("./constant"), exports);
21
+ __exportStar(require("./dts/index"), exports);
21
22
  var CSSProperty_1 = require("./CSSProperty");
22
23
  Object.defineProperty(exports, "isUnitlessNumber", { enumerable: true, get: function () { return CSSProperty_1.isUnitlessNumber; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/cals",
3
- "version": "0.4.11-alpha.0",
3
+ "version": "0.4.11-alpha.2",
4
4
  "description": "Common application specifications",
5
5
  "main": "lib/utils/index.js",
6
6
  "source": "src/utils/index.ts",
@@ -28,6 +28,7 @@
28
28
  "dependencies": {
29
29
  "acorn": "^8.0.4",
30
30
  "json-schema-to-typescript": "^11.0.2",
31
+ "json-schema-to-typescript-for-browser": "^11.0.2",
31
32
  "lodash": "^4.17.20"
32
33
  },
33
34
  "devDependencies": {