@sanity/ui-codemod 1.0.0-alpha.5 → 1.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks-es/addAttribute.js +1 -1
- package/dist/_chunks-es/box.mods.js +1 -100
- package/dist/_chunks-es/box.mods.js.map +1 -1
- package/dist/_chunks-es/flex.mods.js +1 -150
- package/dist/_chunks-es/flex.mods.js.map +1 -1
- package/dist/_chunks-es/layout-mods.js +4 -0
- package/dist/_chunks-es/layout-mods.js.map +1 -1
- package/dist/_chunks-es/replaceElement.js +102 -0
- package/dist/_chunks-es/replaceElement.js.map +1 -0
- package/dist/_chunks-es/{transformComponent.js → transformStyledComponents.js} +150 -2
- package/dist/_chunks-es/transformStyledComponents.js.map +1 -0
- package/dist/commands/latest/inline.d.ts +47 -0
- package/dist/commands/latest/inline.js +17 -0
- package/dist/commands/latest/inline.js.map +1 -0
- package/dist/commands/latest/label.d.ts +47 -0
- package/dist/commands/latest/label.js +17 -0
- package/dist/commands/latest/label.js.map +1 -0
- package/dist/commands/latest/stack.d.ts +47 -0
- package/dist/commands/latest/stack.js +17 -0
- package/dist/commands/latest/stack.js.map +1 -0
- package/dist/transforms/latest/box/box.js +4 -3
- package/dist/transforms/latest/box/box.js.map +1 -1
- package/dist/transforms/latest/card/card.js +26 -10
- package/dist/transforms/latest/card/card.js.map +1 -1
- package/dist/transforms/latest/code/code.js +18 -7
- package/dist/transforms/latest/code/code.js.map +1 -1
- package/dist/transforms/latest/container/container.js +15 -7
- package/dist/transforms/latest/container/container.js.map +1 -1
- package/dist/transforms/latest/flex/flex.js +2 -2
- package/dist/transforms/latest/grid/grid.js +15 -7
- package/dist/transforms/latest/grid/grid.js.map +1 -1
- package/dist/transforms/latest/heading/heading.js +18 -7
- package/dist/transforms/latest/heading/heading.js.map +1 -1
- package/dist/transforms/latest/inline/inline.d.ts +18 -0
- package/dist/transforms/latest/inline/inline.js +80 -0
- package/dist/transforms/latest/inline/inline.js.map +1 -0
- package/dist/transforms/latest/label/label.d.ts +18 -0
- package/dist/transforms/latest/label/label.js +111 -0
- package/dist/transforms/latest/label/label.js.map +1 -0
- package/dist/transforms/latest/stack/stack.d.ts +18 -0
- package/dist/transforms/latest/stack/stack.js +67 -0
- package/dist/transforms/latest/stack/stack.js.map +1 -0
- package/dist/transforms/latest/text/text.js +18 -7
- package/dist/transforms/latest/text/text.js.map +1 -1
- package/package.json +7 -1
- package/src/constants/latest/layout-mods.ts +4 -0
- package/src/transforms/latest/box/box.test.ts +3 -8
- package/src/transforms/latest/card/card.test.ts +100 -1
- package/src/transforms/latest/card/card.ts +42 -19
- package/src/transforms/latest/code/code.test.ts +84 -1
- package/src/transforms/latest/code/code.ts +47 -16
- package/src/transforms/latest/container/container.test.ts +78 -1
- package/src/transforms/latest/container/container.ts +29 -9
- package/src/transforms/latest/grid/grid.test.ts +78 -1
- package/src/transforms/latest/grid/grid.ts +29 -9
- package/src/transforms/latest/heading/heading.test.ts +84 -1
- package/src/transforms/latest/heading/heading.ts +47 -16
- package/src/transforms/latest/inline/inline.test.ts +78 -1
- package/src/transforms/latest/inline/inline.ts +29 -9
- package/src/transforms/latest/label/label.test.ts +84 -1
- package/src/transforms/latest/label/label.ts +36 -1
- package/src/transforms/latest/stack/stack.test.ts +100 -1
- package/src/transforms/latest/stack/stack.ts +29 -7
- package/src/transforms/latest/text/text.test.ts +84 -1
- package/src/transforms/latest/text/text.ts +58 -19
- package/dist/_chunks-es/transformComponent.js.map +0 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import "jscodeshift";
|
|
2
|
+
import { addAttribute } from "../../../_chunks-es/addAttribute.js";
|
|
3
|
+
import { transformComponent, getComponentLocalNames, getStyledComponentAliases, shouldTransformComponent, transformImport, transformStyledComponents, transformAttributes } from "../../../_chunks-es/transformStyledComponents.js";
|
|
4
|
+
import { replaceElement } from "../../../_chunks-es/replaceElement.js";
|
|
5
|
+
const LABEL_MODS = {
|
|
6
|
+
accent: {
|
|
7
|
+
type: "rename-mapped",
|
|
8
|
+
name: "tone",
|
|
9
|
+
mapping: {
|
|
10
|
+
true: "suggest"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
flex: {
|
|
14
|
+
type: "style-mapped",
|
|
15
|
+
style: "flex",
|
|
16
|
+
mapping: {
|
|
17
|
+
none: "0 0 auto",
|
|
18
|
+
auto: "1 1 auto",
|
|
19
|
+
initial: "0 1 auto",
|
|
20
|
+
1: "1",
|
|
21
|
+
2: "2",
|
|
22
|
+
3: "3",
|
|
23
|
+
4: "4",
|
|
24
|
+
5: "5",
|
|
25
|
+
6: "6",
|
|
26
|
+
7: "7",
|
|
27
|
+
8: "8",
|
|
28
|
+
9: "9",
|
|
29
|
+
10: "10",
|
|
30
|
+
11: "11",
|
|
31
|
+
12: "12"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
maxWidth: {
|
|
35
|
+
type: "style-mapped",
|
|
36
|
+
style: "maxWidth",
|
|
37
|
+
mapping: {
|
|
38
|
+
auto: "none",
|
|
39
|
+
fill: "100%",
|
|
40
|
+
0: "20rem",
|
|
41
|
+
1: "40rem",
|
|
42
|
+
2: "60rem",
|
|
43
|
+
3: "80rem",
|
|
44
|
+
4: "100rem",
|
|
45
|
+
5: "120rem"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
textOverflow: {
|
|
49
|
+
type: "rename-mapped",
|
|
50
|
+
name: "truncate",
|
|
51
|
+
mapping: {
|
|
52
|
+
ellipsis: 1,
|
|
53
|
+
clip: 1
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
width: {
|
|
57
|
+
type: "style-mapped",
|
|
58
|
+
style: "width",
|
|
59
|
+
mapping: {
|
|
60
|
+
auto: "auto",
|
|
61
|
+
fill: "100%",
|
|
62
|
+
stretch: "stretch",
|
|
63
|
+
min: "min-content",
|
|
64
|
+
max: "max-content",
|
|
65
|
+
0: "20rem",
|
|
66
|
+
1: "40rem",
|
|
67
|
+
2: "60rem",
|
|
68
|
+
3: "80rem",
|
|
69
|
+
4: "100rem",
|
|
70
|
+
5: "120rem"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}, TODO_WARNING = "Please double check the Label migration below";
|
|
74
|
+
function transform(fileInfo, api, options) {
|
|
75
|
+
const { fromPackage, toPackage } = options || {};
|
|
76
|
+
return transformComponent(fileInfo, api, ({ j, root, markChanged }) => {
|
|
77
|
+
const localNames = getComponentLocalNames(j, root, "Label", options), styledAliases = getStyledComponentAliases(
|
|
78
|
+
j,
|
|
79
|
+
root,
|
|
80
|
+
"Label",
|
|
81
|
+
fileInfo.path,
|
|
82
|
+
localNames,
|
|
83
|
+
options
|
|
84
|
+
);
|
|
85
|
+
shouldTransformComponent(j, root, "Label", localNames, options, styledAliases) && (transformImport(j, root, "Label", fromPackage, toPackage) && markChanged(), replaceElement(
|
|
86
|
+
j,
|
|
87
|
+
root,
|
|
88
|
+
() => !0,
|
|
89
|
+
{
|
|
90
|
+
element: "Label",
|
|
91
|
+
localNames
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
element: "Eyebrow",
|
|
95
|
+
callback: (path) => {
|
|
96
|
+
let changed = !1;
|
|
97
|
+
return transformAttributes(j, path, LABEL_MODS, TODO_WARNING) && (changed = !0), addAttribute(j, path.node, "as", "div") && (changed = !0), addAttribute(j, path.node, "trim", !0) && (changed = !0), changed;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
) && markChanged(), transformStyledComponents(j, root, styledAliases, () => !0, {
|
|
101
|
+
callback: (path) => {
|
|
102
|
+
let changed = !1;
|
|
103
|
+
return transformAttributes(j, path, LABEL_MODS, TODO_WARNING) && (changed = !0), addAttribute(j, path.node, "as", "div") && (changed = !0), addAttribute(j, path.node, "trim", !0) && (changed = !0), changed;
|
|
104
|
+
}
|
|
105
|
+
}) && markChanged());
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export {
|
|
109
|
+
transform as default
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.js","sources":["../../../../src/transforms/latest/label/label.mods.ts","../../../../src/transforms/latest/label/label.ts"],"sourcesContent":["import type {AttributeMods} from '../../../types/AttributeMods'\n\n/** @internal */\nexport const LABEL_MODS: AttributeMods = {\n accent: {\n type: 'rename-mapped',\n name: 'tone',\n mapping: {\n true: 'suggest',\n },\n },\n flex: {\n type: 'style-mapped',\n style: 'flex',\n mapping: {\n none: '0 0 auto',\n auto: '1 1 auto',\n initial: '0 1 auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n },\n },\n maxWidth: {\n type: 'style-mapped',\n style: 'maxWidth',\n mapping: {\n auto: 'none',\n fill: '100%',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n textOverflow: {\n type: 'rename-mapped',\n name: 'truncate',\n mapping: {\n ellipsis: 1,\n clip: 1,\n },\n },\n width: {\n type: 'style-mapped',\n style: 'width',\n mapping: {\n auto: 'auto',\n fill: '100%',\n stretch: 'stretch',\n min: 'min-content',\n max: 'max-content',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n}\n","import {type API, type FileInfo} from 'jscodeshift'\n\nimport type {BaseOptions} from '../../../types/BaseOptions'\nimport {addAttribute} from '../../../utils/addAttribute'\nimport {getComponentLocalNames} from '../../../utils/getComponentLocalNames'\nimport {getStyledComponentAliases} from '../../../utils/getStyledComponentAliases'\nimport {replaceElement} from '../../../utils/replaceElement'\nimport {shouldTransformComponent} from '../../../utils/shouldTransformComponent'\nimport {transformAttributes} from '../../../utils/transformAttributes'\nimport {transformComponent} from '../../../utils/transformComponent'\nimport {transformImport} from '../../../utils/transformImport'\nimport {transformStyledComponents} from '../../../utils/transformStyledComponents'\nimport {LABEL_MODS} from './label.mods'\n\nconst TODO_WARNING = 'Please double check the Label migration below'\n\n/** @internal */\nexport default function transform(\n fileInfo: FileInfo,\n api: API,\n options: BaseOptions,\n): string | undefined {\n const {fromPackage, toPackage} = options || {}\n\n return transformComponent(fileInfo, api, ({j, root, markChanged}) => {\n const localNames = getComponentLocalNames(j, root, 'Label', options)\n const styledAliases = getStyledComponentAliases(\n j,\n root,\n 'Label',\n fileInfo.path,\n localNames,\n options,\n )\n\n if (!shouldTransformComponent(j, root, 'Label', localNames, options, styledAliases)) {\n return\n }\n\n if (transformImport(j, root, 'Label', fromPackage, toPackage)) {\n markChanged()\n }\n\n if (\n replaceElement(\n j,\n root,\n () => true,\n {\n element: 'Label',\n localNames,\n },\n {\n element: 'Eyebrow',\n callback: (path) => {\n let changed = false\n\n if (transformAttributes(j, path, LABEL_MODS, TODO_WARNING)) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'as', 'div')) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'trim', true)) {\n changed = true\n }\n\n return changed\n },\n },\n )\n ) {\n markChanged()\n }\n\n if (\n transformStyledComponents(j, root, styledAliases, () => true, {\n callback: (path) => {\n let changed = false\n\n if (transformAttributes(j, path, LABEL_MODS, TODO_WARNING)) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'as', 'div')) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'trim', true)) {\n changed = true\n }\n\n return changed\n },\n })\n ) {\n markChanged()\n }\n })\n}\n"],"names":[],"mappings":";;;;AAGO,MAAM,aAA4B;AAAA,EACvC,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAAA,EAEF,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,OAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAEJ,GCzDM,eAAe;AAGrB,SAAwB,UACtB,UACA,KACA,SACoB;AACpB,QAAM,EAAC,aAAa,UAAA,IAAa,WAAW,CAAA;AAE5C,SAAO,mBAAmB,UAAU,KAAK,CAAC,EAAC,GAAG,MAAM,kBAAiB;AACnE,UAAM,aAAa,uBAAuB,GAAG,MAAM,SAAS,OAAO,GAC7D,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAGG,6BAAyB,GAAG,MAAM,SAAS,YAAY,SAAS,aAAa,MAI9E,gBAAgB,GAAG,MAAM,SAAS,aAAa,SAAS,KAC1D,eAIA;AAAA,MACE;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,SAAS;AAAA,QACT,UAAU,CAAC,SAAS;AAClB,cAAI,UAAU;AAEd,iBAAI,oBAAoB,GAAG,MAAM,YAAY,YAAY,MACvD,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,MAAM,KAAK,MACxC,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,QAAQ,EAAI,MACzC,UAAU,KAGL;AAAA,QACT;AAAA,MAAA;AAAA,IACF,KAGF,eAIA,0BAA0B,GAAG,MAAM,eAAe,MAAM,IAAM;AAAA,MAC5D,UAAU,CAAC,SAAS;AAClB,YAAI,UAAU;AAEd,eAAI,oBAAoB,GAAG,MAAM,YAAY,YAAY,MACvD,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,MAAM,KAAK,MACxC,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,QAAQ,EAAI,MACzC,UAAU,KAGL;AAAA,MACT;AAAA,IAAA,CACD,KAED,YAAA;AAAA,EAEJ,CAAC;AACH;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { API } from "jscodeshift";
|
|
2
|
+
import { FileInfo } from "jscodeshift";
|
|
3
|
+
import type { Options } from "jscodeshift";
|
|
4
|
+
|
|
5
|
+
declare interface BaseOptions extends Options {
|
|
6
|
+
fromPackage?: string;
|
|
7
|
+
toPackage?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** @internal */
|
|
11
|
+
declare function transform(
|
|
12
|
+
fileInfo: FileInfo,
|
|
13
|
+
api: API,
|
|
14
|
+
options?: BaseOptions,
|
|
15
|
+
): string | undefined;
|
|
16
|
+
export default transform;
|
|
17
|
+
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import "jscodeshift";
|
|
2
|
+
import { addAttribute } from "../../../_chunks-es/addAttribute.js";
|
|
3
|
+
import { transformComponent, getComponentLocalNames, getStyledComponentAliases, shouldTransformComponent, transformImport, transformStyledComponents, transformAttributes } from "../../../_chunks-es/transformStyledComponents.js";
|
|
4
|
+
import { replaceElement } from "../../../_chunks-es/replaceElement.js";
|
|
5
|
+
import { FLEX_MODS } from "../../../_chunks-es/flex.mods.js";
|
|
6
|
+
const STACK_MODS = {
|
|
7
|
+
sizing: {
|
|
8
|
+
type: "remove"
|
|
9
|
+
},
|
|
10
|
+
space: {
|
|
11
|
+
type: "rename-only",
|
|
12
|
+
name: "gap"
|
|
13
|
+
}
|
|
14
|
+
}, STACK_TODO_WARNING = "Please double check the Stack migration below", FLEX_TODO_WARNING = "Please double check the Flex migration below", STYLED_TODO_WARNING = "Please double check styled(Stack) migration below";
|
|
15
|
+
function replaceWithFlex(attrs) {
|
|
16
|
+
return attrs ? attrs.some(
|
|
17
|
+
(attr) => attr.type === "JSXAttribute" && attr.name.type === "JSXIdentifier" && (attr.name.name.startsWith("padding") || attr.name.name.startsWith("margin") || attr.name.name.startsWith("overflow") || attr.name.name.startsWith("flex") || attr.name.name.endsWith("height") || attr.name.name.endsWith("width"))
|
|
18
|
+
) : !1;
|
|
19
|
+
}
|
|
20
|
+
function transform(fileInfo, api, options) {
|
|
21
|
+
const { fromPackage, toPackage } = options || {};
|
|
22
|
+
return transformComponent(fileInfo, api, ({ j, root, markChanged }) => {
|
|
23
|
+
const localNames = getComponentLocalNames(j, root, "Stack", options), styledAliases = getStyledComponentAliases(
|
|
24
|
+
j,
|
|
25
|
+
root,
|
|
26
|
+
"Stack",
|
|
27
|
+
fileInfo.path,
|
|
28
|
+
localNames,
|
|
29
|
+
options
|
|
30
|
+
);
|
|
31
|
+
shouldTransformComponent(j, root, "Stack", localNames, options, styledAliases) && (transformImport(j, root, "Stack", fromPackage, toPackage) && markChanged(), replaceElement(
|
|
32
|
+
j,
|
|
33
|
+
root,
|
|
34
|
+
(attrs) => replaceWithFlex(attrs),
|
|
35
|
+
{
|
|
36
|
+
element: "Stack",
|
|
37
|
+
localNames
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
element: "Flex",
|
|
41
|
+
callback: (path) => {
|
|
42
|
+
let changed = !1;
|
|
43
|
+
return addAttribute(j, path.node, "flexDirection", "column") && (changed = !0), transformAttributes(j, path, FLEX_MODS, FLEX_TODO_WARNING) && (changed = !0), changed;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
) && markChanged(), replaceElement(
|
|
47
|
+
j,
|
|
48
|
+
root,
|
|
49
|
+
(attrs) => !replaceWithFlex(attrs),
|
|
50
|
+
{
|
|
51
|
+
element: "Stack",
|
|
52
|
+
localNames
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
element: "VStack",
|
|
56
|
+
callback: (path) => transformAttributes(j, path, STACK_MODS, STACK_TODO_WARNING)
|
|
57
|
+
}
|
|
58
|
+
) && markChanged(), transformStyledComponents(j, root, styledAliases, (attrs) => !replaceWithFlex(attrs), {
|
|
59
|
+
warning: STYLED_TODO_WARNING,
|
|
60
|
+
callback: (path) => transformAttributes(j, path, STACK_MODS, STACK_TODO_WARNING)
|
|
61
|
+
}) && markChanged());
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
transform as default
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack.js","sources":["../../../../src/transforms/latest/stack/stack.mods.ts","../../../../src/transforms/latest/stack/stack.ts"],"sourcesContent":["import type {AttributeMods} from '../../../types/AttributeMods'\n\n/** @internal */\nexport const STACK_MODS: AttributeMods = {\n sizing: {\n type: 'remove',\n },\n space: {\n type: 'rename-only',\n name: 'gap',\n },\n}\n","import {type API, type FileInfo, type JSXElement} from 'jscodeshift'\n\nimport type {BaseOptions} from '../../../types/BaseOptions'\nimport {addAttribute} from '../../../utils/addAttribute'\nimport {getComponentLocalNames} from '../../../utils/getComponentLocalNames'\nimport {getStyledComponentAliases} from '../../../utils/getStyledComponentAliases'\nimport {replaceElement} from '../../../utils/replaceElement'\nimport {shouldTransformComponent} from '../../../utils/shouldTransformComponent'\nimport {transformAttributes} from '../../../utils/transformAttributes'\nimport {transformComponent} from '../../../utils/transformComponent'\nimport {transformImport} from '../../../utils/transformImport'\nimport {transformStyledComponents} from '../../../utils/transformStyledComponents'\nimport {FLEX_MODS} from '../flex/flex.mods'\nimport {STACK_MODS} from './stack.mods'\n\nconst STACK_TODO_WARNING = 'Please double check the Stack migration below'\nconst FLEX_TODO_WARNING = 'Please double check the Flex migration below'\nconst STYLED_TODO_WARNING = 'Please double check styled(Stack) migration below'\n\nfunction replaceWithFlex(attrs: JSXElement['openingElement']['attributes']) {\n if (!attrs) {\n return false\n }\n\n return attrs.some(\n (attr) =>\n attr.type === 'JSXAttribute' &&\n attr.name.type === 'JSXIdentifier' &&\n (attr.name.name.startsWith('padding') ||\n attr.name.name.startsWith('margin') ||\n attr.name.name.startsWith('overflow') ||\n attr.name.name.startsWith('flex') ||\n attr.name.name.endsWith('height') ||\n attr.name.name.endsWith('width')),\n )\n}\n\n/** @internal */\nexport default function transform(\n fileInfo: FileInfo,\n api: API,\n options?: BaseOptions,\n): string | undefined {\n const {fromPackage, toPackage} = options || {}\n\n return transformComponent(fileInfo, api, ({j, root, markChanged}) => {\n const localNames = getComponentLocalNames(j, root, 'Stack', options)\n const styledAliases = getStyledComponentAliases(\n j,\n root,\n 'Stack',\n fileInfo.path,\n localNames,\n options,\n )\n\n if (!shouldTransformComponent(j, root, 'Stack', localNames, options, styledAliases)) {\n return\n }\n\n if (transformImport(j, root, 'Stack', fromPackage, toPackage)) {\n markChanged()\n }\n\n if (\n replaceElement(\n j,\n root,\n (attrs) => replaceWithFlex(attrs),\n {\n element: 'Stack',\n localNames,\n },\n {\n element: 'Flex',\n callback: (path) => {\n let changed = false\n\n if (addAttribute(j, path.node, 'flexDirection', 'column')) {\n changed = true\n }\n\n if (transformAttributes(j, path, FLEX_MODS, FLEX_TODO_WARNING)) {\n changed = true\n }\n\n return changed\n },\n },\n )\n ) {\n markChanged()\n }\n\n if (\n replaceElement(\n j,\n root,\n (attrs) => {\n return !replaceWithFlex(attrs)\n },\n {\n element: 'Stack',\n localNames,\n },\n {\n element: 'VStack',\n callback: (path) => transformAttributes(j, path, STACK_MODS, STACK_TODO_WARNING),\n },\n )\n ) {\n markChanged()\n }\n\n if (\n transformStyledComponents(j, root, styledAliases, (attrs) => !replaceWithFlex(attrs), {\n warning: STYLED_TODO_WARNING,\n callback: (path) => transformAttributes(j, path, STACK_MODS, STACK_TODO_WARNING),\n })\n ) {\n markChanged()\n }\n })\n}\n"],"names":[],"mappings":";;;;;AAGO,MAAM,aAA4B;AAAA,EACvC,QAAQ;AAAA,IACN,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAEV,GCIM,qBAAqB,iDACrB,oBAAoB,gDACpB,sBAAsB;AAE5B,SAAS,gBAAgB,OAAmD;AAC1E,SAAK,QAIE,MAAM;AAAA,IACX,CAAC,SACC,KAAK,SAAS,kBACd,KAAK,KAAK,SAAS,oBAClB,KAAK,KAAK,KAAK,WAAW,SAAS,KAClC,KAAK,KAAK,KAAK,WAAW,QAAQ,KAClC,KAAK,KAAK,KAAK,WAAW,UAAU,KACpC,KAAK,KAAK,KAAK,WAAW,MAAM,KAChC,KAAK,KAAK,KAAK,SAAS,QAAQ,KAChC,KAAK,KAAK,KAAK,SAAS,OAAO;AAAA,EAAA,IAZ5B;AAcX;AAGA,SAAwB,UACtB,UACA,KACA,SACoB;AACpB,QAAM,EAAC,aAAa,UAAA,IAAa,WAAW,CAAA;AAE5C,SAAO,mBAAmB,UAAU,KAAK,CAAC,EAAC,GAAG,MAAM,kBAAiB;AACnE,UAAM,aAAa,uBAAuB,GAAG,MAAM,SAAS,OAAO,GAC7D,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAGG,6BAAyB,GAAG,MAAM,SAAS,YAAY,SAAS,aAAa,MAI9E,gBAAgB,GAAG,MAAM,SAAS,aAAa,SAAS,KAC1D,eAIA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,UAAU,gBAAgB,KAAK;AAAA,MAChC;AAAA,QACE,SAAS;AAAA,QACT;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,SAAS;AAAA,QACT,UAAU,CAAC,SAAS;AAClB,cAAI,UAAU;AAEd,iBAAI,aAAa,GAAG,KAAK,MAAM,iBAAiB,QAAQ,MACtD,UAAU,KAGR,oBAAoB,GAAG,MAAM,WAAW,iBAAiB,MAC3D,UAAU,KAGL;AAAA,QACT;AAAA,MAAA;AAAA,IACF,KAGF,eAIA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,UACQ,CAAC,gBAAgB,KAAK;AAAA,MAE/B;AAAA,QACE,SAAS;AAAA,QACT;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,SAAS;AAAA,QACT,UAAU,CAAC,SAAS,oBAAoB,GAAG,MAAM,YAAY,kBAAkB;AAAA,MAAA;AAAA,IACjF,KAGF,YAAA,GAIA,0BAA0B,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,gBAAgB,KAAK,GAAG;AAAA,MACpF,SAAS;AAAA,MACT,UAAU,CAAC,SAAS,oBAAoB,GAAG,MAAM,YAAY,kBAAkB;AAAA,IAAA,CAChF,KAED,YAAA;AAAA,EAEJ,CAAC;AACH;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "jscodeshift";
|
|
2
2
|
import { addAttribute } from "../../../_chunks-es/addAttribute.js";
|
|
3
|
-
import { transformComponent, getComponentLocalNames, shouldTransformComponent, transformImport, transformAttributes } from "../../../_chunks-es/
|
|
3
|
+
import { transformComponent, getComponentLocalNames, getStyledComponentAliases, shouldTransformComponent, transformImport, transformAttributes, transformStyledComponents } from "../../../_chunks-es/transformStyledComponents.js";
|
|
4
4
|
const TEXT_MODS = {
|
|
5
5
|
accent: {
|
|
6
6
|
type: "rename-mapped",
|
|
@@ -73,13 +73,24 @@ const TEXT_MODS = {
|
|
|
73
73
|
function transform(fileInfo, api, options) {
|
|
74
74
|
const { fromPackage, toPackage } = options || {};
|
|
75
75
|
return transformComponent(fileInfo, api, ({ j, root, markChanged }) => {
|
|
76
|
-
const localNames = getComponentLocalNames(j, root, "Text", options)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
const localNames = getComponentLocalNames(j, root, "Text", options), styledAliases = getStyledComponentAliases(
|
|
77
|
+
j,
|
|
78
|
+
root,
|
|
79
|
+
"Text",
|
|
80
|
+
fileInfo.path,
|
|
81
|
+
localNames,
|
|
82
|
+
options
|
|
83
|
+
);
|
|
84
|
+
shouldTransformComponent(j, root, "Text", localNames, options, styledAliases) && (transformImport(j, root, "Text", fromPackage, toPackage) && markChanged(), root.find(j.JSXOpeningElement).forEach((path) => {
|
|
80
85
|
let changed = !1;
|
|
81
|
-
|
|
82
|
-
|
|
86
|
+
const name = path.node.name;
|
|
87
|
+
name.type !== "JSXIdentifier" || !localNames.has(name.name) || (transformAttributes(j, path, TEXT_MODS, TODO_WARNING) && (changed = !0), addAttribute(j, path.node, "as", "div") && (changed = !0), addAttribute(j, path.node, "trim", !0) && (changed = !0), changed && markChanged());
|
|
88
|
+
}), transformStyledComponents(j, root, styledAliases, () => !0, {
|
|
89
|
+
callback: (path) => {
|
|
90
|
+
let changed = !1;
|
|
91
|
+
return transformAttributes(j, path, TEXT_MODS, TODO_WARNING) && (changed = !0), addAttribute(j, path.node, "as", "div") && (changed = !0), addAttribute(j, path.node, "trim", !0) && (changed = !0), changed && markChanged(), changed;
|
|
92
|
+
}
|
|
93
|
+
}) && markChanged());
|
|
83
94
|
});
|
|
84
95
|
}
|
|
85
96
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sources":["../../../../src/transforms/latest/text/text.mods.ts","../../../../src/transforms/latest/text/text.ts"],"sourcesContent":["import type {AttributeMods} from '../../../types/AttributeMods'\n\n/** @internal */\nexport const TEXT_MODS: AttributeMods = {\n accent: {\n type: 'rename-mapped',\n name: 'tone',\n mapping: {\n true: 'suggest',\n },\n },\n flex: {\n type: 'style-mapped',\n style: 'flex',\n mapping: {\n none: '0 0 auto',\n auto: '1 1 auto',\n initial: '0 1 auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n },\n },\n maxWidth: {\n type: 'style-mapped',\n style: 'maxWidth',\n mapping: {\n auto: 'none',\n fill: '100%',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n textOverflow: {\n type: 'rename-mapped',\n name: 'truncate',\n mapping: {\n ellipsis: 1,\n clip: 1,\n },\n },\n width: {\n type: 'style-mapped',\n style: 'width',\n mapping: {\n auto: 'auto',\n fill: '100%',\n stretch: 'stretch',\n min: 'min-content',\n max: 'max-content',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n}\n","import {type API, type FileInfo} from 'jscodeshift'\n\nimport type {BaseOptions} from '../../../types/BaseOptions'\nimport {addAttribute} from '../../../utils/addAttribute'\nimport {getComponentLocalNames} from '../../../utils/getComponentLocalNames'\nimport {shouldTransformComponent} from '../../../utils/shouldTransformComponent'\nimport {transformAttributes} from '../../../utils/transformAttributes'\nimport {transformComponent} from '../../../utils/transformComponent'\nimport {transformImport} from '../../../utils/transformImport'\nimport {TEXT_MODS} from './text.mods'\n\nconst TODO_WARNING = 'Please double check the Text migration below'\n\n/** @internal */\nexport default function transform(\n fileInfo: FileInfo,\n api: API,\n options: BaseOptions,\n): string | undefined {\n const {fromPackage, toPackage} = options || {}\n\n return transformComponent(fileInfo, api, ({j, root, markChanged}) => {\n const localNames = getComponentLocalNames(j, root, 'Text', options)\n\n if (!shouldTransformComponent(j, root, 'Text', localNames, options)) {\n return\n }\n\n if (transformImport(j, root, 'Text', fromPackage, toPackage)) {\n markChanged()\n }\n\n root
|
|
1
|
+
{"version":3,"file":"text.js","sources":["../../../../src/transforms/latest/text/text.mods.ts","../../../../src/transforms/latest/text/text.ts"],"sourcesContent":["import type {AttributeMods} from '../../../types/AttributeMods'\n\n/** @internal */\nexport const TEXT_MODS: AttributeMods = {\n accent: {\n type: 'rename-mapped',\n name: 'tone',\n mapping: {\n true: 'suggest',\n },\n },\n flex: {\n type: 'style-mapped',\n style: 'flex',\n mapping: {\n none: '0 0 auto',\n auto: '1 1 auto',\n initial: '0 1 auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n },\n },\n maxWidth: {\n type: 'style-mapped',\n style: 'maxWidth',\n mapping: {\n auto: 'none',\n fill: '100%',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n textOverflow: {\n type: 'rename-mapped',\n name: 'truncate',\n mapping: {\n ellipsis: 1,\n clip: 1,\n },\n },\n width: {\n type: 'style-mapped',\n style: 'width',\n mapping: {\n auto: 'auto',\n fill: '100%',\n stretch: 'stretch',\n min: 'min-content',\n max: 'max-content',\n 0: '20rem',\n 1: '40rem',\n 2: '60rem',\n 3: '80rem',\n 4: '100rem',\n 5: '120rem',\n },\n },\n}\n","import {type API, type FileInfo} from 'jscodeshift'\n\nimport type {BaseOptions} from '../../../types/BaseOptions'\nimport {addAttribute} from '../../../utils/addAttribute'\nimport {getComponentLocalNames} from '../../../utils/getComponentLocalNames'\nimport {getStyledComponentAliases} from '../../../utils/getStyledComponentAliases'\nimport {shouldTransformComponent} from '../../../utils/shouldTransformComponent'\nimport {transformAttributes} from '../../../utils/transformAttributes'\nimport {transformComponent} from '../../../utils/transformComponent'\nimport {transformImport} from '../../../utils/transformImport'\nimport {transformStyledComponents} from '../../../utils/transformStyledComponents'\nimport {TEXT_MODS} from './text.mods'\n\nconst TODO_WARNING = 'Please double check the Text migration below'\n\n/** @internal */\nexport default function transform(\n fileInfo: FileInfo,\n api: API,\n options: BaseOptions,\n): string | undefined {\n const {fromPackage, toPackage} = options || {}\n\n return transformComponent(fileInfo, api, ({j, root, markChanged}) => {\n const localNames = getComponentLocalNames(j, root, 'Text', options)\n const styledAliases = getStyledComponentAliases(\n j,\n root,\n 'Text',\n fileInfo.path,\n localNames,\n options,\n )\n\n if (!shouldTransformComponent(j, root, 'Text', localNames, options, styledAliases)) {\n return\n }\n\n if (transformImport(j, root, 'Text', fromPackage, toPackage)) {\n markChanged()\n }\n\n root.find(j.JSXOpeningElement).forEach((path) => {\n let changed = false\n const name = path.node.name\n\n if (name.type !== 'JSXIdentifier' || !localNames.has(name.name)) {\n return\n }\n\n if (transformAttributes(j, path, TEXT_MODS, TODO_WARNING)) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'as', 'div')) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'trim', true)) {\n changed = true\n }\n\n if (changed) {\n markChanged()\n }\n })\n\n if (\n transformStyledComponents(j, root, styledAliases, () => true, {\n callback: (path) => {\n let changed = false\n\n if (transformAttributes(j, path, TEXT_MODS, TODO_WARNING)) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'as', 'div')) {\n changed = true\n }\n\n if (addAttribute(j, path.node, 'trim', true)) {\n changed = true\n }\n\n if (changed) {\n markChanged()\n }\n\n return changed\n },\n })\n ) {\n markChanged()\n }\n })\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,YAA2B;AAAA,EACtC,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAAA,EAEF,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,OAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,EACL;AAEJ,GC1DM,eAAe;AAGrB,SAAwB,UACtB,UACA,KACA,SACoB;AACpB,QAAM,EAAC,aAAa,UAAA,IAAa,WAAW,CAAA;AAE5C,SAAO,mBAAmB,UAAU,KAAK,CAAC,EAAC,GAAG,MAAM,kBAAiB;AACnE,UAAM,aAAa,uBAAuB,GAAG,MAAM,QAAQ,OAAO,GAC5D,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAGG,6BAAyB,GAAG,MAAM,QAAQ,YAAY,SAAS,aAAa,MAI7E,gBAAgB,GAAG,MAAM,QAAQ,aAAa,SAAS,KACzD,YAAA,GAGF,KAAK,KAAK,EAAE,iBAAiB,EAAE,QAAQ,CAAC,SAAS;AAC/C,UAAI,UAAU;AACd,YAAM,OAAO,KAAK,KAAK;AAEnB,WAAK,SAAS,mBAAmB,CAAC,WAAW,IAAI,KAAK,IAAI,MAI1D,oBAAoB,GAAG,MAAM,WAAW,YAAY,MACtD,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,MAAM,KAAK,MACxC,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,QAAQ,EAAI,MACzC,UAAU,KAGR,WACF;IAEJ,CAAC,GAGC,0BAA0B,GAAG,MAAM,eAAe,MAAM,IAAM;AAAA,MAC5D,UAAU,CAAC,SAAS;AAClB,YAAI,UAAU;AAEd,eAAI,oBAAoB,GAAG,MAAM,WAAW,YAAY,MACtD,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,MAAM,KAAK,MACxC,UAAU,KAGR,aAAa,GAAG,KAAK,MAAM,QAAQ,EAAI,MACzC,UAAU,KAGR,WACF,YAAA,GAGK;AAAA,MACT;AAAA,IAAA,CACD,KAED,YAAA;AAAA,EAEJ,CAAC;AACH;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/ui-codemod",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.7",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"license": "ISC",
|
|
@@ -29,6 +29,12 @@
|
|
|
29
29
|
"./latest/grid": "./dist/commands/latest/grid.js",
|
|
30
30
|
"./transforms/latest/heading": "./dist/transforms/latest/heading/heading.js",
|
|
31
31
|
"./latest/heading": "./dist/commands/latest/heading.js",
|
|
32
|
+
"./transforms/latest/inline": "./dist/transforms/latest/inline/inline.js",
|
|
33
|
+
"./latest/inline": "./dist/commands/latest/inline.js",
|
|
34
|
+
"./transforms/latest/label": "./dist/transforms/latest/label/label.js",
|
|
35
|
+
"./latest/label": "./dist/commands/latest/label.js",
|
|
36
|
+
"./transforms/latest/stack": "./dist/transforms/latest/stack/stack.js",
|
|
37
|
+
"./latest/stack": "./dist/commands/latest/stack.js",
|
|
32
38
|
"./transforms/latest/text": "./dist/transforms/latest/text/text.js",
|
|
33
39
|
"./latest/text": "./dist/commands/latest/text.js",
|
|
34
40
|
"./package.json": "./package.json"
|
|
@@ -255,8 +255,7 @@ defineCrossFileTest(
|
|
|
255
255
|
}
|
|
256
256
|
`,
|
|
257
257
|
(output) => {
|
|
258
|
-
expect(output).toContain('alignItems: "center"')
|
|
259
|
-
expect(output).not.toContain('<RootBox alignItems="center" />')
|
|
258
|
+
expect(output.replace(/\s+/g, ' ')).toContain('<RootBox style={{ alignItems: "center" }} />')
|
|
260
259
|
},
|
|
261
260
|
'transforms attributes on imported styled Box wrappers',
|
|
262
261
|
)
|
|
@@ -279,7 +278,6 @@ defineCrossFileTest(
|
|
|
279
278
|
(output) => {
|
|
280
279
|
expect(output).toContain('UI-CODEMOD TODO: Please double check styled(Box) migration below')
|
|
281
280
|
expect(output).toContain('<RootBox display="flex" alignItems="center" />')
|
|
282
|
-
expect(output).not.toContain('const RootBox = styled(Box)')
|
|
283
281
|
},
|
|
284
282
|
'adds todo warning when imported styled Box wrapper should be replaced',
|
|
285
283
|
)
|
|
@@ -306,10 +304,8 @@ defineCrossFileTest(
|
|
|
306
304
|
}
|
|
307
305
|
`,
|
|
308
306
|
(output) => {
|
|
309
|
-
expect(output).toContain('alignItems: "center"')
|
|
310
|
-
expect(output).not.toContain('<RootBox alignItems="center" />')
|
|
307
|
+
expect(output.replace(/\s+/g, ' ')).toContain('<RootBox style={{ alignItems: "center" }} />')
|
|
311
308
|
expect(output).toContain('<Box display="flex" />')
|
|
312
|
-
expect(output).not.toContain('<Flex')
|
|
313
309
|
},
|
|
314
310
|
'does not rewrite unrelated Box from another package',
|
|
315
311
|
)
|
|
@@ -330,8 +326,7 @@ defineCrossFileTest(
|
|
|
330
326
|
}
|
|
331
327
|
`,
|
|
332
328
|
(output) => {
|
|
333
|
-
expect(output).toContain('alignItems: "center"')
|
|
334
|
-
expect(output).not.toContain('<RootBox alignItems="center" />')
|
|
329
|
+
expect(output.replace(/\s+/g, ' ')).toContain('<RootBox style={{ alignItems: "center" }} />')
|
|
335
330
|
},
|
|
336
331
|
'transforms styled Box wrappers imported through barrel re-exports',
|
|
337
332
|
{
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {expect} from 'vitest'
|
|
2
|
+
|
|
3
|
+
import {defineCrossFileTest, defineInlineTest} from '../../../utils/testUtils'
|
|
2
4
|
import transform from './card'
|
|
3
5
|
|
|
4
6
|
defineInlineTest(
|
|
@@ -205,3 +207,100 @@ defineInlineTest(
|
|
|
205
207
|
`,
|
|
206
208
|
'warns if Card includes muted prop',
|
|
207
209
|
)
|
|
210
|
+
|
|
211
|
+
defineCrossFileTest(
|
|
212
|
+
transform,
|
|
213
|
+
{},
|
|
214
|
+
`
|
|
215
|
+
import {Card} from '@sanity/ui'
|
|
216
|
+
|
|
217
|
+
export const RootCard = styled(Card)(({theme}) => ({}))
|
|
218
|
+
`,
|
|
219
|
+
`
|
|
220
|
+
import {RootCard} from './Component.styled'
|
|
221
|
+
|
|
222
|
+
export function Component() {
|
|
223
|
+
return <RootCard padding={4} radius={3} border />
|
|
224
|
+
}
|
|
225
|
+
`,
|
|
226
|
+
(output) => {
|
|
227
|
+
expect(output).toContain('<RootCard density="regular" />')
|
|
228
|
+
},
|
|
229
|
+
'transforms attributes on imported styled Card wrappers',
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
defineCrossFileTest(
|
|
233
|
+
transform,
|
|
234
|
+
{},
|
|
235
|
+
`
|
|
236
|
+
import {Card} from '@sanity/ui'
|
|
237
|
+
|
|
238
|
+
export const RootCard = styled(Card)(({theme}) => ({}))
|
|
239
|
+
`,
|
|
240
|
+
`
|
|
241
|
+
import {RootCard} from './Component.styled'
|
|
242
|
+
|
|
243
|
+
export function Component() {
|
|
244
|
+
return <RootCard padding={1} />
|
|
245
|
+
}
|
|
246
|
+
`,
|
|
247
|
+
(output) => {
|
|
248
|
+
expect(output).toContain('UI-CODEMOD TODO: Please double check styled(Card) migration below')
|
|
249
|
+
expect(output).toContain('<RootCard padding={1} />')
|
|
250
|
+
},
|
|
251
|
+
'adds todo warning when imported styled Card wrapper should be replaced',
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
defineCrossFileTest(
|
|
255
|
+
transform,
|
|
256
|
+
{},
|
|
257
|
+
`
|
|
258
|
+
import {Card} from '@sanity/ui'
|
|
259
|
+
|
|
260
|
+
export const RootCard = styled(Card)(({theme}) => ({}))
|
|
261
|
+
`,
|
|
262
|
+
`
|
|
263
|
+
import {Card} from 'another-package'
|
|
264
|
+
import {RootCard} from './Component.styled'
|
|
265
|
+
|
|
266
|
+
export function Component() {
|
|
267
|
+
return (
|
|
268
|
+
<>
|
|
269
|
+
<RootCard padding={4} radius={3} border />
|
|
270
|
+
<Card padding={4} radius={3} border />
|
|
271
|
+
</>
|
|
272
|
+
)
|
|
273
|
+
}
|
|
274
|
+
`,
|
|
275
|
+
(output) => {
|
|
276
|
+
expect(output).toContain('<RootCard density="regular" />')
|
|
277
|
+
expect(output).toContain('<Card padding={4} radius={3} border />')
|
|
278
|
+
},
|
|
279
|
+
'does not rewrite unrelated Card from another package',
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
defineCrossFileTest(
|
|
283
|
+
transform,
|
|
284
|
+
{},
|
|
285
|
+
`
|
|
286
|
+
import {Card} from '@sanity/ui'
|
|
287
|
+
|
|
288
|
+
export const RootCard = styled(Card)(({theme}) => ({}))
|
|
289
|
+
`,
|
|
290
|
+
`
|
|
291
|
+
import {RootCard} from './index'
|
|
292
|
+
|
|
293
|
+
export function Component() {
|
|
294
|
+
return <RootCard padding={4} radius={3} border />
|
|
295
|
+
}
|
|
296
|
+
`,
|
|
297
|
+
(output) => {
|
|
298
|
+
expect(output).toContain('<RootCard density="regular" />')
|
|
299
|
+
},
|
|
300
|
+
'transforms styled Card wrappers imported through barrel re-exports',
|
|
301
|
+
{
|
|
302
|
+
extraFiles: {
|
|
303
|
+
'index.ts': `export {RootCard} from './Component.styled'`,
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
)
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import {type API, type FileInfo} from 'jscodeshift'
|
|
1
|
+
import {type API, type FileInfo, type JSXAttribute, type JSXSpreadAttribute} from 'jscodeshift'
|
|
2
2
|
|
|
3
3
|
import type {BaseOptions} from '../../../types/BaseOptions'
|
|
4
4
|
import {getAttribute} from '../../../utils/getAttribute'
|
|
5
5
|
import {getComponentLocalNames} from '../../../utils/getComponentLocalNames'
|
|
6
6
|
import {getStaticAttributeExpression} from '../../../utils/getStaticAttributeExpression'
|
|
7
|
+
import {getStyledComponentAliases} from '../../../utils/getStyledComponentAliases'
|
|
7
8
|
import {replaceElement} from '../../../utils/replaceElement'
|
|
8
9
|
import {shouldTransformComponent} from '../../../utils/shouldTransformComponent'
|
|
9
10
|
import {transformAttributes} from '../../../utils/transformAttributes'
|
|
10
11
|
import {transformComponent} from '../../../utils/transformComponent'
|
|
11
12
|
import {transformImport} from '../../../utils/transformImport'
|
|
13
|
+
import {transformStyledComponents} from '../../../utils/transformStyledComponents'
|
|
12
14
|
import {BOX_MODS} from '../box/box.mods'
|
|
13
15
|
import {CARD_MODS} from './card.mods'
|
|
14
16
|
|
|
15
17
|
const CARD_TODO_WARNING = 'Please double check the Card migration below'
|
|
16
18
|
const BOX_TODO_WARNING = 'Please double check the Box migration below'
|
|
19
|
+
const STYLED_TODO_WARNING = 'Please double check styled(Card) migration below'
|
|
17
20
|
|
|
18
21
|
/** @internal */
|
|
19
22
|
export default function transform(
|
|
@@ -25,8 +28,16 @@ export default function transform(
|
|
|
25
28
|
|
|
26
29
|
return transformComponent(fileInfo, api, ({j, root, markChanged}) => {
|
|
27
30
|
const localNames = getComponentLocalNames(j, root, 'Card', options)
|
|
31
|
+
const styledAliases = getStyledComponentAliases(
|
|
32
|
+
j,
|
|
33
|
+
root,
|
|
34
|
+
'Card',
|
|
35
|
+
fileInfo.path,
|
|
36
|
+
localNames,
|
|
37
|
+
options,
|
|
38
|
+
)
|
|
28
39
|
|
|
29
|
-
if (!shouldTransformComponent(j, root, 'Card', localNames, options)) {
|
|
40
|
+
if (!shouldTransformComponent(j, root, 'Card', localNames, options, styledAliases)) {
|
|
30
41
|
return
|
|
31
42
|
}
|
|
32
43
|
|
|
@@ -34,29 +45,32 @@ export default function transform(
|
|
|
34
45
|
markChanged()
|
|
35
46
|
}
|
|
36
47
|
|
|
48
|
+
const replaceWithBox = (attrs: (JSXAttribute | JSXSpreadAttribute)[]) => {
|
|
49
|
+
const density = getAttribute(attrs, 'density')
|
|
50
|
+
const muted = getAttribute(attrs, 'muted')
|
|
51
|
+
const scheme = getAttribute(attrs, 'scheme')
|
|
52
|
+
const border = getAttribute(attrs, 'border')
|
|
53
|
+
const padding = getStaticAttributeExpression(j, attrs, 'padding')
|
|
54
|
+
const radius = getStaticAttributeExpression(j, attrs, 'radius')
|
|
55
|
+
|
|
56
|
+
return !(
|
|
57
|
+
density ||
|
|
58
|
+
muted ||
|
|
59
|
+
scheme ||
|
|
60
|
+
(border && padding === 3 && radius == 2) ||
|
|
61
|
+
(border && padding === 4 && radius == 3) ||
|
|
62
|
+
(border && padding === 5 && radius == 4)
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
|
|
37
66
|
if (
|
|
38
67
|
replaceElement(
|
|
39
68
|
j,
|
|
40
69
|
root,
|
|
41
|
-
(attrs) =>
|
|
42
|
-
const density = getAttribute(attrs, 'density')
|
|
43
|
-
const muted = getAttribute(attrs, 'muted')
|
|
44
|
-
const scheme = getAttribute(attrs, 'scheme')
|
|
45
|
-
const border = getAttribute(attrs, 'border')
|
|
46
|
-
const padding = getStaticAttributeExpression(j, attrs, 'padding')
|
|
47
|
-
const radius = getStaticAttributeExpression(j, attrs, 'radius')
|
|
48
|
-
|
|
49
|
-
return !(
|
|
50
|
-
density ||
|
|
51
|
-
muted ||
|
|
52
|
-
scheme ||
|
|
53
|
-
(border && padding === 3 && radius == 2) ||
|
|
54
|
-
(border && padding === 4 && radius == 3) ||
|
|
55
|
-
(border && padding === 5 && radius == 4)
|
|
56
|
-
)
|
|
57
|
-
},
|
|
70
|
+
(attrs) => replaceWithBox(attrs),
|
|
58
71
|
{
|
|
59
72
|
element: 'Card',
|
|
73
|
+
localNames,
|
|
60
74
|
callback: (path) => transformAttributes(j, path, CARD_MODS, CARD_TODO_WARNING),
|
|
61
75
|
},
|
|
62
76
|
{
|
|
@@ -67,5 +81,14 @@ export default function transform(
|
|
|
67
81
|
) {
|
|
68
82
|
markChanged()
|
|
69
83
|
}
|
|
84
|
+
|
|
85
|
+
if (
|
|
86
|
+
transformStyledComponents(j, root, styledAliases, (attrs) => !replaceWithBox(attrs), {
|
|
87
|
+
warning: STYLED_TODO_WARNING,
|
|
88
|
+
callback: (path) => transformAttributes(j, path, CARD_MODS, CARD_TODO_WARNING),
|
|
89
|
+
})
|
|
90
|
+
) {
|
|
91
|
+
markChanged()
|
|
92
|
+
}
|
|
70
93
|
})
|
|
71
94
|
}
|