1 | "use strict";
|
2 | var __assign = (this && this.__assign) || function () {
|
3 | __assign = Object.assign || function(t) {
|
4 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5 | s = arguments[i];
|
6 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7 | t[p] = s[p];
|
8 | }
|
9 | return t;
|
10 | };
|
11 | return __assign.apply(this, arguments);
|
12 | };
|
13 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
14 | if (k2 === undefined) k2 = k;
|
15 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
16 | }) : (function(o, m, k, k2) {
|
17 | if (k2 === undefined) k2 = k;
|
18 | o[k2] = m[k];
|
19 | }));
|
20 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
21 | Object.defineProperty(o, "default", { enumerable: true, value: v });
|
22 | }) : function(o, v) {
|
23 | o["default"] = v;
|
24 | });
|
25 | var __importStar = (this && this.__importStar) || function (mod) {
|
26 | if (mod && mod.__esModule) return mod;
|
27 | var result = {};
|
28 | if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
29 | __setModuleDefault(result, mod);
|
30 | return result;
|
31 | };
|
32 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
33 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
34 | };
|
35 | Object.defineProperty(exports, "__esModule", { value: true });
|
36 | exports.revert = void 0;
|
37 | var swc = __importStar(require("@swc/core"));
|
38 | var fs_1 = __importDefault(require("fs"));
|
39 | var lodash_clonedeep_1 = __importDefault(require("lodash.clonedeep"));
|
40 | var util_1 = require("./util");
|
41 | var path_1 = __importDefault(require("path"));
|
42 | var pirates_1 = require("pirates");
|
43 | var source_map_support_1 = __importDefault(require("source-map-support"));
|
44 | var maps = {};
|
45 | var transformOpts = {};
|
46 | var piratesRevert = null;
|
47 | function installSourceMapSupport() {
|
48 | source_map_support_1.default.install({
|
49 | handleUncaughtExceptions: false,
|
50 | environment: "node",
|
51 | retrieveSourceMap: function (source) {
|
52 | var map = maps && maps[source];
|
53 | if (map) {
|
54 | return {
|
55 | url: null,
|
56 | map: map
|
57 | };
|
58 | }
|
59 | else {
|
60 | return null;
|
61 | }
|
62 | }
|
63 | });
|
64 | }
|
65 | function mtime(filename) {
|
66 | return +fs_1.default.statSync(filename).mtime;
|
67 | }
|
68 | function compile(code, filename) {
|
69 |
|
70 | var opts = __assign(__assign({ sourceRoot: path_1.default.dirname(filename) + path_1.default.sep }, lodash_clonedeep_1.default(transformOpts)), { filename: filename });
|
71 | if (typeof code !== "string") {
|
72 | code = code.toString();
|
73 | }
|
74 | delete opts.only;
|
75 | delete opts.ignore;
|
76 | var output = swc.transformSync(code, __assign(__assign({}, opts), { sourceMaps: opts.sourceMaps === undefined ? true : opts.sourceMaps }));
|
77 | if (output.map) {
|
78 | if (Object.keys(maps).length === 0) {
|
79 | installSourceMapSupport();
|
80 | }
|
81 | maps[filename] = output.map;
|
82 | }
|
83 | return output.code;
|
84 | }
|
85 | var compiling = false;
|
86 | function compileHook(code, filename) {
|
87 | if (compiling)
|
88 | return code;
|
89 | try {
|
90 | compiling = true;
|
91 | return compile(code, filename);
|
92 | }
|
93 | finally {
|
94 | compiling = false;
|
95 | }
|
96 | }
|
97 | function hookExtensions(exts) {
|
98 | if (piratesRevert)
|
99 | piratesRevert();
|
100 | piratesRevert = pirates_1.addHook(compileHook, { exts: exts, ignoreNodeModules: false, matcher: matcher });
|
101 | }
|
102 | function revert() {
|
103 | if (piratesRevert)
|
104 | piratesRevert();
|
105 | }
|
106 | exports.revert = revert;
|
107 | function register(opts) {
|
108 | if (opts === void 0) { opts = {}; }
|
109 |
|
110 | opts = __assign({}, opts);
|
111 | hookExtensions(opts.extensions || swc.DEFAULT_EXTENSIONS);
|
112 | delete opts.extensions;
|
113 | transformOpts = __assign(__assign({}, opts), { caller: __assign({ name: "@swc/register" }, (opts.caller || {})) });
|
114 | var _a = transformOpts.cwd, cwd = _a === void 0 ? "." : _a;
|
115 |
|
116 |
|
117 | cwd = transformOpts.cwd = path_1.default.resolve(cwd);
|
118 | if (transformOpts.ignore === undefined && transformOpts.only === undefined) {
|
119 | transformOpts.only = [
|
120 |
|
121 | new RegExp("^" + util_1.escapeRegExp(cwd), "i")
|
122 | ];
|
123 | transformOpts.ignore = [
|
124 |
|
125 | new RegExp("^" +
|
126 | util_1.escapeRegExp(cwd) +
|
127 | "(?:" +
|
128 | path_1.default.sep +
|
129 | ".*)?" +
|
130 | util_1.escapeRegExp(path_1.default.sep + "node_modules" + path_1.default.sep), "i")
|
131 | ];
|
132 | }
|
133 | }
|
134 | exports.default = register;
|
135 |
|
136 |
|
137 |
|
138 |
|
139 |
|
140 | function matcher(filename, dirname) {
|
141 | if (!dirname) {
|
142 | dirname = transformOpts.cwd || path_1.default.dirname(filename);
|
143 | }
|
144 | return shouldCompile(transformOpts.ignore, transformOpts.only, filename, dirname);
|
145 | }
|
146 | function shouldCompile(ignore, only, filename, dirname) {
|
147 | if (ignore && matchPattern(ignore, dirname, filename)) {
|
148 | return false;
|
149 | }
|
150 | if (only && !matchPattern(only, dirname, filename)) {
|
151 | return false;
|
152 | }
|
153 | return true;
|
154 | }
|
155 |
|
156 |
|
157 |
|
158 |
|
159 |
|
160 |
|
161 | function matchPattern(patterns, dirname, pathToTest) {
|
162 | return patterns.some(function (pattern) {
|
163 | if (typeof pattern === "function") {
|
164 | return Boolean(pattern(pathToTest, { dirname: dirname }));
|
165 | }
|
166 | if (typeof pathToTest !== "string") {
|
167 | throw new Error("Configuration contains string/RegExp file pattern, but no filename was provided.");
|
168 | }
|
169 | if (typeof pattern === "string") {
|
170 | pattern = util_1.pathPatternToRegex(pattern, dirname);
|
171 | }
|
172 | return pattern.test(path_1.default.resolve(dirname, pathToTest));
|
173 | });
|
174 | }
|