@vkontakte/vkui-codemods 1.0.0-beta.0 → 1.0.0
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/README.md +62 -19
- package/dist/autoDetectVKUIVersion.js +17 -7
- package/dist/cli.js +80 -32
- package/dist/codemod-helpers.js +86 -1
- package/dist/getAvailableCodemods.js +17 -7
- package/dist/index.js +45 -57
- package/dist/transforms/v7/action-sheet.js +16 -0
- package/dist/transforms/v7/alert.js +16 -0
- package/dist/transforms/v7/appearance-provider.js +35 -0
- package/dist/transforms/v7/appearance.js +45 -0
- package/dist/transforms/v7/banner.js +47 -0
- package/dist/transforms/v7/calendar.js +17 -0
- package/dist/transforms/v7/card-grid.js +16 -0
- package/dist/transforms/v7/card-scroll.js +59 -0
- package/dist/transforms/v7/cell-button.js +3 -15
- package/dist/transforms/v7/cell.js +19 -0
- package/dist/transforms/v7/chips-select.js +20 -0
- package/dist/transforms/v7/common/moveFromChildrenToLabel.js +68 -0
- package/dist/transforms/v7/common/remapSizePropValue.js +10 -5
- package/dist/transforms/v7/common/removeChildrenFromComponent.js +17 -0
- package/dist/transforms/v7/config-provider.js +136 -0
- package/dist/transforms/v7/content-card.js +21 -0
- package/dist/transforms/v7/counter.js +60 -0
- package/dist/transforms/v7/custom-scroll-view.js +21 -0
- package/dist/transforms/v7/custom-select.js +20 -0
- package/dist/transforms/v7/date-picker.js +26 -0
- package/dist/transforms/v7/form-item.js +2 -2
- package/dist/transforms/v7/form-status.js +18 -0
- package/dist/transforms/v7/header.js +47 -0
- package/dist/transforms/v7/horizontal-cell-show-more.js +33 -13
- package/dist/transforms/v7/horizontal-cell.js +16 -0
- package/dist/transforms/v7/image-overlay.js +10 -10
- package/dist/transforms/v7/mini-info-cell.js +18 -0
- package/dist/transforms/v7/modal-card.js +29 -0
- package/dist/transforms/v7/onboarding-tooltip.js +16 -0
- package/dist/transforms/v7/panel-header-back.js +18 -0
- package/dist/transforms/v7/panel-header-close.js +18 -0
- package/dist/transforms/v7/panel-header-content.js +16 -0
- package/dist/transforms/v7/panel-header-edit.js +19 -0
- package/dist/transforms/v7/panel-header-submit.js +18 -0
- package/dist/transforms/v7/panel-spinner.js +30 -0
- package/dist/transforms/v7/placeholder.js +19 -0
- package/dist/transforms/v7/rich-cell.js +20 -0
- package/dist/transforms/v7/screen-spinner.js +25 -2
- package/dist/transforms/v7/scroll-arrow.js +52 -0
- package/dist/transforms/v7/select.js +20 -0
- package/dist/transforms/v7/separator.js +1 -0
- package/dist/transforms/v7/simple-cell.js +19 -0
- package/dist/transforms/v7/subnavigation-bar.js +46 -0
- package/dist/transforms/v7/subnavigation-button.js +18 -0
- package/dist/transforms/v7/tabbar-item.js +16 -0
- package/dist/transforms/v7/tooltip.js +16 -0
- package/dist/transforms/v7/users-stack.js +2 -15
- package/package.json +9 -9
|
@@ -13,14 +13,24 @@ function transformer(file, api, options) {
|
|
|
13
13
|
return source.toSource();
|
|
14
14
|
}
|
|
15
15
|
function removeSizeProp(attribute) {
|
|
16
|
-
attribute.node.name.name === 'size'
|
|
16
|
+
if (attribute.node.name.name === 'size') {
|
|
17
|
+
j(attribute).remove();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function renameLabelToCaption(attribute) {
|
|
21
|
+
if (attribute.node.name.name === 'caption') {
|
|
22
|
+
j(attribute).replaceWith(j.jsxAttribute(j.jsxIdentifier('label'), attribute.node.value));
|
|
23
|
+
}
|
|
17
24
|
}
|
|
18
25
|
// Обработка ScreenSpinner
|
|
19
26
|
source
|
|
20
27
|
.find(j.JSXOpeningElement)
|
|
21
28
|
.filter(function (path) { return path.value.name.type === 'JSXIdentifier' && path.value.name.name === localName; })
|
|
22
29
|
.find(j.JSXAttribute)
|
|
23
|
-
.forEach(
|
|
30
|
+
.forEach(function (attr) {
|
|
31
|
+
removeSizeProp(attr);
|
|
32
|
+
renameLabelToCaption(attr);
|
|
33
|
+
});
|
|
24
34
|
// Обработка ScreenSpinner.Loader
|
|
25
35
|
source
|
|
26
36
|
.find(j.JSXElement, {
|
|
@@ -34,5 +44,18 @@ function transformer(file, api, options) {
|
|
|
34
44
|
})
|
|
35
45
|
.find(j.JSXAttribute)
|
|
36
46
|
.forEach(removeSizeProp);
|
|
47
|
+
// Обработка ScreenSpinner.Container
|
|
48
|
+
source
|
|
49
|
+
.find(j.JSXElement, {
|
|
50
|
+
openingElement: {
|
|
51
|
+
name: {
|
|
52
|
+
type: 'JSXMemberExpression',
|
|
53
|
+
object: { name: localName },
|
|
54
|
+
property: { name: 'Container' },
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
})
|
|
58
|
+
.find(j.JSXAttribute)
|
|
59
|
+
.forEach(renameLabelToCaption);
|
|
37
60
|
return source.toSource();
|
|
38
61
|
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parser = void 0;
|
|
4
|
+
exports.default = transformer;
|
|
5
|
+
var codemod_helpers_1 = require("../../codemod-helpers");
|
|
6
|
+
var report_1 = require("../../report");
|
|
7
|
+
exports.parser = 'tsx';
|
|
8
|
+
var componentName = 'ScrollArrow';
|
|
9
|
+
var affectedComponents = ['HorizontalScroll', 'Gallery'];
|
|
10
|
+
function arrowSizeManipulator(api, attribute) {
|
|
11
|
+
var _a;
|
|
12
|
+
var node = attribute.node;
|
|
13
|
+
if (((_a = node.value) === null || _a === void 0 ? void 0 : _a.type) === 'StringLiteral') {
|
|
14
|
+
var oldValue = node.value.value;
|
|
15
|
+
var newValue = oldValue === 'm' ? 's' : oldValue === 'l' ? 'm' : undefined;
|
|
16
|
+
if (newValue) {
|
|
17
|
+
node.value = api.jscodeshift.stringLiteral(newValue);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
(0, report_1.report)(api, "Manual changes required for ".concat(componentName, "'s \"size\" prop. Use \"s\" or \"m\" value only."));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function transformer(file, api, options) {
|
|
25
|
+
var alias = options.alias;
|
|
26
|
+
var j = api.jscodeshift;
|
|
27
|
+
var source = j(file.source);
|
|
28
|
+
var localName = (0, codemod_helpers_1.getImportInfo)(j, file, componentName, alias).localName;
|
|
29
|
+
var horizontalScrollLocalName = (0, codemod_helpers_1.getImportInfo)(j, file, affectedComponents[0], alias).localName;
|
|
30
|
+
var galleryLocalName = (0, codemod_helpers_1.getImportInfo)(j, file, affectedComponents[1], alias).localName;
|
|
31
|
+
if (!localName) {
|
|
32
|
+
return source.toSource();
|
|
33
|
+
}
|
|
34
|
+
source
|
|
35
|
+
.find(j.JSXOpeningElement)
|
|
36
|
+
.filter(function (path) { return path.value.name.type === 'JSXIdentifier' && path.value.name.name === localName; })
|
|
37
|
+
.find(j.JSXAttribute, { name: { name: 'size' } })
|
|
38
|
+
.forEach(function (attribute) {
|
|
39
|
+
arrowSizeManipulator(api, attribute);
|
|
40
|
+
});
|
|
41
|
+
source
|
|
42
|
+
.find(j.JSXOpeningElement)
|
|
43
|
+
.filter(function (path) {
|
|
44
|
+
return path.value.name.type === 'JSXIdentifier' &&
|
|
45
|
+
[horizontalScrollLocalName, galleryLocalName].includes(path.value.name.name);
|
|
46
|
+
})
|
|
47
|
+
.find(j.JSXAttribute, { name: { name: 'arrowSize' } })
|
|
48
|
+
.forEach(function (attribute) {
|
|
49
|
+
arrowSizeManipulator(api, attribute);
|
|
50
|
+
});
|
|
51
|
+
return source.toSource();
|
|
52
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parser = void 0;
|
|
4
|
+
exports.default = transformer;
|
|
5
|
+
var codemod_helpers_1 = require("../../codemod-helpers");
|
|
6
|
+
exports.parser = 'tsx';
|
|
7
|
+
var PROPS_TO_REMOVE = ['autoHideScrollbar', 'autoHideScrollbarDelay'];
|
|
8
|
+
function transformer(file, api, options) {
|
|
9
|
+
var alias = options.alias;
|
|
10
|
+
var j = api.jscodeshift;
|
|
11
|
+
var source = j(file.source);
|
|
12
|
+
var localName = (0, codemod_helpers_1.getImportInfo)(j, file, 'Select', alias).localName;
|
|
13
|
+
if (!localName) {
|
|
14
|
+
return source.toSource();
|
|
15
|
+
}
|
|
16
|
+
(0, codemod_helpers_1.removeProps)(j, api, source, localName, PROPS_TO_REMOVE, function () {
|
|
17
|
+
return "need to remove props ".concat(PROPS_TO_REMOVE.join(', '));
|
|
18
|
+
});
|
|
19
|
+
return source.toSource();
|
|
20
|
+
}
|
|
@@ -12,6 +12,7 @@ function transformer(file, api, options) {
|
|
|
12
12
|
var localName = (0, codemod_helpers_1.getImportInfo)(j, file, componentName, alias).localName;
|
|
13
13
|
if (localName) {
|
|
14
14
|
(0, codemod_helpers_1.renameProp)(j, source, localName, { mode: 'appearance' });
|
|
15
|
+
(0, codemod_helpers_1.swapBooleanValue)(api, source, localName, 'wide', 'padding');
|
|
15
16
|
}
|
|
16
17
|
return source.toSource();
|
|
17
18
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parser = void 0;
|
|
4
|
+
exports.default = transformer;
|
|
5
|
+
var codemod_helpers_1 = require("../../codemod-helpers");
|
|
6
|
+
exports.parser = 'tsx';
|
|
7
|
+
function transformer(file, api, options) {
|
|
8
|
+
var alias = options.alias;
|
|
9
|
+
var j = api.jscodeshift;
|
|
10
|
+
var source = j(file.source);
|
|
11
|
+
var localName = (0, codemod_helpers_1.getImportInfo)(j, file, 'SimpleCell', alias).localName;
|
|
12
|
+
if (localName) {
|
|
13
|
+
(0, codemod_helpers_1.renameProp)(j, source, localName, {
|
|
14
|
+
expandable: 'chevron',
|
|
15
|
+
subhead: 'overTitle',
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return source.toSource();
|
|
19
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parser = void 0;
|
|
4
|
+
exports.default = transformer;
|
|
5
|
+
var codemod_helpers_1 = require("../../codemod-helpers");
|
|
6
|
+
var report_1 = require("../../report");
|
|
7
|
+
exports.parser = 'tsx';
|
|
8
|
+
function replaceModeToFixed(j, source, api, localName) {
|
|
9
|
+
source
|
|
10
|
+
.find(j.JSXElement, {
|
|
11
|
+
openingElement: {
|
|
12
|
+
name: {
|
|
13
|
+
name: localName,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
})
|
|
17
|
+
.find(j.JSXAttribute)
|
|
18
|
+
.filter(function (attribute) { return attribute.node.name.name === 'mode'; })
|
|
19
|
+
.forEach(function (attr) {
|
|
20
|
+
var value = (0, codemod_helpers_1.getStringValueFromAttribute)(attr.node);
|
|
21
|
+
if (value === null) {
|
|
22
|
+
(0, report_1.report)(api, ": ".concat(localName, " has been changed. Manual changes required: change prop mode to flag fixed."));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (value === 'overflow') {
|
|
26
|
+
j(attr).remove();
|
|
27
|
+
}
|
|
28
|
+
else if (value === 'fixed') {
|
|
29
|
+
j(attr).replaceWith(j.jsxAttribute(j.jsxIdentifier('fixed')));
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function transformer(file, api, options) {
|
|
34
|
+
var alias = options.alias;
|
|
35
|
+
var j = api.jscodeshift;
|
|
36
|
+
var source = j(file.source);
|
|
37
|
+
var localName = (0, codemod_helpers_1.getImportInfo)(j, file, 'SubnavigationBar', alias).localName;
|
|
38
|
+
if (!localName) {
|
|
39
|
+
return source.toSource();
|
|
40
|
+
}
|
|
41
|
+
(0, codemod_helpers_1.renameProp)(j, source, localName, {
|
|
42
|
+
subheader: 'subtitle',
|
|
43
|
+
});
|
|
44
|
+
replaceModeToFixed(j, source, api, localName);
|
|
45
|
+
return source.toSource();
|
|
46
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parser = void 0;
|
|
4
|
+
exports.default = transformer;
|
|
5
|
+
var codemod_helpers_1 = require("../../codemod-helpers");
|
|
6
|
+
exports.parser = 'tsx';
|
|
7
|
+
function transformer(file, api, options) {
|
|
8
|
+
var alias = options.alias;
|
|
9
|
+
var j = api.jscodeshift;
|
|
10
|
+
var source = j(file.source);
|
|
11
|
+
var localName = (0, codemod_helpers_1.getImportInfo)(j, file, 'SubnavigationButton', alias).localName;
|
|
12
|
+
if (localName) {
|
|
13
|
+
(0, codemod_helpers_1.renameProp)(j, source, localName, {
|
|
14
|
+
expandable: 'chevron',
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return source.toSource();
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parser = void 0;
|
|
4
|
+
exports.default = transformer;
|
|
5
|
+
var codemod_helpers_1 = require("../../codemod-helpers");
|
|
6
|
+
exports.parser = 'tsx';
|
|
7
|
+
function transformer(file, api, options) {
|
|
8
|
+
var alias = options.alias;
|
|
9
|
+
var j = api.jscodeshift;
|
|
10
|
+
var source = j(file.source);
|
|
11
|
+
var localName = (0, codemod_helpers_1.getImportInfo)(j, file, 'TabbarItem', alias).localName;
|
|
12
|
+
if (localName) {
|
|
13
|
+
(0, codemod_helpers_1.renameProp)(j, source, localName, { text: 'label' });
|
|
14
|
+
}
|
|
15
|
+
return source.toSource();
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parser = void 0;
|
|
4
|
+
exports.default = transformer;
|
|
5
|
+
var codemod_helpers_1 = require("../../codemod-helpers");
|
|
6
|
+
exports.parser = 'tsx';
|
|
7
|
+
function transformer(file, api, options) {
|
|
8
|
+
var alias = options.alias;
|
|
9
|
+
var j = api.jscodeshift;
|
|
10
|
+
var source = j(file.source);
|
|
11
|
+
var localName = (0, codemod_helpers_1.getImportInfo)(j, file, 'Tooltip', alias).localName;
|
|
12
|
+
if (localName) {
|
|
13
|
+
(0, codemod_helpers_1.renameProp)(j, source, localName, { text: 'description', header: 'title' });
|
|
14
|
+
}
|
|
15
|
+
return source.toSource();
|
|
16
|
+
}
|
|
@@ -20,28 +20,15 @@ function transformer(file, api, options) {
|
|
|
20
20
|
'row-reverse': 'inline-end',
|
|
21
21
|
'column': 'block-start',
|
|
22
22
|
};
|
|
23
|
-
var getValueFromAttribute = function (attribute) {
|
|
24
|
-
var _a, _b;
|
|
25
|
-
if (((_a = attribute.value) === null || _a === void 0 ? void 0 : _a.type) === 'StringLiteral') {
|
|
26
|
-
return attribute.value.value;
|
|
27
|
-
}
|
|
28
|
-
if (((_b = attribute.value) === null || _b === void 0 ? void 0 : _b.type) === 'JSXExpressionContainer') {
|
|
29
|
-
var expression = attribute.value.expression;
|
|
30
|
-
if (expression.type === 'StringLiteral') {
|
|
31
|
-
return expression.value;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return null;
|
|
35
|
-
};
|
|
36
23
|
source
|
|
37
24
|
.find(j.JSXElement, { openingElement: { name: { name: localName } } })
|
|
38
25
|
.find(j.JSXAttribute, { name: { name: attributeToReplace } })
|
|
39
26
|
.forEach(function (path) {
|
|
40
27
|
var avatar = path.node;
|
|
41
28
|
avatar.name.name = newAttributeName;
|
|
42
|
-
var value =
|
|
29
|
+
var value = (0, codemod_helpers_1.getStringValueFromAttribute)(avatar);
|
|
43
30
|
if (!value || !directionToAvatarsPosition[value]) {
|
|
44
|
-
(0, report_1.report)(api, ": ".concat(localName, " has been changed. Manual changes required: need to change direction prop to avatarsPosition"));
|
|
31
|
+
(0, report_1.report)(api, ": ".concat(localName, " has been changed. Manual changes required: need to change direction prop to avatarsPosition."));
|
|
45
32
|
return;
|
|
46
33
|
}
|
|
47
34
|
avatar.value = j.stringLiteral(directionToAvatarsPosition[value]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vkontakte/vkui-codemods",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Codemods for automatic VKUI major version upgrade",
|
|
5
5
|
"repository": "https://github.com/VKCOM/VKUI",
|
|
6
6
|
"homepage": "https://vkcom.github.io/VKUI/",
|
|
@@ -16,18 +16,18 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"chalk": "^4.1.2",
|
|
18
18
|
"commander": "^12.1.0",
|
|
19
|
-
"cross-spawn": "^7.0.
|
|
20
|
-
"jscodeshift": "^17.
|
|
19
|
+
"cross-spawn": "^7.0.5",
|
|
20
|
+
"jscodeshift": "^17.1.1",
|
|
21
21
|
"prompts": "^2.4.2",
|
|
22
|
-
"typescript": "^5.
|
|
22
|
+
"typescript": "^5.7.2"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@swc/core": "^1.
|
|
26
|
-
"@swc/jest": "^0.2.
|
|
25
|
+
"@swc/core": "^1.9.3",
|
|
26
|
+
"@swc/jest": "^0.2.37",
|
|
27
27
|
"@types/cross-spawn": "^6.0.6",
|
|
28
|
-
"@types/jest": "^29.5.
|
|
29
|
-
"@types/jscodeshift": "^0.
|
|
30
|
-
"@types/node": "^22.
|
|
28
|
+
"@types/jest": "^29.5.14",
|
|
29
|
+
"@types/jscodeshift": "^0.12.0",
|
|
30
|
+
"@types/node": "^22.10.1",
|
|
31
31
|
"@types/prompts": "^2.4.9",
|
|
32
32
|
"jest": "^29.7.0",
|
|
33
33
|
"ts-node": "^10.9.2"
|