typia
Version:
Superfast runtime validators with only one line
54 lines • 2.33 kB
JavaScript
;
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