@sanity/ui-codemod 1.0.0-alpha.1
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/bin/run.js +5 -0
- package/dist/_chunks-es/addAttribute.js +11 -0
- package/dist/_chunks-es/addAttribute.js.map +1 -0
- package/dist/_chunks-es/box.mods.js +186 -0
- package/dist/_chunks-es/box.mods.js.map +1 -0
- package/dist/_chunks-es/flex.mods.js +74 -0
- package/dist/_chunks-es/flex.mods.js.map +1 -0
- package/dist/_chunks-es/getTransformPath.js +75 -0
- package/dist/_chunks-es/getTransformPath.js.map +1 -0
- package/dist/_chunks-es/grid.mods.js +110 -0
- package/dist/_chunks-es/grid.mods.js.map +1 -0
- package/dist/_chunks-es/layout-mods.js +424 -0
- package/dist/_chunks-es/layout-mods.js.map +1 -0
- package/dist/_chunks-es/transformComponent.js +359 -0
- package/dist/_chunks-es/transformComponent.js.map +1 -0
- package/dist/commands/latest/box.d.ts +47 -0
- package/dist/commands/latest/box.js +17 -0
- package/dist/commands/latest/box.js.map +1 -0
- package/dist/commands/latest/card.d.ts +47 -0
- package/dist/commands/latest/card.js +17 -0
- package/dist/commands/latest/card.js.map +1 -0
- package/dist/commands/latest/code.d.ts +47 -0
- package/dist/commands/latest/code.js +17 -0
- package/dist/commands/latest/code.js.map +1 -0
- package/dist/commands/latest/container.d.ts +47 -0
- package/dist/commands/latest/container.js +17 -0
- package/dist/commands/latest/container.js.map +1 -0
- package/dist/commands/latest/flex.d.ts +47 -0
- package/dist/commands/latest/flex.js +17 -0
- package/dist/commands/latest/flex.js.map +1 -0
- package/dist/commands/latest/grid.d.ts +47 -0
- package/dist/commands/latest/grid.js +17 -0
- package/dist/commands/latest/grid.js.map +1 -0
- package/dist/commands/latest/heading.d.ts +47 -0
- package/dist/commands/latest/heading.js +17 -0
- package/dist/commands/latest/heading.js.map +1 -0
- package/dist/commands/latest/text.d.ts +47 -0
- package/dist/commands/latest/text.js +17 -0
- package/dist/commands/latest/text.js.map +1 -0
- package/dist/transforms/latest/box/box.d.ts +18 -0
- package/dist/transforms/latest/box/box.js +101 -0
- package/dist/transforms/latest/box/box.js.map +1 -0
- package/dist/transforms/latest/card/card.d.ts +18 -0
- package/dist/transforms/latest/card/card.js +618 -0
- package/dist/transforms/latest/card/card.js.map +1 -0
- package/dist/transforms/latest/code/code.d.ts +18 -0
- package/dist/transforms/latest/code/code.js +73 -0
- package/dist/transforms/latest/code/code.js.map +1 -0
- package/dist/transforms/latest/container/container.d.ts +18 -0
- package/dist/transforms/latest/container/container.js +91 -0
- package/dist/transforms/latest/container/container.js.map +1 -0
- package/dist/transforms/latest/flex/flex.d.ts +18 -0
- package/dist/transforms/latest/flex/flex.js +19 -0
- package/dist/transforms/latest/flex/flex.js.map +1 -0
- package/dist/transforms/latest/grid/grid.d.ts +18 -0
- package/dist/transforms/latest/grid/grid.js +19 -0
- package/dist/transforms/latest/grid/grid.js.map +1 -0
- package/dist/transforms/latest/heading/heading.d.ts +18 -0
- package/dist/transforms/latest/heading/heading.js +85 -0
- package/dist/transforms/latest/heading/heading.js.map +1 -0
- package/dist/transforms/latest/text/text.d.ts +18 -0
- package/dist/transforms/latest/text/text.js +88 -0
- package/dist/transforms/latest/text/text.js.map +1 -0
- package/package.json +68 -0
- package/src/baseCommand.ts +74 -0
- package/src/commands/latest/box.ts +21 -0
- package/src/commands/latest/card.ts +21 -0
- package/src/commands/latest/code.ts +21 -0
- package/src/commands/latest/container.ts +21 -0
- package/src/commands/latest/flex.ts +21 -0
- package/src/commands/latest/grid.ts +21 -0
- package/src/commands/latest/heading.ts +21 -0
- package/src/commands/latest/inline.ts +21 -0
- package/src/commands/latest/label.ts +21 -0
- package/src/commands/latest/stack.ts +21 -0
- package/src/commands/latest/text.ts +21 -0
- package/src/constants/latest/layout-mods.ts +422 -0
- package/src/transforms/latest/box/box.mods.ts +88 -0
- package/src/transforms/latest/box/box.test.ts +204 -0
- package/src/transforms/latest/box/box.ts +104 -0
- package/src/transforms/latest/card/card.mods.ts +592 -0
- package/src/transforms/latest/card/card.test.ts +207 -0
- package/src/transforms/latest/card/card.ts +71 -0
- package/src/transforms/latest/code/code.mods.ts +57 -0
- package/src/transforms/latest/code/code.test.ts +61 -0
- package/src/transforms/latest/code/code.ts +53 -0
- package/src/transforms/latest/container/container.mods.ts +77 -0
- package/src/transforms/latest/container/container.test.ts +105 -0
- package/src/transforms/latest/container/container.ts +42 -0
- package/src/transforms/latest/flex/flex.mods.ts +73 -0
- package/src/transforms/latest/flex/flex.test.ts +80 -0
- package/src/transforms/latest/flex/flex.ts +42 -0
- package/src/transforms/latest/grid/grid.mods.ts +109 -0
- package/src/transforms/latest/grid/grid.test.ts +97 -0
- package/src/transforms/latest/grid/grid.ts +42 -0
- package/src/transforms/latest/heading/heading.mods.ts +70 -0
- package/src/transforms/latest/heading/heading.test.ts +87 -0
- package/src/transforms/latest/heading/heading.ts +53 -0
- package/src/transforms/latest/inline/inline.mods.ts +65 -0
- package/src/transforms/latest/inline/inline.test.ts +57 -0
- package/src/transforms/latest/inline/inline.ts +42 -0
- package/src/transforms/latest/label/label.mods.ts +72 -0
- package/src/transforms/latest/label/label.test.ts +113 -0
- package/src/transforms/latest/label/label.ts +67 -0
- package/src/transforms/latest/stack/stack.mods.ts +12 -0
- package/src/transforms/latest/stack/stack.test.ts +160 -0
- package/src/transforms/latest/stack/stack.ts +102 -0
- package/src/transforms/latest/text/text.mods.ts +72 -0
- package/src/transforms/latest/text/text.test.ts +113 -0
- package/src/transforms/latest/text/text.ts +57 -0
- package/src/types/AnyExpression.ts +9 -0
- package/src/types/AttributeMods.ts +16 -0
- package/src/types/BaseOptions.ts +6 -0
- package/src/utils/addAttribute.test.ts +43 -0
- package/src/utils/addAttribute.ts +26 -0
- package/src/utils/addImportSpecifier.test.ts +36 -0
- package/src/utils/addImportSpecifier.ts +42 -0
- package/src/utils/getAttribute.ts +22 -0
- package/src/utils/getAttributeExpression.ts +22 -0
- package/src/utils/getAttributeValue.ts +20 -0
- package/src/utils/getClonedImportSpecifiers.ts +29 -0
- package/src/utils/getComponentJsxNames.ts +17 -0
- package/src/utils/getComponentLocalNames.ts +69 -0
- package/src/utils/getCompositeAttrValue.ts +39 -0
- package/src/utils/getMappingArray.ts +36 -0
- package/src/utils/getMappingExpression.ts +22 -0
- package/src/utils/getMappingValue.ts +52 -0
- package/src/utils/getShorthandAttributes.ts +54 -0
- package/src/utils/getSplitImportSpecifiers.ts +40 -0
- package/src/utils/getStaticAttributeExpression.ts +35 -0
- package/src/utils/getStyleExpression.ts +37 -0
- package/src/utils/getStyledComponentAliases.ts +28 -0
- package/src/utils/getStyledComponentName.ts +52 -0
- package/src/utils/getTransformPath.ts +17 -0
- package/src/utils/insertTodoWarning.ts +48 -0
- package/src/utils/isImportBindingUsed.ts +53 -0
- package/src/utils/isValidStyleType.ts +21 -0
- package/src/utils/mergeStyle.ts +64 -0
- package/src/utils/removeUnusedImport.test.ts +77 -0
- package/src/utils/removeUnusedImport.ts +57 -0
- package/src/utils/replaceElement.test.ts +181 -0
- package/src/utils/replaceElement.ts +106 -0
- package/src/utils/replaceStyledComponent.test.ts +57 -0
- package/src/utils/replaceStyledComponent.ts +60 -0
- package/src/utils/shouldTransformComponent.test.ts +61 -0
- package/src/utils/shouldTransformComponent.ts +40 -0
- package/src/utils/testUtils.ts +54 -0
- package/src/utils/transformAttributes.test.ts +544 -0
- package/src/utils/transformAttributes.ts +248 -0
- package/src/utils/transformComponent.test.ts +45 -0
- package/src/utils/transformComponent.ts +31 -0
- package/src/utils/transformImport.test.ts +175 -0
- package/src/utils/transformImport.ts +55 -0
- package/src/utils/transformImportAlias.test.ts +40 -0
- package/src/utils/transformImportAlias.ts +49 -0
- package/src/utils/transformStyledComponents.test.ts +172 -0
- package/src/utils/transformStyledComponents.ts +58 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import {type API, type FileInfo} from 'jscodeshift'
|
|
2
|
+
|
|
3
|
+
import {getAttribute} from './getAttribute'
|
|
4
|
+
import {getComponentLocalNames} from './getComponentLocalNames'
|
|
5
|
+
import {getStyledComponentAliases} from './getStyledComponentAliases'
|
|
6
|
+
import {defineInlineTest} from './testUtils'
|
|
7
|
+
import {transformAttributes} from './transformAttributes'
|
|
8
|
+
import {transformStyledComponents} from './transformStyledComponents'
|
|
9
|
+
|
|
10
|
+
const DEFAULT_WARNING = 'Please double check styled-component migration(s) below'
|
|
11
|
+
const CUSTOM_WARNING =
|
|
12
|
+
'Please double check styled(Card) migration — update to styled(Box) manually if needed'
|
|
13
|
+
|
|
14
|
+
function transform(
|
|
15
|
+
fileInfo: FileInfo,
|
|
16
|
+
api: API,
|
|
17
|
+
options?: {
|
|
18
|
+
warning?: string
|
|
19
|
+
hasCallback?: boolean
|
|
20
|
+
},
|
|
21
|
+
): string {
|
|
22
|
+
const j = api.jscodeshift
|
|
23
|
+
const root = j(fileInfo.source)
|
|
24
|
+
const localNames = getComponentLocalNames(j, root, 'Card')
|
|
25
|
+
const styledAliases = getStyledComponentAliases(j, root, localNames)
|
|
26
|
+
|
|
27
|
+
transformStyledComponents(j, root, styledAliases, (attrs) => !!getAttribute(attrs, 'margin'), {
|
|
28
|
+
warning: options?.warning,
|
|
29
|
+
callback: options?.hasCallback
|
|
30
|
+
? (path) =>
|
|
31
|
+
transformAttributes(
|
|
32
|
+
j,
|
|
33
|
+
path,
|
|
34
|
+
{
|
|
35
|
+
insetTop: {
|
|
36
|
+
type: 'rename-only',
|
|
37
|
+
name: 'top',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
'Warning',
|
|
41
|
+
)
|
|
42
|
+
: undefined,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
return root.toSource()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
defineInlineTest(
|
|
49
|
+
transform,
|
|
50
|
+
{},
|
|
51
|
+
`
|
|
52
|
+
import {Card} from '@sanity/ui'
|
|
53
|
+
|
|
54
|
+
function Example() {
|
|
55
|
+
const RootCard = styled(Card)(({theme}) => ({}))
|
|
56
|
+
|
|
57
|
+
return <RootCard margin={1} />
|
|
58
|
+
}
|
|
59
|
+
`,
|
|
60
|
+
`
|
|
61
|
+
import {Card} from '@sanity/ui'
|
|
62
|
+
|
|
63
|
+
function Example() {
|
|
64
|
+
const RootCard = styled(Card)(({theme}) => ({}))
|
|
65
|
+
|
|
66
|
+
return <RootCard margin={1} />
|
|
67
|
+
}
|
|
68
|
+
`,
|
|
69
|
+
'preserves component if filter matches',
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
defineInlineTest(
|
|
73
|
+
transform,
|
|
74
|
+
{
|
|
75
|
+
hasCallback: true,
|
|
76
|
+
},
|
|
77
|
+
`
|
|
78
|
+
import {Card} from '@sanity/ui'
|
|
79
|
+
|
|
80
|
+
function Example() {
|
|
81
|
+
const RootCard = styled(Card)(({theme}) => {})
|
|
82
|
+
|
|
83
|
+
return <RootCard margin={1} insetTop={0} />
|
|
84
|
+
}
|
|
85
|
+
`,
|
|
86
|
+
`
|
|
87
|
+
import {Card} from '@sanity/ui'
|
|
88
|
+
|
|
89
|
+
function Example() {
|
|
90
|
+
const RootCard = styled(Card)(({theme}) => {})
|
|
91
|
+
|
|
92
|
+
return <RootCard margin={1} top={0} />;
|
|
93
|
+
}
|
|
94
|
+
`,
|
|
95
|
+
'preserves component and runs callback if filter matches',
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
defineInlineTest(
|
|
99
|
+
transform,
|
|
100
|
+
{},
|
|
101
|
+
`
|
|
102
|
+
import {Card} from '@sanity/ui'
|
|
103
|
+
|
|
104
|
+
function Example() {
|
|
105
|
+
const RootCard = styled(Card)(({theme}) => ({}))
|
|
106
|
+
|
|
107
|
+
return <RootCard padding={1} />
|
|
108
|
+
}
|
|
109
|
+
`,
|
|
110
|
+
`
|
|
111
|
+
import {Card} from '@sanity/ui'
|
|
112
|
+
|
|
113
|
+
function Example() {
|
|
114
|
+
// UI-CODEMOD TODO: ${DEFAULT_WARNING}
|
|
115
|
+
const RootCard = styled(Card)(({theme}) => ({}));
|
|
116
|
+
|
|
117
|
+
return <RootCard padding={1} />
|
|
118
|
+
}
|
|
119
|
+
`,
|
|
120
|
+
'adds todo warning on styled definition when filter does not match',
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
defineInlineTest(
|
|
124
|
+
transform,
|
|
125
|
+
{warning: CUSTOM_WARNING},
|
|
126
|
+
`
|
|
127
|
+
import {Card} from '@sanity/ui'
|
|
128
|
+
|
|
129
|
+
function Example() {
|
|
130
|
+
const RootCard = styled(Card)(({theme}) => ({}))
|
|
131
|
+
|
|
132
|
+
return <RootCard padding={1} />
|
|
133
|
+
}
|
|
134
|
+
`,
|
|
135
|
+
`
|
|
136
|
+
import {Card} from '@sanity/ui'
|
|
137
|
+
|
|
138
|
+
function Example() {
|
|
139
|
+
// UI-CODEMOD TODO: ${CUSTOM_WARNING}
|
|
140
|
+
const RootCard = styled(Card)(({theme}) => ({}));
|
|
141
|
+
|
|
142
|
+
return <RootCard padding={1} />
|
|
143
|
+
}
|
|
144
|
+
`,
|
|
145
|
+
'adds custom todo warning on styled definition when filter does not match',
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
defineInlineTest(
|
|
149
|
+
transform,
|
|
150
|
+
{},
|
|
151
|
+
`
|
|
152
|
+
import {Card} from '@sanity/ui'
|
|
153
|
+
|
|
154
|
+
function Example() {
|
|
155
|
+
// UI-CODEMOD TODO: ${DEFAULT_WARNING}
|
|
156
|
+
const RootCard = styled(Card)(({theme}) => ({}))
|
|
157
|
+
|
|
158
|
+
return <RootCard padding={1} />
|
|
159
|
+
}
|
|
160
|
+
`,
|
|
161
|
+
`
|
|
162
|
+
import {Card} from '@sanity/ui'
|
|
163
|
+
|
|
164
|
+
function Example() {
|
|
165
|
+
// UI-CODEMOD TODO: ${DEFAULT_WARNING}
|
|
166
|
+
const RootCard = styled(Card)(({theme}) => ({}))
|
|
167
|
+
|
|
168
|
+
return <RootCard padding={1} />
|
|
169
|
+
}
|
|
170
|
+
`,
|
|
171
|
+
'does not duplicate todo warning',
|
|
172
|
+
)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type {API, ASTPath, JSXAttribute, JSXOpeningElement, JSXSpreadAttribute} from 'jscodeshift'
|
|
2
|
+
|
|
3
|
+
import {insertTodoWarning} from './insertTodoWarning'
|
|
4
|
+
|
|
5
|
+
const DEFAULT_WARNING = 'Please double check styled-component migration(s) below'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Runs callback on JSX styled-component if `filter` passes. Otherwise, adds
|
|
9
|
+
* a TODO on the styled definition if manual review is needed.
|
|
10
|
+
* Returns whether the AST was updated.
|
|
11
|
+
*/
|
|
12
|
+
export function transformStyledComponents(
|
|
13
|
+
j: API['jscodeshift'],
|
|
14
|
+
root: ReturnType<API['jscodeshift']>,
|
|
15
|
+
aliases: Iterable<string>,
|
|
16
|
+
filter: (attrs: (JSXAttribute | JSXSpreadAttribute)[]) => boolean,
|
|
17
|
+
options: {
|
|
18
|
+
callback?: (path: ASTPath<JSXOpeningElement>) => boolean | void
|
|
19
|
+
warning?: string
|
|
20
|
+
} = {},
|
|
21
|
+
): boolean {
|
|
22
|
+
const names = new Set(aliases)
|
|
23
|
+
const {callback, warning = DEFAULT_WARNING} = options
|
|
24
|
+
const aliasesToWarn = new Set<string>()
|
|
25
|
+
let hasChanges = false
|
|
26
|
+
|
|
27
|
+
root.find(j.JSXOpeningElement).forEach((path) => {
|
|
28
|
+
const name = path.node.name
|
|
29
|
+
|
|
30
|
+
if (name.type !== 'JSXIdentifier' || !names.has(name.name)) {
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const attrs = path.node.attributes ?? []
|
|
35
|
+
|
|
36
|
+
if (!filter(attrs)) {
|
|
37
|
+
aliasesToWarn.add(name.name)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (filter(attrs)) {
|
|
41
|
+
if (callback?.(path)) {
|
|
42
|
+
hasChanges = true
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
root.find(j.VariableDeclarator).forEach((path) => {
|
|
48
|
+
const {id} = path.node
|
|
49
|
+
|
|
50
|
+
if (id.type === 'Identifier' && aliasesToWarn.has(id.name)) {
|
|
51
|
+
if (insertTodoWarning(j, path, warning)) {
|
|
52
|
+
hasChanges = true
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
return hasChanges
|
|
58
|
+
}
|