typia
Version:
Superfast runtime validators with only one line
52 lines (49 loc) • 1.86 kB
JavaScript
import path from 'path';
import ts from 'typescript';
var ImportTransformer;
(function (ImportTransformer) {
ImportTransformer.transform = (props) => (context) => (file) => transform_file({
top: props.from,
to: props.to,
context,
file,
});
const transform_file = (props) => {
if (props.file.isDeclarationFile)
return props.file;
const from = get_directory_path(path.resolve(props.file.getSourceFile().fileName));
const to = from.replace(props.top, props.to);
return ts.visitEachChild(props.file, (node) => transform_node({
top: props.top,
from,
to,
node,
}), props.context);
};
const transform_node = (props) => {
if (!ts.isImportDeclaration(props.node) ||
!ts.isStringLiteral(props.node.moduleSpecifier))
return props.node;
const text = props.node.moduleSpecifier.text;
if (text[0] !== ".")
return props.node;
const location = path.resolve(props.from, text);
if (location.indexOf(props.top) === 0)
return props.node;
const replaced = (() => {
const simple = path
.relative(props.to, location)
.split(path.sep)
.join("/");
return simple[0] === "." ? simple : `./${simple}`;
})();
return ts.factory.createImportDeclaration(undefined, props.node.importClause, ts.factory.createStringLiteral(replaced), props.node.assertClause);
};
})(ImportTransformer || (ImportTransformer = {}));
const get_directory_path = (file) => {
const split = path.resolve(file).split(path.sep);
split.pop();
return path.resolve(split.join(path.sep));
};
export { ImportTransformer };
//# sourceMappingURL=ImportTransformer.mjs.map