@navikt/aksel 7.34.0 → 7.35.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 +96 -2
- package/dist/codemod/migrations.js +75 -22
- package/dist/codemod/transforms/v8.0.0/accordion-variant/accordion-variant.js +16 -0
- package/dist/codemod/transforms/{darkside/box-to-boxnew/box-to-boxnew.js → v8.0.0/box/box.js} +31 -99
- package/dist/codemod/transforms/v8.0.0/box-new/box-new.js +91 -0
- package/dist/codemod/transforms/v8.0.0/chips-variant/chips-variant.js +31 -0
- package/dist/codemod/transforms/v8.0.0/list/list.js +218 -0
- package/dist/codemod/transforms/{darkside → v8.0.0}/prop-deprecate/prop-deprecate.js +1 -1
- package/dist/codemod/transforms/v8.0.0/tag-variant/tag-variant.js +38 -0
- package/dist/codemod/transforms/v8.0.0/toggle-group-variant/toggle-group-variant.js +16 -0
- package/dist/codemod/utils/check.js +35 -0
- package/dist/codemod/utils/move-variant-to-data-color.js +120 -0
- package/dist/help.js +0 -10
- package/dist/index.js +5 -7
- package/package.json +4 -5
- package/dist/css-imports/config.js +0 -5
- package/dist/css-imports/generate-output.js +0 -147
- package/dist/css-imports/get-directories.js +0 -34
- package/dist/css-imports/get-version.js +0 -28
- package/dist/css-imports/index.js +0 -187
- package/dist/css-imports/inquiry.js +0 -35
- package/dist/css-imports/scan-code.js +0 -45
- /package/dist/codemod/transforms/{spacing → v8.0.0}/primitives-spacing/spacing.js +0 -0
- /package/dist/codemod/transforms/{spacing → v8.0.0}/spacing.utils.js +0 -0
- /package/dist/codemod/transforms/{spacing → v8.0.0}/token-spacing/spacing.js +0 -0
- /package/dist/codemod/transforms/{spacing → v8.0.0}/token-spacing-js/spacing.js +0 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = transformer;
|
|
4
|
+
const lineterminator_1 = require("../../../utils/lineterminator");
|
|
5
|
+
const headingSizeMap = {
|
|
6
|
+
small: "xsmall",
|
|
7
|
+
medium: "small",
|
|
8
|
+
large: "medium",
|
|
9
|
+
};
|
|
10
|
+
const bodySizeMap = {
|
|
11
|
+
small: "small",
|
|
12
|
+
medium: "medium",
|
|
13
|
+
large: "large",
|
|
14
|
+
};
|
|
15
|
+
const boxMarginMap = {
|
|
16
|
+
small: "space-12",
|
|
17
|
+
medium: "space-16",
|
|
18
|
+
large: "space-16",
|
|
19
|
+
};
|
|
20
|
+
function transformer(file, api) {
|
|
21
|
+
var _a;
|
|
22
|
+
const j = api.jscodeshift;
|
|
23
|
+
const root = j(file.source);
|
|
24
|
+
let localListName = "List";
|
|
25
|
+
let hasListImport = false;
|
|
26
|
+
let dsReactImportPath = null;
|
|
27
|
+
let localHeadingName = "Heading";
|
|
28
|
+
let hasHeadingImport = false;
|
|
29
|
+
let localBodyShortName = "BodyShort";
|
|
30
|
+
let hasBodyShortImport = false;
|
|
31
|
+
let localBoxName = "Box";
|
|
32
|
+
let hasBoxImport = false;
|
|
33
|
+
// Find the local name for List import
|
|
34
|
+
root.find(j.ImportDeclaration).forEach((path) => {
|
|
35
|
+
var _a, _b;
|
|
36
|
+
if (path.node.source.value === "@navikt/ds-react") {
|
|
37
|
+
dsReactImportPath = path;
|
|
38
|
+
(_a = path.node.specifiers) === null || _a === void 0 ? void 0 : _a.forEach((specifier) => {
|
|
39
|
+
var _a, _b, _c, _d;
|
|
40
|
+
if (specifier.type === "ImportSpecifier") {
|
|
41
|
+
if (specifier.imported.name === "List") {
|
|
42
|
+
localListName = ((_a = specifier.local) === null || _a === void 0 ? void 0 : _a.name) || "List";
|
|
43
|
+
hasListImport = true;
|
|
44
|
+
}
|
|
45
|
+
if (specifier.imported.name === "Heading") {
|
|
46
|
+
localHeadingName = ((_b = specifier.local) === null || _b === void 0 ? void 0 : _b.name) || "Heading";
|
|
47
|
+
hasHeadingImport = true;
|
|
48
|
+
}
|
|
49
|
+
if (specifier.imported.name === "BodyShort") {
|
|
50
|
+
localBodyShortName = ((_c = specifier.local) === null || _c === void 0 ? void 0 : _c.name) || "BodyShort";
|
|
51
|
+
hasBodyShortImport = true;
|
|
52
|
+
}
|
|
53
|
+
if (specifier.imported.name === "Box") {
|
|
54
|
+
localBoxName = ((_d = specifier.local) === null || _d === void 0 ? void 0 : _d.name) || "Box";
|
|
55
|
+
hasBoxImport = true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else if (path.node.source.value === "@navikt/ds-react/List") {
|
|
61
|
+
(_b = path.node.specifiers) === null || _b === void 0 ? void 0 : _b.forEach((specifier) => {
|
|
62
|
+
var _a;
|
|
63
|
+
if (specifier.type === "ImportSpecifier") {
|
|
64
|
+
if (specifier.imported.name === "List") {
|
|
65
|
+
localListName = ((_a = specifier.local) === null || _a === void 0 ? void 0 : _a.name) || "List";
|
|
66
|
+
hasListImport = true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
if (!hasListImport) {
|
|
73
|
+
return root.toSource((0, lineterminator_1.getLineTerminator)(file.source));
|
|
74
|
+
}
|
|
75
|
+
const newImports = new Set();
|
|
76
|
+
root
|
|
77
|
+
.find(j.JSXElement, {
|
|
78
|
+
openingElement: { name: { name: localListName } },
|
|
79
|
+
})
|
|
80
|
+
.forEach((path) => {
|
|
81
|
+
var _a, _b;
|
|
82
|
+
const attributes = path.node.openingElement.attributes;
|
|
83
|
+
const titleAttr = attributes.find((attr) => attr.type === "JSXAttribute" && attr.name.name === "title");
|
|
84
|
+
const descAttr = attributes.find((attr) => attr.type === "JSXAttribute" && attr.name.name === "description");
|
|
85
|
+
if (attributes.some((attr) => attr.type === "JSXAttribute" &&
|
|
86
|
+
attr.name.name === "data-aksel-migrated-v8")) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const headingTagAttr = attributes.find((attr) => attr.type === "JSXAttribute" && attr.name.name === "headingTag");
|
|
90
|
+
const sizeAttr = attributes.find((attr) => attr.type === "JSXAttribute" && attr.name.name === "size");
|
|
91
|
+
// Extract values
|
|
92
|
+
const titleValue = titleAttr === null || titleAttr === void 0 ? void 0 : titleAttr.value;
|
|
93
|
+
const descValue = descAttr === null || descAttr === void 0 ? void 0 : descAttr.value;
|
|
94
|
+
let sizeValue = "medium";
|
|
95
|
+
if (sizeAttr && ((_a = sizeAttr.value) === null || _a === void 0 ? void 0 : _a.type) === "StringLiteral") {
|
|
96
|
+
sizeValue = sizeAttr.value.value;
|
|
97
|
+
}
|
|
98
|
+
let headingAs = "h3";
|
|
99
|
+
if (headingTagAttr && ((_b = headingTagAttr.value) === null || _b === void 0 ? void 0 : _b.type) === "StringLiteral") {
|
|
100
|
+
headingAs = headingTagAttr.value.value;
|
|
101
|
+
}
|
|
102
|
+
// Separate attributes
|
|
103
|
+
const listAttributes = [
|
|
104
|
+
j.jsxAttribute(j.jsxIdentifier("data-aksel-migrated-v8")),
|
|
105
|
+
];
|
|
106
|
+
const divAttributes = [];
|
|
107
|
+
attributes.forEach((attr) => {
|
|
108
|
+
if (attr.type !== "JSXAttribute") {
|
|
109
|
+
// Spread attributes or others -> move to div
|
|
110
|
+
divAttributes.push(attr);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const name = attr.name.name;
|
|
114
|
+
if (name === "title" ||
|
|
115
|
+
name === "description" ||
|
|
116
|
+
name === "headingTag") {
|
|
117
|
+
// Handled separately
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (name === "size" ||
|
|
121
|
+
name === "as" ||
|
|
122
|
+
name === "aria-label" ||
|
|
123
|
+
name === "aria-labelledby") {
|
|
124
|
+
listAttributes.push(attr);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
divAttributes.push(attr);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
const newNodes = [];
|
|
131
|
+
// Create Heading
|
|
132
|
+
if (titleValue) {
|
|
133
|
+
if (!hasHeadingImport) {
|
|
134
|
+
newImports.add("Heading");
|
|
135
|
+
}
|
|
136
|
+
const headingAttrs = [
|
|
137
|
+
j.jsxAttribute(j.jsxIdentifier("as"), j.stringLiteral(headingAs)),
|
|
138
|
+
];
|
|
139
|
+
const mappedSize = headingSizeMap[sizeValue];
|
|
140
|
+
if (mappedSize) {
|
|
141
|
+
headingAttrs.push(j.jsxAttribute(j.jsxIdentifier("size"), j.stringLiteral(mappedSize)));
|
|
142
|
+
}
|
|
143
|
+
let children = [];
|
|
144
|
+
if (titleValue.type === "StringLiteral") {
|
|
145
|
+
children = [j.jsxText(titleValue.value)];
|
|
146
|
+
}
|
|
147
|
+
else if (titleValue.type === "JSXExpressionContainer") {
|
|
148
|
+
children = [titleValue];
|
|
149
|
+
}
|
|
150
|
+
const heading = j.jsxElement(j.jsxOpeningElement(j.jsxIdentifier(localHeadingName), headingAttrs), j.jsxClosingElement(j.jsxIdentifier(localHeadingName)), children);
|
|
151
|
+
newNodes.push(heading);
|
|
152
|
+
}
|
|
153
|
+
// Create BodyShort
|
|
154
|
+
if (descValue) {
|
|
155
|
+
if (!hasBodyShortImport) {
|
|
156
|
+
newImports.add("BodyShort");
|
|
157
|
+
}
|
|
158
|
+
const bodyAttrs = [];
|
|
159
|
+
const mappedSize = bodySizeMap[sizeValue];
|
|
160
|
+
if (mappedSize && mappedSize !== "medium") {
|
|
161
|
+
bodyAttrs.push(j.jsxAttribute(j.jsxIdentifier("size"), j.stringLiteral(mappedSize)));
|
|
162
|
+
}
|
|
163
|
+
let children = [];
|
|
164
|
+
if (descValue.type === "StringLiteral") {
|
|
165
|
+
children = [j.jsxText(descValue.value)];
|
|
166
|
+
}
|
|
167
|
+
else if (descValue.type === "JSXExpressionContainer") {
|
|
168
|
+
children = [descValue];
|
|
169
|
+
}
|
|
170
|
+
const body = j.jsxElement(j.jsxOpeningElement(j.jsxIdentifier(localBodyShortName), bodyAttrs), j.jsxClosingElement(j.jsxIdentifier(localBodyShortName)), children);
|
|
171
|
+
newNodes.push(body);
|
|
172
|
+
}
|
|
173
|
+
// Create Box
|
|
174
|
+
if (!hasBoxImport) {
|
|
175
|
+
newImports.add("Box");
|
|
176
|
+
}
|
|
177
|
+
const boxAttrs = [
|
|
178
|
+
j.jsxAttribute(j.jsxIdentifier("marginBlock"), j.stringLiteral(boxMarginMap[sizeValue] || "space-16")),
|
|
179
|
+
j.jsxAttribute(j.jsxIdentifier("asChild")),
|
|
180
|
+
];
|
|
181
|
+
// Reconstruct List element
|
|
182
|
+
const newList = j.jsxElement(j.jsxOpeningElement(j.jsxIdentifier(localListName), listAttributes), path.node.closingElement, path.node.children);
|
|
183
|
+
const box = j.jsxElement(j.jsxOpeningElement(j.jsxIdentifier(localBoxName), boxAttrs), j.jsxClosingElement(j.jsxIdentifier(localBoxName)), [newList]);
|
|
184
|
+
newNodes.push(box);
|
|
185
|
+
// Wrap in div
|
|
186
|
+
if (newNodes.length === 1 && divAttributes.length === 0) {
|
|
187
|
+
j(path).replaceWith(newNodes[0]);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const div = j.jsxElement(j.jsxOpeningElement(j.jsxIdentifier("div"), divAttributes), j.jsxClosingElement(j.jsxIdentifier("div")), newNodes);
|
|
191
|
+
j(path).replaceWith(div);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
// Add imports
|
|
195
|
+
if (newImports.size > 0) {
|
|
196
|
+
if (dsReactImportPath) {
|
|
197
|
+
const existingSpecifiers = new Set((_a = dsReactImportPath.node.specifiers) === null || _a === void 0 ? void 0 : _a.map((specifier) => { var _a; return (_a = specifier.local) === null || _a === void 0 ? void 0 : _a.name; }));
|
|
198
|
+
newImports.forEach((imp) => {
|
|
199
|
+
var _a;
|
|
200
|
+
if (!existingSpecifiers.has(imp)) {
|
|
201
|
+
(_a = dsReactImportPath.node.specifiers) === null || _a === void 0 ? void 0 : _a.push(j.importSpecifier(j.identifier(imp)));
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
const specifiers = Array.from(newImports).map((imp) => j.importSpecifier(j.identifier(imp)));
|
|
207
|
+
const newImportDecl = j.importDeclaration(specifiers, j.stringLiteral("@navikt/ds-react"));
|
|
208
|
+
const lastImport = root.find(j.ImportDeclaration).at(-1);
|
|
209
|
+
if (lastImport.length > 0) {
|
|
210
|
+
lastImport.insertAfter(newImportDecl);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
root.get().node.program.body.unshift(newImportDecl);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return root.toSource((0, lineterminator_1.getLineTerminator)(file.source));
|
|
218
|
+
}
|
|
@@ -8,7 +8,7 @@ const ast_1 = require("../../../utils/ast");
|
|
|
8
8
|
const lineterminator_1 = require("../../../utils/lineterminator");
|
|
9
9
|
const removeProps_1 = __importDefault(require("../../../utils/removeProps"));
|
|
10
10
|
const deprecationMap = {
|
|
11
|
-
Accordion: ["headingSize"
|
|
11
|
+
Accordion: ["headingSize"],
|
|
12
12
|
Popover: ["arrow"],
|
|
13
13
|
Page: ["background"],
|
|
14
14
|
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.migrationConfig = void 0;
|
|
4
|
+
exports.default = transformer;
|
|
5
|
+
const move_variant_to_data_color_1 = require("../../../utils/move-variant-to-data-color");
|
|
6
|
+
exports.migrationConfig = {
|
|
7
|
+
component: "Tag",
|
|
8
|
+
prop: "variant",
|
|
9
|
+
changes: {
|
|
10
|
+
warning: { replacement: "outline", color: "warning" },
|
|
11
|
+
"warning-moderate": { replacement: "moderate", color: "warning" },
|
|
12
|
+
"warning-filled": { replacement: "strong", color: "warning" },
|
|
13
|
+
error: { replacement: "outline", color: "danger" },
|
|
14
|
+
"error-moderate": { replacement: "moderate", color: "danger" },
|
|
15
|
+
"error-filled": { replacement: "strong", color: "danger" },
|
|
16
|
+
info: { replacement: "outline", color: "info" },
|
|
17
|
+
"info-moderate": { replacement: "moderate", color: "info" },
|
|
18
|
+
"info-filled": { replacement: "strong", color: "info" },
|
|
19
|
+
success: { replacement: "outline", color: "success" },
|
|
20
|
+
"success-moderate": { replacement: "moderate", color: "success" },
|
|
21
|
+
"success-filled": { replacement: "strong", color: "success" },
|
|
22
|
+
neutral: { replacement: "outline", color: "neutral" },
|
|
23
|
+
"neutral-moderate": { replacement: "moderate", color: "neutral" },
|
|
24
|
+
"neutral-filled": { replacement: "strong", color: "neutral" },
|
|
25
|
+
alt1: { replacement: "outline", color: "meta-purple" },
|
|
26
|
+
"alt1-moderate": { replacement: "moderate", color: "meta-purple" },
|
|
27
|
+
"alt1-filled": { replacement: "strong", color: "meta-purple" },
|
|
28
|
+
alt2: { replacement: "outline", color: "meta-lime" },
|
|
29
|
+
"alt2-moderate": { replacement: "moderate", color: "meta-lime" },
|
|
30
|
+
"alt2-filled": { replacement: "strong", color: "meta-lime" },
|
|
31
|
+
alt3: { replacement: "outline", color: "info" },
|
|
32
|
+
"alt3-moderate": { replacement: "moderate", color: "info" },
|
|
33
|
+
"alt3-filled": { replacement: "strong", color: "info" },
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
function transformer(file, api) {
|
|
37
|
+
return (0, move_variant_to_data_color_1.moveVariantToDataColor)(file, api, exports.migrationConfig);
|
|
38
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.migrationConfig = void 0;
|
|
4
|
+
exports.default = transformer;
|
|
5
|
+
const move_variant_to_data_color_1 = require("../../../utils/move-variant-to-data-color");
|
|
6
|
+
exports.migrationConfig = {
|
|
7
|
+
component: "ToggleGroup",
|
|
8
|
+
prop: "variant",
|
|
9
|
+
changes: {
|
|
10
|
+
action: { color: "accent" },
|
|
11
|
+
neutral: { color: "neutral" },
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
function transformer(file, api) {
|
|
15
|
+
return (0, move_variant_to_data_color_1.moveVariantToDataColor)(file, api, exports.migrationConfig);
|
|
16
|
+
}
|
|
@@ -46,6 +46,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
46
46
|
};
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
48
|
exports.check = check;
|
|
49
|
+
exports.checkScenarios = checkScenarios;
|
|
50
|
+
exports.checkMoveVariantToDataColor = checkMoveVariantToDataColor;
|
|
49
51
|
const testUtils_1 = require("jscodeshift/dist/testUtils");
|
|
50
52
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
51
53
|
const node_path_1 = __importDefault(require("node:path"));
|
|
@@ -74,3 +76,36 @@ function check(dirName, { fixture, migration, extension = "js", options = {} })
|
|
|
74
76
|
}));
|
|
75
77
|
});
|
|
76
78
|
}
|
|
79
|
+
function checkScenarios(dirName, { migration, scenarios, extension = "js", options = {} }) {
|
|
80
|
+
(0, vitest_1.describe)(migration, () => {
|
|
81
|
+
const parser = extension;
|
|
82
|
+
for (const [name, { input, output: expected }] of Object.entries(scenarios)) {
|
|
83
|
+
(0, vitest_1.test)(name, () => __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
const module = yield Promise.resolve(`${node_path_1.default.join(dirName, "..", migration)}`).then(s => __importStar(require(s)));
|
|
85
|
+
const output = (0, testUtils_1.applyTransform)(Object.assign(Object.assign({}, module), { parser: "tsx" }), options, {
|
|
86
|
+
source: input,
|
|
87
|
+
});
|
|
88
|
+
(0, vitest_1.expect)(yield prettier_1.default.format(output, {
|
|
89
|
+
parser: parser === "js" ? "typescript" : parser,
|
|
90
|
+
})).toBe(yield prettier_1.default.format(expected, {
|
|
91
|
+
parser: parser === "js" ? "typescript" : parser,
|
|
92
|
+
}));
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function checkMoveVariantToDataColor(dirName, { migration, config, }) {
|
|
98
|
+
const scenarios = {};
|
|
99
|
+
for (const [variant, change] of Object.entries(config.changes)) {
|
|
100
|
+
const input = `import { ${config.component} } from "@navikt/ds-react";
|
|
101
|
+
<${config.component} ${config.prop}="${variant}">Text</${config.component}>;`;
|
|
102
|
+
let outputAttrs = `data-color="${change.color}"`;
|
|
103
|
+
if (change.replacement) {
|
|
104
|
+
outputAttrs += ` ${config.prop}="${change.replacement}"`;
|
|
105
|
+
}
|
|
106
|
+
const output = `import { ${config.component} } from "@navikt/ds-react";
|
|
107
|
+
<${config.component} ${outputAttrs}>Text</${config.component}>;`;
|
|
108
|
+
scenarios[`should migrate ${variant}`] = { input, output };
|
|
109
|
+
}
|
|
110
|
+
checkScenarios(dirName, { migration, scenarios });
|
|
111
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.moveVariantToDataColor = moveVariantToDataColor;
|
|
4
|
+
const lineterminator_1 = require("./lineterminator");
|
|
5
|
+
function moveVariantToDataColor(file, api, config) {
|
|
6
|
+
const j = api.jscodeshift;
|
|
7
|
+
const root = j(file.source);
|
|
8
|
+
/* Find all imports from @navikt/ds-react */
|
|
9
|
+
const imports = root.find(j.ImportDeclaration).filter((path) => {
|
|
10
|
+
const sourceValue = path.value.source.value;
|
|
11
|
+
return (typeof sourceValue === "string" &&
|
|
12
|
+
(sourceValue === "@navikt/ds-react" ||
|
|
13
|
+
sourceValue.startsWith("@navikt/ds-react/")));
|
|
14
|
+
});
|
|
15
|
+
if (imports.size() === 0) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const [rootComponent, subComponent] = config.component.split(".");
|
|
19
|
+
let localName = "";
|
|
20
|
+
imports.forEach((path) => {
|
|
21
|
+
var _a;
|
|
22
|
+
(_a = path.value.specifiers) === null || _a === void 0 ? void 0 : _a.forEach((specifier) => {
|
|
23
|
+
var _a;
|
|
24
|
+
if (specifier.type === "ImportSpecifier" &&
|
|
25
|
+
specifier.imported.name === rootComponent) {
|
|
26
|
+
localName = ((_a = specifier.local) === null || _a === void 0 ? void 0 : _a.name) || specifier.imported.name;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
if (!localName) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const elementSearch = subComponent
|
|
34
|
+
? {
|
|
35
|
+
openingElement: {
|
|
36
|
+
name: {
|
|
37
|
+
type: "JSXMemberExpression",
|
|
38
|
+
object: { name: localName },
|
|
39
|
+
property: { name: subComponent },
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
}
|
|
43
|
+
: { openingElement: { name: { name: localName } } };
|
|
44
|
+
root.find(j.JSXElement, elementSearch).forEach((path) => {
|
|
45
|
+
var _a;
|
|
46
|
+
const attributes = path.value.openingElement.attributes;
|
|
47
|
+
if (!attributes)
|
|
48
|
+
return;
|
|
49
|
+
let variantPropIndex = -1;
|
|
50
|
+
let colorPropIndex = -1;
|
|
51
|
+
let variantValue = "";
|
|
52
|
+
attributes.forEach((attr, index) => {
|
|
53
|
+
if (attr.type !== "JSXAttribute")
|
|
54
|
+
return;
|
|
55
|
+
if (attr.name.name === config.prop) {
|
|
56
|
+
variantPropIndex = index;
|
|
57
|
+
const value = getStringValue(attr.value);
|
|
58
|
+
if (value) {
|
|
59
|
+
variantValue = value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (attr.name.name === "data-color") {
|
|
63
|
+
colorPropIndex = index;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
if (variantPropIndex !== -1 && variantValue) {
|
|
67
|
+
const changeConfig = config.changes[variantValue];
|
|
68
|
+
if (changeConfig) {
|
|
69
|
+
const originalAttr = attributes[variantPropIndex];
|
|
70
|
+
if (originalAttr.type !== "JSXAttribute")
|
|
71
|
+
return;
|
|
72
|
+
// Handle variant prop update or removal
|
|
73
|
+
if (changeConfig.replacement) {
|
|
74
|
+
let newValue;
|
|
75
|
+
if (((_a = originalAttr.value) === null || _a === void 0 ? void 0 : _a.type) === "JSXExpressionContainer") {
|
|
76
|
+
newValue = j.jsxExpressionContainer(j.literal(changeConfig.replacement));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
newValue = j.literal(changeConfig.replacement);
|
|
80
|
+
}
|
|
81
|
+
const newAttr = j.jsxAttribute(j.jsxIdentifier(config.prop), newValue);
|
|
82
|
+
newAttr.comments = originalAttr.comments;
|
|
83
|
+
attributes[variantPropIndex] = newAttr;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Remove the variant prop if no replacement is specified
|
|
87
|
+
attributes.splice(variantPropIndex, 1);
|
|
88
|
+
// Adjust colorPropIndex if it was after the removed prop
|
|
89
|
+
if (colorPropIndex > variantPropIndex) {
|
|
90
|
+
colorPropIndex--;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Add data-color prop if it doesn't exist
|
|
94
|
+
if (colorPropIndex === -1) {
|
|
95
|
+
const colorAttr = j.jsxAttribute(j.jsxIdentifier("data-color"), j.literal(changeConfig.color));
|
|
96
|
+
attributes.unshift(colorAttr);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
const toSourceOptions = (0, lineterminator_1.getLineTerminator)(file.source);
|
|
102
|
+
return root.toSource(toSourceOptions);
|
|
103
|
+
}
|
|
104
|
+
function getStringValue(node) {
|
|
105
|
+
var _a;
|
|
106
|
+
if (!node)
|
|
107
|
+
return null;
|
|
108
|
+
if (node.type === "StringLiteral" || node.type === "Literal") {
|
|
109
|
+
return node.value;
|
|
110
|
+
}
|
|
111
|
+
if (node.type === "TemplateLiteral" &&
|
|
112
|
+
node.expressions.length === 0 &&
|
|
113
|
+
node.quasis.length === 1) {
|
|
114
|
+
return (_a = node.quasis[0].value.cooked) !== null && _a !== void 0 ? _a : null;
|
|
115
|
+
}
|
|
116
|
+
if (node.type === "JSXExpressionContainer") {
|
|
117
|
+
return getStringValue(node.expression);
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
package/dist/help.js
CHANGED
|
@@ -13,18 +13,8 @@ function helpCommand() {
|
|
|
13
13
|
- ${chalk_1.default.blueBright("https://aksel.nav.no/grunnleggende/kode/kommandolinje")}
|
|
14
14
|
|
|
15
15
|
💻 Commands:
|
|
16
|
-
- ${chalk_1.default.cyan(`npx @navikt/aksel ${chalk_1.default.green("css-imports")}`)}
|
|
17
|
-
✔︎ Helps with CSS imports for all Aksel components
|
|
18
|
-
✔︎ Supports Static and CDN-imports
|
|
19
|
-
✔︎ Handles cascading, tailwind and @layer rules
|
|
20
|
-
|
|
21
16
|
- ${chalk_1.default.cyan(`npx @navikt/aksel ${chalk_1.default.green("codemod")} ${chalk_1.default.gray("<migration>")}`)}
|
|
22
17
|
✔︎ Code-transformations for breaking changes when updating Aksel
|
|
23
18
|
✔︎ Run with ${chalk_1.default.cyan(`${chalk_1.default.green("--help")}`)} to get started!
|
|
24
|
-
|
|
25
|
-
- ${chalk_1.default.cyan(`npx @navikt/aksel ${chalk_1.default.green("darkside")} ${chalk_1.default.gray("<task>")}`)}
|
|
26
|
-
✔︎ Tooling for migrating to the darkside
|
|
27
|
-
✔︎ Check current status and migrate tokens
|
|
28
|
-
✔︎ Run with ${chalk_1.default.cyan(`${chalk_1.default.green("--help")}`)} to get started!
|
|
29
19
|
`);
|
|
30
20
|
}
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
16
16
|
const chalk_1 = __importDefault(require("chalk"));
|
|
17
17
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
18
18
|
const index_1 = require("./codemod/index");
|
|
19
|
-
const index_2 = require("./css-imports/index");
|
|
20
19
|
const darkside_1 = require("./darkside");
|
|
21
20
|
const help_1 = require("./help");
|
|
22
21
|
run();
|
|
@@ -26,18 +25,17 @@ function run() {
|
|
|
26
25
|
(0, help_1.helpCommand)();
|
|
27
26
|
return;
|
|
28
27
|
}
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Runs custom tooling for migrating to v8 tokens
|
|
30
|
+
*/
|
|
31
|
+
if (process.argv[2] === "codemod" && process.argv[3] === "v8-tokens") {
|
|
32
|
+
(0, darkside_1.darksideCommand)();
|
|
31
33
|
return;
|
|
32
34
|
}
|
|
33
35
|
if (process.argv[2] === "codemod") {
|
|
34
36
|
(0, index_1.codemodCommand)();
|
|
35
37
|
return;
|
|
36
38
|
}
|
|
37
|
-
if (process.argv[2] === "darkside") {
|
|
38
|
-
(0, darkside_1.darksideCommand)();
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
39
|
if (process.argv[2] === "-v" || process.argv[2] === "--version") {
|
|
42
40
|
const pkg = JSON.parse(node_fs_1.default.readFileSync("./package.json").toString()).version;
|
|
43
41
|
console.info(pkg);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@navikt/aksel",
|
|
3
|
-
"version": "7.
|
|
4
|
-
"description": "Aksel command line interface.
|
|
3
|
+
"version": "7.35.0",
|
|
4
|
+
"description": "Aksel command line interface. Codemods and other utilities for Aksel users.",
|
|
5
5
|
"author": "Aksel | Nav designsystem team",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"keywords": [
|
|
@@ -32,12 +32,11 @@
|
|
|
32
32
|
"url": "https://github.com/navikt/aksel/issues"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@navikt/ds-css": "^7.
|
|
36
|
-
"@navikt/ds-tokens": "^7.
|
|
35
|
+
"@navikt/ds-css": "^7.35.0",
|
|
36
|
+
"@navikt/ds-tokens": "^7.35.0",
|
|
37
37
|
"axios": "1.13.2",
|
|
38
38
|
"chalk": "4.1.0",
|
|
39
39
|
"cli-progress": "^3.12.0",
|
|
40
|
-
"clipboardy": "^2.3.0",
|
|
41
40
|
"commander": "10.0.1",
|
|
42
41
|
"enquirer": "^2.3.6",
|
|
43
42
|
"fast-glob": "3.2.11",
|