@cloudbase/cals 1.0.43 → 1.0.44
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/lib/parser/cals/index.js +6 -7
- package/lib/utils/version-migrations/common.d.ts +5 -0
- package/lib/utils/version-migrations/common.d.ts.map +1 -0
- package/lib/utils/version-migrations/common.js +29 -0
- package/lib/utils/version-migrations/version4.d.ts +3 -0
- package/lib/utils/version-migrations/version4.d.ts.map +1 -0
- package/lib/utils/version-migrations/version4.js +199 -0
- package/package.json +3 -3
package/lib/parser/cals/index.js
CHANGED
|
@@ -364,7 +364,7 @@ function serializeDataset(ctx, dataset) {
|
|
|
364
364
|
}
|
|
365
365
|
});
|
|
366
366
|
Object.entries(result.query || {}).forEach(([key, query]) => {
|
|
367
|
-
var _a, _b, _c, _d
|
|
367
|
+
var _a, _b, _c, _d;
|
|
368
368
|
let { dataSourceName, method, listeners, handler, data, args } = query, restQuery = __rest(query, ["dataSourceName", "method", "listeners", "handler", "data", "args"]);
|
|
369
369
|
let mergedData = (_a = serializeDynamicMapWithExtra({
|
|
370
370
|
ctx,
|
|
@@ -386,20 +386,20 @@ function serializeDataset(ctx, dataset) {
|
|
|
386
386
|
}
|
|
387
387
|
const argsData = (_c = serializeDynamicMapWithExtra({
|
|
388
388
|
ctx,
|
|
389
|
-
map: args
|
|
389
|
+
map: args || {},
|
|
390
390
|
})) === null || _c === void 0 ? void 0 : _c.data;
|
|
391
391
|
let processedHandler = {
|
|
392
392
|
module: handler === null || handler === void 0 ? void 0 : handler.moduleName,
|
|
393
393
|
name: handler === null || handler === void 0 ? void 0 : handler.name,
|
|
394
394
|
code: handler === null || handler === void 0 ? void 0 : handler.code,
|
|
395
395
|
};
|
|
396
|
-
if (
|
|
397
|
-
processedHandler.params =
|
|
396
|
+
if (mergedData && !args) {
|
|
397
|
+
processedHandler.params = mergedData;
|
|
398
398
|
}
|
|
399
399
|
else {
|
|
400
400
|
processedHandler = Object.assign(Object.assign({}, argsData), processedHandler);
|
|
401
401
|
}
|
|
402
|
-
result.query[key] = Object.assign(Object.assign({}, restQuery), { handler: processedHandler, listeners: (
|
|
402
|
+
result.query[key] = Object.assign(Object.assign({}, restQuery), { handler: processedHandler, listeners: (_d = listeners === null || listeners === void 0 ? void 0 : listeners.map) === null || _d === void 0 ? void 0 : _d.call(listeners, (listener) => serializeListener(ctx, listener)) });
|
|
403
403
|
});
|
|
404
404
|
return result;
|
|
405
405
|
}
|
|
@@ -559,7 +559,6 @@ function deserializeDirecties(ctx, directives) {
|
|
|
559
559
|
* heander 更新为表达式
|
|
560
560
|
*/
|
|
561
561
|
function serializeListener(ctx, listener) {
|
|
562
|
-
var _a;
|
|
563
562
|
const { data, extra = {} } = serializeDynamicMapWithExtra({
|
|
564
563
|
ctx,
|
|
565
564
|
map: listener.data,
|
|
@@ -579,7 +578,7 @@ function serializeListener(ctx, listener) {
|
|
|
579
578
|
},
|
|
580
579
|
isCapturePhase: listener.isCapturePhase,
|
|
581
580
|
};
|
|
582
|
-
if (
|
|
581
|
+
if (!args && data) {
|
|
583
582
|
platfromListener.handler.params = data;
|
|
584
583
|
}
|
|
585
584
|
else {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function semverComp(a: string, b: string): number;
|
|
2
|
+
export declare function toFixed(num: number, precision: number): number;
|
|
3
|
+
export declare const OFFICIAL_COMPONENT_LIB_NAME = "CLOUDBASE_STANDARD";
|
|
4
|
+
export declare const OFFICIAL_MATERIAL_LIB_NAME = "gsd-h5-react";
|
|
5
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/utils/version-migrations/common.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAYvD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAI9D;AAED,eAAO,MAAM,2BAA2B,uBAAuB,CAAC;AAChE,eAAO,MAAM,0BAA0B,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OFFICIAL_MATERIAL_LIB_NAME = exports.OFFICIAL_COMPONENT_LIB_NAME = exports.toFixed = exports.semverComp = void 0;
|
|
4
|
+
function semverComp(a, b) {
|
|
5
|
+
const pa = a.split('.');
|
|
6
|
+
const pb = b.split('.');
|
|
7
|
+
for (let i = 0; i < 3; i++) {
|
|
8
|
+
const na = Number(pa[i]);
|
|
9
|
+
const nb = Number(pb[i]);
|
|
10
|
+
if (na > nb)
|
|
11
|
+
return 1;
|
|
12
|
+
if (nb > na)
|
|
13
|
+
return -1;
|
|
14
|
+
if (!isNaN(na) && isNaN(nb))
|
|
15
|
+
return 1;
|
|
16
|
+
if (isNaN(na) && !isNaN(nb))
|
|
17
|
+
return -1;
|
|
18
|
+
}
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
exports.semverComp = semverComp;
|
|
22
|
+
function toFixed(num, precision) {
|
|
23
|
+
const multiplier = Math.pow(10, (precision + 1));
|
|
24
|
+
const wholeNumber = Math.floor(num * multiplier);
|
|
25
|
+
return (Math.round(wholeNumber / 10) * 10) / multiplier;
|
|
26
|
+
}
|
|
27
|
+
exports.toFixed = toFixed;
|
|
28
|
+
exports.OFFICIAL_COMPONENT_LIB_NAME = 'CLOUDBASE_STANDARD';
|
|
29
|
+
exports.OFFICIAL_MATERIAL_LIB_NAME = 'gsd-h5-react';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version4.d.ts","sourceRoot":"","sources":["../../../src/utils/version-migrations/version4.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAGhE,wBAAgB,QAAQ,CACtB,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,OAAO,EAClB,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAC/D,YAAY,CAEd"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.version4 = void 0;
|
|
7
|
+
const postcss_1 = __importDefault(require("postcss"));
|
|
8
|
+
const postcss_less_1 = __importDefault(require("postcss-less"));
|
|
9
|
+
const __1 = require("..");
|
|
10
|
+
const common_1 = require("./common");
|
|
11
|
+
function version4(cals, isUpgrade, setSchemaVersionCallback) {
|
|
12
|
+
return transformPxLowcodeCompAndSourceComp(cals, isUpgrade, setSchemaVersionCallback);
|
|
13
|
+
}
|
|
14
|
+
exports.version4 = version4;
|
|
15
|
+
const transformPxLowcodeCompAndSourceComp = (cals, isUpgrade, setSchemaVersionCallback) => {
|
|
16
|
+
var _a, _b, _c, _d;
|
|
17
|
+
{
|
|
18
|
+
function transformCals(items, isUpgradeToPx) {
|
|
19
|
+
return items.map((item) => {
|
|
20
|
+
var _a;
|
|
21
|
+
// 对于表单操作区的按钮组件的父容器添加.wd-form__action, 兼容组件规范化按钮升级样式
|
|
22
|
+
if ((item === null || item === void 0 ? void 0 : item.module) === common_1.OFFICIAL_COMPONENT_LIB_NAME && (item === null || item === void 0 ? void 0 : item.component) === 'Form') {
|
|
23
|
+
item = addClassToButtonContainer(item);
|
|
24
|
+
}
|
|
25
|
+
if ((_a = item === null || item === void 0 ? void 0 : item.extra) === null || _a === void 0 ? void 0 : _a.commonStyle) {
|
|
26
|
+
item.extra.commonStyle = convertCommonStyle(item.extra.commonStyle, isUpgradeToPx);
|
|
27
|
+
if (item.extra.commonStyle.self) {
|
|
28
|
+
// 处理 margin padding shorthand 同步
|
|
29
|
+
const newSelf = (0, __1.processCommonStyle2CSSProperties)(item.extra.commonStyle, {
|
|
30
|
+
toRem: false,
|
|
31
|
+
ignoreSelf: true,
|
|
32
|
+
addPXUnit: true,
|
|
33
|
+
});
|
|
34
|
+
['margin', 'padding', 'border'].forEach((k) => {
|
|
35
|
+
if (item.extra.commonStyle.self[k]) {
|
|
36
|
+
item.extra.commonStyle.self[k] = newSelf[k];
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (item === null || item === void 0 ? void 0 : item.resources) {
|
|
42
|
+
item.resources = item.resources.map((n) => {
|
|
43
|
+
if (n.codeType === 'style') {
|
|
44
|
+
n = convertLowCodesStyle(n, isUpgradeToPx);
|
|
45
|
+
return n;
|
|
46
|
+
}
|
|
47
|
+
return n;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (item.items) {
|
|
51
|
+
item.items = transformCals(item.items, isUpgradeToPx);
|
|
52
|
+
}
|
|
53
|
+
return item;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
let pages = cals['items'];
|
|
57
|
+
let isDivision;
|
|
58
|
+
if (isUpgrade && (0, common_1.semverComp)((_a = cals['schemaVersion']) !== null && _a !== void 0 ? _a : '3.0.0', '4.0.0') < 0) {
|
|
59
|
+
// 组件库版本高于目标版本,且schemaVersion小于4, 将应用 CALS 数据中的 CSS 和 style 中的无单位和有单位的小写 px统一改写为 1/2 px
|
|
60
|
+
isDivision = true;
|
|
61
|
+
pages = transformCals(pages, isDivision);
|
|
62
|
+
cals.resources = (_b = cals.resources) === null || _b === void 0 ? void 0 : _b.map((n) => {
|
|
63
|
+
if (n.codeType === 'style') {
|
|
64
|
+
n = convertLowCodesStyle(n, isDivision);
|
|
65
|
+
return n;
|
|
66
|
+
}
|
|
67
|
+
return n;
|
|
68
|
+
});
|
|
69
|
+
cals['schemaVersion'] = '4.0.0';
|
|
70
|
+
setSchemaVersionCallback === null || setSchemaVersionCallback === void 0 ? void 0 : setSchemaVersionCallback('4.0.0');
|
|
71
|
+
}
|
|
72
|
+
else if (!isUpgrade && (0, common_1.semverComp)((_c = cals['schemaVersion']) !== null && _c !== void 0 ? _c : '3.0.0', '4.0.0') >= 0) {
|
|
73
|
+
// 组件库低于目标版本,并且schemaVersion大于4 将应用 CALS 数据中的 CSS 和 style 中的无单位和有单位的小写 px统一改写为 2倍 px
|
|
74
|
+
isDivision = false;
|
|
75
|
+
pages = transformCals(pages, isDivision);
|
|
76
|
+
cals.resources = (_d = cals.resources) === null || _d === void 0 ? void 0 : _d.map((n) => {
|
|
77
|
+
if (n.codeType === 'style') {
|
|
78
|
+
n = convertLowCodesStyle(n, isDivision);
|
|
79
|
+
return n;
|
|
80
|
+
}
|
|
81
|
+
return n;
|
|
82
|
+
});
|
|
83
|
+
delete cals['schemaVersion'];
|
|
84
|
+
setSchemaVersionCallback === null || setSchemaVersionCallback === void 0 ? void 0 : setSchemaVersionCallback(undefined);
|
|
85
|
+
}
|
|
86
|
+
cals['items'] = pages;
|
|
87
|
+
return cals;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
function hasSubmitButton(item) {
|
|
91
|
+
var _a;
|
|
92
|
+
if ((_a = item === null || item === void 0 ? void 0 : item.items) === null || _a === void 0 ? void 0 : _a.length) {
|
|
93
|
+
const children = item.items;
|
|
94
|
+
return children.some((i) => { var _a; return (i === null || i === void 0 ? void 0 : i.module) === common_1.OFFICIAL_COMPONENT_LIB_NAME && i.component === 'Button' && ((_a = i === null || i === void 0 ? void 0 : i.attributes) === null || _a === void 0 ? void 0 : _a.formType) === 'submit'; });
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
function addClassToButtonContainer(item) {
|
|
99
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
100
|
+
if ((item === null || item === void 0 ? void 0 : item.module) === common_1.OFFICIAL_MATERIAL_LIB_NAME && item.component === 'Container') {
|
|
101
|
+
if (hasSubmitButton(item)) {
|
|
102
|
+
if (((_a = item.attributes) === null || _a === void 0 ? void 0 : _a.class) && !((_b = item.attributes) === null || _b === void 0 ? void 0 : _b.class.includes('wd-form__action'))) {
|
|
103
|
+
if (typeof ((_c = item.attributes) === null || _c === void 0 ? void 0 : _c.class) === 'string') {
|
|
104
|
+
item.attributes = Object.assign(Object.assign({}, item.attributes), { class: `${(_d = item.attributes) === null || _d === void 0 ? void 0 : _d.class} wd-form__action` });
|
|
105
|
+
}
|
|
106
|
+
else if (Array.isArray((_e = item.attributes) === null || _e === void 0 ? void 0 : _e.class)) {
|
|
107
|
+
item.attributes = Object.assign(Object.assign({}, item.attributes), { class: [...(_f = item.attributes) === null || _f === void 0 ? void 0 : _f.class, 'wd-form__action'] });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else if (!((_g = item.attributes) === null || _g === void 0 ? void 0 : _g.class)) {
|
|
111
|
+
item.attributes = Object.assign(Object.assign({}, item.attributes), { class: 'wd-form__action' });
|
|
112
|
+
}
|
|
113
|
+
// 移除旧的padding配置
|
|
114
|
+
if ((_j = (_h = item === null || item === void 0 ? void 0 : item.extra) === null || _h === void 0 ? void 0 : _h.commonStyle) === null || _j === void 0 ? void 0 : _j.padding) {
|
|
115
|
+
delete item.extra.commonStyle.padding;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if ((_k = item === null || item === void 0 ? void 0 : item.items) === null || _k === void 0 ? void 0 : _k.length) {
|
|
120
|
+
item.items = item.items.map((i) => addClassToButtonContainer(i));
|
|
121
|
+
}
|
|
122
|
+
return item;
|
|
123
|
+
}
|
|
124
|
+
function jsonTranverse(json, reviver) {
|
|
125
|
+
return JSON.parse(JSON.stringify(json, reviver, 2));
|
|
126
|
+
}
|
|
127
|
+
function convertCommonStyle(value, isUpgrade) {
|
|
128
|
+
return jsonTranverse(value, (key, value) => {
|
|
129
|
+
if (__1.isUnitlessNumber[key]) {
|
|
130
|
+
return value;
|
|
131
|
+
}
|
|
132
|
+
if (typeof value === 'number') {
|
|
133
|
+
if (isUpgrade) {
|
|
134
|
+
value = value / 2;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
value = value * 2;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else if (/^((\d+\.)?\d+)(px)?$/.test(value)) {
|
|
141
|
+
value = !value ? value : value === null || value === void 0 ? void 0 : value.replace('px', '');
|
|
142
|
+
if (isUpgrade) {
|
|
143
|
+
// console.log(key, value, Number(value) / 2);
|
|
144
|
+
value = !value ? value : `${(0, common_1.toFixed)(Number(value) / 2, 3)}px`;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
value = !value ? value : `${Number(value) * 2}px`;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return value;
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
const rem2PxPlugin = (opts) => {
|
|
154
|
+
const rem2pxSym = Symbol('rem2pxSym');
|
|
155
|
+
const { isUpgrade } = opts;
|
|
156
|
+
return {
|
|
157
|
+
postcssPlugin: 'postcss-rem2px',
|
|
158
|
+
Declaration(decl, rule) {
|
|
159
|
+
// Modified From https://github.com/cuth/postcss-pxtorem/blob/122649015322214f8e9d1ac852eb11c0791b634b/lib/pixel-unit-regex.js#L9
|
|
160
|
+
// eslint-disable-next-line no-useless-escape
|
|
161
|
+
const pxRegex = /"[^"]+"|'[^']+'|(\d*\.?\d+)px/gm;
|
|
162
|
+
if (decl.value.indexOf('px') < 0) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (decl[rem2pxSym]) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (isUpgrade) {
|
|
169
|
+
const value = decl.value.replace(pxRegex, (match, p1) => {
|
|
170
|
+
if (p1 !== null && p1 !== undefined) {
|
|
171
|
+
const r = (0, common_1.toFixed)(Number(p1) / 2, 3);
|
|
172
|
+
const rs = r.toString();
|
|
173
|
+
return `${rs}px`;
|
|
174
|
+
}
|
|
175
|
+
return match;
|
|
176
|
+
});
|
|
177
|
+
decl.value = value;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
const value = decl.value.replace(pxRegex, (match, p1) => {
|
|
181
|
+
if (p1 !== null && p1 !== undefined) {
|
|
182
|
+
return `${Number(p1) * 2}px`;
|
|
183
|
+
}
|
|
184
|
+
return match;
|
|
185
|
+
});
|
|
186
|
+
decl.value = value;
|
|
187
|
+
}
|
|
188
|
+
decl[rem2pxSym] = true;
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
rem2PxPlugin.postcss = true;
|
|
193
|
+
function convertLowCodesStyle(value, isUpgrade) {
|
|
194
|
+
const result = (0, postcss_1.default)([rem2PxPlugin({ isUpgrade })]).process(value.code, {
|
|
195
|
+
syntax: postcss_less_1.default,
|
|
196
|
+
});
|
|
197
|
+
value.code = result.css;
|
|
198
|
+
return value;
|
|
199
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudbase/cals",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.44",
|
|
4
4
|
"description": "Common application specifications",
|
|
5
5
|
"main": "lib/utils/index.js",
|
|
6
6
|
"source": "src/utils/index.ts",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"postcss-less": "^6.0.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@tcwd/dev-tools": "
|
|
47
|
+
"@tcwd/dev-tools": "workspace:^",
|
|
48
48
|
"@types/acorn": "^4.0.5",
|
|
49
49
|
"@types/jest": "^27.4.0",
|
|
50
50
|
"@types/lodash": "^4.14.168",
|
|
@@ -63,4 +63,4 @@
|
|
|
63
63
|
"typescript": "^4.7.4",
|
|
64
64
|
"typescript-json-schema": "^0.53.0"
|
|
65
65
|
}
|
|
66
|
-
}
|
|
66
|
+
}
|