@modern-js/server-utils 2.24.1 → 2.25.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,12 +1,13 @@
1
1
  # @modern-js/server-utils
2
2
 
3
- ## 2.24.1
3
+ ## 2.25.0
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - @modern-js/babel-preset-base@2.24.1
8
- - @modern-js/babel-compiler@2.24.1
9
- - @modern-js/utils@2.24.1
7
+ - Updated dependencies [5732c6a]
8
+ - @modern-js/utils@2.25.0
9
+ - @modern-js/babel-preset-base@2.25.0
10
+ - @modern-js/babel-compiler@2.25.0
10
11
 
11
12
  ## 2.24.0
12
13
 
@@ -20,8 +20,6 @@ _export(exports, {
20
20
  const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
21
21
  const _path = /* @__PURE__ */ _interop_require_wildcard._(require("path"));
22
22
  const _utils = require("@modern-js/utils");
23
- const _typescript = require("../compilers/typescript");
24
- const _babel = require("../compilers/babel");
25
23
  const FILE_EXTENSIONS = [
26
24
  ".js",
27
25
  ".ts",
@@ -44,8 +42,10 @@ const compile = async (appDirectory, modernConfig, compileOptions) => {
44
42
  const compiler = modernConfig === null || modernConfig === void 0 ? void 0 : (_modernConfig_server = modernConfig.server) === null || _modernConfig_server === void 0 ? void 0 : _modernConfig_server.compiler;
45
43
  const isTsProject = tsconfigPath && await _utils.fs.pathExists(tsconfigPath);
46
44
  if (!isTsProject || compiler === "babel") {
47
- await (0, _babel.compileByBabel)(appDirectory, modernConfig, compileOptions);
45
+ const { compileByBabel } = await Promise.resolve().then(() => /* @__PURE__ */ _interop_require_wildcard._(require("../compilers/babel")));
46
+ await compileByBabel(appDirectory, modernConfig, compileOptions);
48
47
  } else {
49
- await (0, _typescript.compileByTs)(appDirectory, modernConfig, compileOptions);
48
+ const { compileByTs } = await Promise.resolve().then(() => /* @__PURE__ */ _interop_require_wildcard._(require("../compilers/typescript")));
49
+ await compileByTs(appDirectory, modernConfig, compileOptions);
50
50
  }
51
51
  };
@@ -2,8 +2,6 @@ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
3
  import * as path from "path";
4
4
  import { fs } from "@modern-js/utils";
5
- import { compileByTs } from "../compilers/typescript";
6
- import { compileByBabel } from "../compilers/babel";
7
5
  export var FILE_EXTENSIONS = [
8
6
  ".js",
9
7
  ".ts",
@@ -22,7 +20,7 @@ var validateAbsolutePaths = function(filenames, messageFunc) {
22
20
  };
23
21
  export var compile = function() {
24
22
  var _ref = _async_to_generator(function(appDirectory, modernConfig, compileOptions) {
25
- var _modernConfig_server, sourceDirs, distDir, tsconfigPath, compiler, isTsProject, _tmp;
23
+ var _modernConfig_server, sourceDirs, distDir, tsconfigPath, compiler, isTsProject, _tmp, compileByBabel, compileByTs;
26
24
  return _ts_generator(this, function(_state) {
27
25
  switch (_state.label) {
28
26
  case 0:
@@ -50,27 +48,39 @@ export var compile = function() {
50
48
  if (!(!isTsProject || compiler === "babel"))
51
49
  return [
52
50
  3,
53
- 4
51
+ 5
54
52
  ];
55
53
  return [
56
54
  4,
57
- compileByBabel(appDirectory, modernConfig, compileOptions)
55
+ import("../compilers/babel")
58
56
  ];
59
57
  case 3:
58
+ compileByBabel = _state.sent().compileByBabel;
59
+ return [
60
+ 4,
61
+ compileByBabel(appDirectory, modernConfig, compileOptions)
62
+ ];
63
+ case 4:
60
64
  _state.sent();
61
65
  return [
62
66
  3,
63
- 6
67
+ 8
64
68
  ];
65
- case 4:
69
+ case 5:
70
+ return [
71
+ 4,
72
+ import("../compilers/typescript")
73
+ ];
74
+ case 6:
75
+ compileByTs = _state.sent().compileByTs;
66
76
  return [
67
77
  4,
68
78
  compileByTs(appDirectory, modernConfig, compileOptions)
69
79
  ];
70
- case 5:
80
+ case 7:
71
81
  _state.sent();
72
- _state.label = 6;
73
- case 6:
82
+ _state.label = 8;
83
+ case 8:
74
84
  return [
75
85
  2
76
86
  ];
@@ -1,7 +1,5 @@
1
1
  import * as path from "path";
2
2
  import { fs } from "@modern-js/utils";
3
- import { compileByTs } from "../compilers/typescript";
4
- import { compileByBabel } from "../compilers/babel";
5
3
  export const FILE_EXTENSIONS = [
6
4
  ".js",
7
5
  ".ts",
@@ -24,8 +22,10 @@ export const compile = async (appDirectory, modernConfig, compileOptions) => {
24
22
  const compiler = modernConfig === null || modernConfig === void 0 ? void 0 : (_modernConfig_server = modernConfig.server) === null || _modernConfig_server === void 0 ? void 0 : _modernConfig_server.compiler;
25
23
  const isTsProject = tsconfigPath && await fs.pathExists(tsconfigPath);
26
24
  if (!isTsProject || compiler === "babel") {
25
+ const { compileByBabel } = await import("../compilers/babel");
27
26
  await compileByBabel(appDirectory, modernConfig, compileOptions);
28
27
  } else {
28
+ const { compileByTs } = await import("../compilers/typescript");
29
29
  await compileByTs(appDirectory, modernConfig, compileOptions);
30
30
  }
31
31
  };
@@ -0,0 +1,55 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import * as path from "path";
22
+ import { fs } from "@modern-js/utils";
23
+ import { compileByTs } from "../compilers/typescript";
24
+ import { compileByBabel } from "../compilers/babel";
25
+ const FILE_EXTENSIONS = [".js", ".ts", ".mjs", ".ejs"];
26
+ const validateAbsolutePath = (filename, message) => {
27
+ if (!path.isAbsolute(filename)) {
28
+ throw new Error(message);
29
+ }
30
+ };
31
+ const validateAbsolutePaths = (filenames, messageFunc) => {
32
+ filenames.forEach(
33
+ (filename) => validateAbsolutePath(filename, messageFunc(filename))
34
+ );
35
+ };
36
+ const compile = (appDirectory, modernConfig, compileOptions) => __async(void 0, null, function* () {
37
+ var _a;
38
+ const { sourceDirs, distDir, tsconfigPath } = compileOptions;
39
+ validateAbsolutePaths(
40
+ sourceDirs,
41
+ (dir) => `source dir ${dir} is not an absolute path.`
42
+ );
43
+ validateAbsolutePath(distDir, `dist dir ${distDir} is not an absolute path.`);
44
+ const compiler = (_a = modernConfig == null ? void 0 : modernConfig.server) == null ? void 0 : _a.compiler;
45
+ const isTsProject = tsconfigPath && (yield fs.pathExists(tsconfigPath));
46
+ if (!isTsProject || compiler === "babel") {
47
+ yield compileByBabel(appDirectory, modernConfig, compileOptions);
48
+ } else {
49
+ yield compileByTs(appDirectory, modernConfig, compileOptions);
50
+ }
51
+ });
52
+ export {
53
+ FILE_EXTENSIONS,
54
+ compile
55
+ };
@@ -0,0 +1,149 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __async = (__this, __arguments, generator) => {
21
+ return new Promise((resolve, reject) => {
22
+ var fulfilled = (value) => {
23
+ try {
24
+ step(generator.next(value));
25
+ } catch (e) {
26
+ reject(e);
27
+ }
28
+ };
29
+ var rejected = (value) => {
30
+ try {
31
+ step(generator.throw(value));
32
+ } catch (e) {
33
+ reject(e);
34
+ }
35
+ };
36
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
37
+ step((generator = generator.apply(__this, __arguments)).next());
38
+ });
39
+ };
40
+ import * as path from "path";
41
+ import {
42
+ getBabelChain,
43
+ applyUserBabelConfig
44
+ } from "@modern-js/babel-preset-lib";
45
+ import { fs, json5, getAliasConfig } from "@modern-js/utils";
46
+ import { compiler } from "@modern-js/babel-compiler";
47
+ import { FILE_EXTENSIONS } from "../../common";
48
+ export * from "@babel/core";
49
+ const readTsConfig = (tsconfigPath, noExistReturn = null) => {
50
+ if (!fs.existsSync(tsconfigPath)) {
51
+ return noExistReturn;
52
+ }
53
+ const content = fs.readFileSync(tsconfigPath, "utf-8");
54
+ return json5.parse(content);
55
+ };
56
+ const existTsConfigFile = (tsconfigAbsolutePath) => {
57
+ const tsconfig = readTsConfig(tsconfigAbsolutePath);
58
+ return Boolean(tsconfig);
59
+ };
60
+ const getBabelConfig = (libPresetOption, syntaxOption) => {
61
+ const chain = getBabelChain(libPresetOption, syntaxOption);
62
+ return __spreadValues({
63
+ sourceType: "unambiguous"
64
+ }, chain.toJSON());
65
+ };
66
+ const resolveBabelConfig = (appDirectory, config, option) => {
67
+ const { globalVars, alias, babelConfig, define } = config;
68
+ const globalDefineVars = define && Object.entries(define).reduce((object, [key, value]) => {
69
+ object[key] = JSON.stringify(value);
70
+ return object;
71
+ }, {});
72
+ const aliasConfig = getAliasConfig(alias, __spreadValues({
73
+ appDirectory
74
+ }, option));
75
+ const babelChain = getBabelChain(
76
+ {
77
+ appDirectory,
78
+ enableReactPreset: true,
79
+ enableTypescriptPreset: true,
80
+ alias: aliasConfig,
81
+ envVars: [],
82
+ globalVars: __spreadValues(__spreadValues({}, globalVars), globalDefineVars)
83
+ },
84
+ {
85
+ type: option.type,
86
+ syntax: option.syntax
87
+ }
88
+ );
89
+ const envOptions = babelChain.preset("@babel/preset-env").options();
90
+ babelChain.preset("@babel/preset-env").use(require.resolve("@babel/preset-env"), [
91
+ __spreadProps(__spreadValues({}, envOptions[0]), {
92
+ loose: true
93
+ })
94
+ ]);
95
+ babelChain.plugin("babel-plugin-transform-typescript-metadata").use(
96
+ require.resolve("babel-plugin-transform-typescript-metadata"),
97
+ []
98
+ );
99
+ babelChain.plugin("@babel/plugin-proposal-decorators").use(require.resolve("@babel/plugin-proposal-decorators"), [
100
+ { legacy: true }
101
+ ]);
102
+ babelChain.plugin("@babel/plugin-proposal-class-properties").use(require.resolve("@babel/plugin-proposal-class-properties"), [
103
+ {
104
+ loose: true
105
+ }
106
+ ]);
107
+ const internalBabelConfig = __spreadValues({}, babelChain.toJSON());
108
+ return applyUserBabelConfig(internalBabelConfig, babelConfig);
109
+ };
110
+ const compileByBabel = (appDirectory, config, compileOptions) => __async(void 0, null, function* () {
111
+ const { sourceDirs, distDir, tsconfigPath } = compileOptions;
112
+ const results = yield Promise.all(
113
+ sourceDirs.map((sourceDir) => __async(void 0, null, function* () {
114
+ const babelConfig = resolveBabelConfig(appDirectory, config, {
115
+ tsconfigPath: tsconfigPath ? tsconfigPath : "",
116
+ syntax: "es6+",
117
+ type: "commonjs"
118
+ });
119
+ if (yield fs.pathExists(sourceDir)) {
120
+ const basename = path.basename(sourceDir);
121
+ const targetDir = path.join(distDir, basename);
122
+ yield fs.copy(sourceDir, targetDir, {
123
+ filter: (src) => ![".ts", ".js"].includes(path.extname(src)) && src !== tsconfigPath
124
+ });
125
+ }
126
+ return compiler(
127
+ {
128
+ rootDir: appDirectory,
129
+ distDir,
130
+ sourceDir,
131
+ extensions: FILE_EXTENSIONS
132
+ },
133
+ babelConfig
134
+ );
135
+ }))
136
+ );
137
+ results.forEach((result) => {
138
+ if (result.code === 1) {
139
+ throw new Error(result.message);
140
+ }
141
+ });
142
+ });
143
+ export {
144
+ compileByBabel,
145
+ existTsConfigFile,
146
+ getBabelConfig,
147
+ readTsConfig,
148
+ resolveBabelConfig
149
+ };
@@ -0,0 +1,123 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __async = (__this, __arguments, generator) => {
18
+ return new Promise((resolve, reject) => {
19
+ var fulfilled = (value) => {
20
+ try {
21
+ step(generator.next(value));
22
+ } catch (e) {
23
+ reject(e);
24
+ }
25
+ };
26
+ var rejected = (value) => {
27
+ try {
28
+ step(generator.throw(value));
29
+ } catch (e) {
30
+ reject(e);
31
+ }
32
+ };
33
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
34
+ step((generator = generator.apply(__this, __arguments)).next());
35
+ });
36
+ };
37
+ import path from "path";
38
+ import { logger, getAliasConfig, fs } from "@modern-js/utils";
39
+ import ts from "typescript";
40
+ import { TypescriptLoader } from "./typescript-loader";
41
+ import { tsconfigPathsBeforeHookFactory } from "./tsconfig-paths-plugin";
42
+ const readTsConfigByFile = (tsConfigFile) => {
43
+ const parsedCmd = ts.getParsedCommandLineOfConfigFile(
44
+ tsConfigFile,
45
+ void 0,
46
+ ts.sys
47
+ );
48
+ const { options, fileNames, projectReferences } = parsedCmd;
49
+ return { options, fileNames, projectReferences };
50
+ };
51
+ const copyFiles = (from, to, tsconfigPath) => __async(void 0, null, function* () {
52
+ if (yield fs.pathExists(from)) {
53
+ const basename = path.basename(from);
54
+ const targetDir = path.join(to, basename);
55
+ yield fs.copy(from, targetDir, {
56
+ filter: (src) => ![".ts"].includes(path.extname(src)) && src !== tsconfigPath
57
+ });
58
+ }
59
+ });
60
+ const compileByTs = (appDirectory, config, compileOptions) => __async(void 0, null, function* () {
61
+ logger.info(`Running ts compile...`);
62
+ const { sourceDirs, distDir, tsconfigPath } = compileOptions;
63
+ if (!tsconfigPath) {
64
+ return;
65
+ }
66
+ const ts2 = new TypescriptLoader({
67
+ appDirectory
68
+ }).load();
69
+ const createProgram = ts2.createIncrementalProgram || ts2.createProgram;
70
+ const formatHost = getFormatHost(ts2);
71
+ const { alias } = config;
72
+ const aliasOption = getAliasConfig(alias, {
73
+ appDirectory,
74
+ tsconfigPath
75
+ });
76
+ const { paths = {}, absoluteBaseUrl = "./" } = aliasOption;
77
+ const { options, fileNames, projectReferences } = readTsConfigByFile(tsconfigPath);
78
+ const sourcePosixPaths = sourceDirs.map(
79
+ (sourceDir) => sourceDir.split(path.sep).join(path.posix.sep)
80
+ );
81
+ const rootNames = fileNames.filter((fileName) => {
82
+ return fileName.endsWith(".d.ts") || sourcePosixPaths.some((sourceDir) => {
83
+ return fileName.includes(sourceDir);
84
+ });
85
+ });
86
+ const program = createProgram.call(ts2, {
87
+ rootNames,
88
+ projectReferences,
89
+ options: __spreadValues({
90
+ rootDir: appDirectory,
91
+ outDir: distDir
92
+ }, options)
93
+ });
94
+ const tsconfigPathsPlugin = tsconfigPathsBeforeHookFactory(
95
+ ts2,
96
+ absoluteBaseUrl,
97
+ paths
98
+ );
99
+ const emitResult = program.emit(void 0, void 0, void 0, void 0, {
100
+ before: [tsconfigPathsPlugin]
101
+ });
102
+ const allDiagnostics = ts2.getPreEmitDiagnostics(program).concat(emitResult.diagnostics);
103
+ if (allDiagnostics.length > 0) {
104
+ logger.error(
105
+ ts2.formatDiagnosticsWithColorAndContext(allDiagnostics, formatHost)
106
+ );
107
+ process.exit(1);
108
+ }
109
+ for (const source of sourceDirs) {
110
+ yield copyFiles(source, distDir, tsconfigPath);
111
+ }
112
+ logger.info(`Ts compile succeed`);
113
+ });
114
+ const getFormatHost = (ts2) => {
115
+ return {
116
+ getCanonicalFileName: (path2) => path2,
117
+ getCurrentDirectory: ts2.sys.getCurrentDirectory,
118
+ getNewLine: () => ts2.sys.newLine
119
+ };
120
+ };
121
+ export {
122
+ compileByTs
123
+ };
@@ -0,0 +1,187 @@
1
+ import * as os from "os";
2
+ import path, { dirname, posix } from "path";
3
+ import * as ts from "typescript";
4
+ import { createMatchPath } from "@modern-js/utils/tsconfig-paths";
5
+ const isRegExpKey = (str) => {
6
+ return str.startsWith("^") || str.endsWith("$");
7
+ };
8
+ const resolveAliasPath = (baseUrl, filePath) => {
9
+ if (filePath.startsWith(".") || filePath.startsWith("..")) {
10
+ return path.resolve(baseUrl, filePath);
11
+ }
12
+ return filePath;
13
+ };
14
+ const createAliasMatcher = (baseUrl, alias) => {
15
+ const aliasPairs = Object.keys(alias).reduce((o, key) => {
16
+ if (isRegExpKey(key)) {
17
+ const regexp = new RegExp(key);
18
+ const aliasPath = resolveAliasPath(baseUrl, alias[key]);
19
+ o.push([regexp, aliasPath]);
20
+ } else {
21
+ const aliasPath = resolveAliasPath(baseUrl, alias[key]);
22
+ o.push([key, aliasPath]);
23
+ }
24
+ return o;
25
+ }, []);
26
+ const cacheMap = /* @__PURE__ */ new Map();
27
+ return (requestedModule) => {
28
+ if (cacheMap.has(requestedModule)) {
29
+ return cacheMap.get(requestedModule);
30
+ }
31
+ for (const [key, value] of aliasPairs) {
32
+ if (key instanceof RegExp) {
33
+ if (key.test(requestedModule)) {
34
+ cacheMap.set(requestedModule, value);
35
+ return value;
36
+ }
37
+ }
38
+ if (requestedModule === key) {
39
+ cacheMap.set(requestedModule, value);
40
+ return value;
41
+ }
42
+ }
43
+ };
44
+ };
45
+ const isDynamicImport = (tsBinary, node) => {
46
+ return tsBinary.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword;
47
+ };
48
+ function tsconfigPathsBeforeHookFactory(tsBinary, baseUrl, paths) {
49
+ const tsPaths = {};
50
+ const alias = {};
51
+ Object.keys(paths).forEach((key) => {
52
+ if (Array.isArray(paths[key])) {
53
+ tsPaths[key] = paths[key];
54
+ } else {
55
+ alias[key] = paths[key];
56
+ }
57
+ });
58
+ const matchAliasPath = createAliasMatcher(baseUrl, alias);
59
+ const matchTsPath = createMatchPath(baseUrl, tsPaths, ["main"]);
60
+ const matchPath = (requestedModule, readJSONSync, fileExists, extensions) => {
61
+ const result = matchTsPath(
62
+ requestedModule,
63
+ readJSONSync,
64
+ fileExists,
65
+ extensions
66
+ );
67
+ if (result) {
68
+ return result;
69
+ }
70
+ return matchAliasPath(requestedModule);
71
+ };
72
+ if (Object.keys(paths).length === 0) {
73
+ return void 0;
74
+ }
75
+ return (ctx) => {
76
+ return (sf) => {
77
+ const visitNode = (node) => {
78
+ var _a;
79
+ if (isDynamicImport(tsBinary, node)) {
80
+ const importPathWithQuotes = node.arguments[0].getText(sf);
81
+ const text = importPathWithQuotes.slice(
82
+ 1,
83
+ importPathWithQuotes.length - 1
84
+ );
85
+ const result = getNotAliasedPath(sf, matchPath, text);
86
+ if (!result) {
87
+ return node;
88
+ }
89
+ return tsBinary.factory.updateCallExpression(
90
+ node,
91
+ node.expression,
92
+ node.typeArguments,
93
+ tsBinary.factory.createNodeArray([
94
+ tsBinary.factory.createStringLiteral(result)
95
+ ])
96
+ );
97
+ }
98
+ if (tsBinary.isImportDeclaration(node) || tsBinary.isExportDeclaration(node) && node.moduleSpecifier) {
99
+ try {
100
+ const importPathWithQuotes = (_a = node == null ? void 0 : node.moduleSpecifier) == null ? void 0 : _a.getText();
101
+ if (!importPathWithQuotes) {
102
+ return node;
103
+ }
104
+ const text = importPathWithQuotes.substring(
105
+ 1,
106
+ importPathWithQuotes.length - 1
107
+ );
108
+ const result = getNotAliasedPath(sf, matchPath, text);
109
+ if (!result) {
110
+ return node;
111
+ }
112
+ const moduleSpecifier = tsBinary.factory.createStringLiteral(result);
113
+ moduleSpecifier.parent = node.moduleSpecifier.parent;
114
+ let newNode;
115
+ if (tsBinary.isImportDeclaration(node)) {
116
+ newNode = tsBinary.factory.updateImportDeclaration(
117
+ node,
118
+ node.decorators,
119
+ node.modifiers,
120
+ node.importClause,
121
+ moduleSpecifier,
122
+ node.assertClause
123
+ );
124
+ } else {
125
+ newNode = tsBinary.factory.updateExportDeclaration(
126
+ node,
127
+ node.decorators,
128
+ node.modifiers,
129
+ node.isTypeOnly,
130
+ node.exportClause,
131
+ moduleSpecifier,
132
+ node.assertClause
133
+ );
134
+ }
135
+ newNode.flags = node.flags;
136
+ return newNode;
137
+ } catch (e) {
138
+ return node;
139
+ }
140
+ }
141
+ return tsBinary.visitEachChild(node, visitNode, ctx);
142
+ };
143
+ return tsBinary.visitNode(sf, visitNode);
144
+ };
145
+ };
146
+ }
147
+ function getNotAliasedPath(sf, matcher, text) {
148
+ let result = matcher(text, void 0, void 0, [
149
+ ".ts",
150
+ ".tsx",
151
+ ".js",
152
+ ".jsx"
153
+ ]);
154
+ if (!result) {
155
+ return;
156
+ }
157
+ if (os.platform() === "win32") {
158
+ result = result.replace(/\\/g, "/");
159
+ }
160
+ if (!path.isAbsolute(result)) {
161
+ if (!result.startsWith(".") && !result.startsWith("..")) {
162
+ try {
163
+ const packagePath = require.resolve(result, {
164
+ paths: [process.cwd(), ...module.paths]
165
+ });
166
+ if (packagePath) {
167
+ return result;
168
+ }
169
+ } catch (e) {
170
+ }
171
+ }
172
+ try {
173
+ const packagePath = require.resolve(text, {
174
+ paths: [process.cwd(), ...module.paths]
175
+ });
176
+ if (packagePath) {
177
+ return text;
178
+ }
179
+ } catch (e) {
180
+ }
181
+ }
182
+ const resolvedPath = posix.relative(dirname(sf.fileName), result) || "./";
183
+ return resolvedPath[0] === "." ? resolvedPath : `./${resolvedPath}`;
184
+ }
185
+ export {
186
+ tsconfigPathsBeforeHookFactory
187
+ };
@@ -0,0 +1,24 @@
1
+ class TypescriptLoader {
2
+ constructor({ appDirectory }) {
3
+ this.appDirectory = appDirectory;
4
+ }
5
+ load() {
6
+ if (this.tsBinary) {
7
+ return this.tsBinary;
8
+ }
9
+ try {
10
+ const tsPath = require.resolve("typescript", {
11
+ paths: [this.appDirectory || process.cwd()]
12
+ });
13
+ const ts = require(tsPath);
14
+ return ts;
15
+ } catch (error) {
16
+ throw new Error(
17
+ 'TypeScript could not be found! Please, install "typescript" package.'
18
+ );
19
+ }
20
+ }
21
+ }
22
+ export {
23
+ TypescriptLoader
24
+ };
@@ -0,0 +1,5 @@
1
+ export * from "./compilers/babel";
2
+ import { compile } from "./common";
3
+ export {
4
+ compile
5
+ };