UNPKG

4.75 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6exports.register = exports.mergeTransformers = void 0;
7const transformer_1 = __importDefault(require("./transformer"));
8/* ****************************************************************************************************************** */
9// region: Helpers
10/* ****************************************************************************************************************** */
11function getProjectTransformerConfig(pcl) {
12 const plugins = pcl.options.plugins;
13 if (!plugins)
14 return;
15 const res = {};
16 for (const plugin of plugins) {
17 if (plugin.transform === "typescript-transform-paths" && !plugin.after)
18 res[plugin.afterDeclarations ? "afterDeclarations" : "before"] = plugin;
19 }
20 return res;
21}
22function getTransformers(program, beforeConfig, afterDeclarationsConfig) {
23 return Object.assign(Object.assign({}, (beforeConfig && { before: [(0, transformer_1.default)(program, beforeConfig)] })), (afterDeclarationsConfig && { afterDeclarations: [(0, transformer_1.default)(program, afterDeclarationsConfig)] }));
24}
25function mergeTransformers(baseTransformers, transformers) {
26 var _a, _b, _c, _d;
27 const res = Object.assign(Object.assign({}, ((baseTransformers.before || transformers.before) && {
28 before: [...((_a = transformers.before) !== null && _a !== void 0 ? _a : []), ...((_b = baseTransformers.before) !== null && _b !== void 0 ? _b : [])],
29 })), ((baseTransformers.afterDeclarations || transformers.afterDeclarations) && {
30 afterDeclarations: [...((_c = transformers.afterDeclarations) !== null && _c !== void 0 ? _c : []), ...((_d = baseTransformers.afterDeclarations) !== null && _d !== void 0 ? _d : [])],
31 }));
32 const remainingBaseTransformers = Object.assign({}, baseTransformers);
33 delete remainingBaseTransformers.before;
34 delete remainingBaseTransformers.afterDeclarations;
35 return Object.assign(res, remainingBaseTransformers);
36}
37exports.mergeTransformers = mergeTransformers;
38// endregion
39/* ****************************************************************************************************************** */
40// region: TsNode Registration Utility
41/* ****************************************************************************************************************** */
42function register() {
43 const { tsNodeInstance, tsNode } = register.initialize();
44 const transformerConfig = getProjectTransformerConfig(tsNodeInstance.config);
45 if (!transformerConfig)
46 return;
47 const { before: beforeConfig, afterDeclarations: afterDeclarationsConfig } = transformerConfig;
48 const registerOptions = Object.assign({}, tsNodeInstance.options);
49 if (registerOptions.transformers) {
50 if (typeof registerOptions.transformers === "function") {
51 let oldTransformersFactory = registerOptions.transformers;
52 registerOptions.transformers = (program) => {
53 const transformers = getTransformers(program, beforeConfig, afterDeclarationsConfig);
54 const baseTransformers = oldTransformersFactory(program);
55 return mergeTransformers(baseTransformers, transformers);
56 };
57 }
58 else {
59 registerOptions.transformers = mergeTransformers(registerOptions.transformers, getTransformers(undefined, beforeConfig, afterDeclarationsConfig));
60 }
61 }
62 else {
63 registerOptions.transformers = getTransformers(undefined, beforeConfig, afterDeclarationsConfig);
64 }
65 // Re-register with new transformers
66 tsNode.register(registerOptions);
67 return registerOptions;
68}
69exports.register = register;
70(function (register) {
71 function initialize() {
72 let tsNode;
73 try {
74 tsNode = require("ts-node");
75 }
76 catch (_a) {
77 throw new Error(`Cannot resolve ts-node. Make sure ts-node is installed before using typescript-transform-paths/register`);
78 }
79 const instanceSymbol = tsNode["REGISTER_INSTANCE"];
80 let tsNodeInstance = global.process[instanceSymbol];
81 if (!tsNodeInstance) {
82 tsNode.register(); // Register initially
83 tsNodeInstance = global.process[instanceSymbol];
84 }
85 if (!tsNodeInstance)
86 throw new Error(`Could not register ts-node instance!`);
87 return { tsNode, instanceSymbol, tsNodeInstance };
88 }
89 register.initialize = initialize;
90})(register = exports.register || (exports.register = {}));
91exports.default = register;
92// endregion
93//# sourceMappingURL=register.js.map
\No newline at end of file