@navikt/aksel
Version:
Aksel command line interface. Codemods and other utilities for Aksel users.
51 lines (50 loc) • 2.28 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = transformer;
const imports_1 = require("../../codemod/utils/imports");
const lineterminator_1 = require("../../codemod/utils/lineterminator");
const packageImports_1 = __importDefault(require("../../codemod/utils/packageImports"));
const translate_token_1 = require("../../codemod/utils/translate-token");
const legacy_tokens_1 = require("../config/legacy.tokens");
function transformer(file, api) {
let src = file.source;
const j = api.jscodeshift;
let root = j(file.source);
const jsImport = root.find(j.ImportDeclaration).filter((x) => {
return ["@navikt/ds-tokens/dist/tokens"].includes(x.node.source.value);
});
if (jsImport.size() === 0) {
return src;
}
for (const [oldToken, config] of Object.entries(legacy_tokens_1.legacyTokenConfig)) {
const oldCSSVar = `--a-${oldToken}`;
const oldJsVar = (0, translate_token_1.translateToken)(oldCSSVar, "js");
let foundName = null;
(0, imports_1.getImportSpecifier)(j, root, oldJsVar, "@navikt/ds-tokens/dist/tokens").forEach((x) => {
foundName = x.node.imported.name;
});
if (!foundName) {
continue;
}
if (config.replacement.length > 0) {
/* We remove the prefix */
const jsToken = (0, translate_token_1.translateToken)(`--ax-${config.replacement}`, "js").slice(2);
const localName = (0, packageImports_1.default)(j, root, {
fromImport: "@navikt/ds-tokens/dist/tokens",
toImport: "@navikt/ds-tokens/darkside-js",
fromName: foundName,
toName: jsToken,
ignoreAlias: true,
});
let code = root.toSource((0, lineterminator_1.getLineTerminator)(src));
const rgx = new RegExp(`(\\s|^)?(${localName})(?=\\s|$|[^\\w-])`, "gm");
code = code.replace(rgx, jsToken);
src = code;
root = j(code);
}
}
return root.toSource((0, lineterminator_1.getLineTerminator)(src));
}