UNPKG

typia

Version:

Superfast runtime validators with only one line

54 lines 2.33 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImportTransformer = void 0; const path_1 = __importDefault(require("path")); const typescript_1 = __importDefault(require("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_1.default.resolve(props.file.getSourceFile().fileName)); const to = from.replace(props.top, props.to); return typescript_1.default.visitEachChild(props.file, (node) => transform_node({ top: props.top, from, to, node, }), props.context); }; const transform_node = (props) => { if (!typescript_1.default.isImportDeclaration(props.node) || !typescript_1.default.isStringLiteral(props.node.moduleSpecifier)) return props.node; const text = props.node.moduleSpecifier.text; if (text[0] !== ".") return props.node; const location = path_1.default.resolve(props.from, text); if (location.indexOf(props.top) === 0) return props.node; const replaced = (() => { const simple = path_1.default .relative(props.to, location) .split(path_1.default.sep) .join("/"); return simple[0] === "." ? simple : `./${simple}`; })(); return typescript_1.default.factory.createImportDeclaration(undefined, props.node.importClause, typescript_1.default.factory.createStringLiteral(replaced), props.node.assertClause); }; })(ImportTransformer || (exports.ImportTransformer = ImportTransformer = {})); const get_directory_path = (file) => { const split = path_1.default.resolve(file).split(path_1.default.sep); split.pop(); return path_1.default.resolve(split.join(path_1.default.sep)); }; //# sourceMappingURL=ImportTransformer.js.map