UNPKG

typia

Version:

Superfast runtime validators with only one line

52 lines (49 loc) 1.86 kB
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