initial commit
This commit is contained in:
		
							
								
								
									
										24
									
								
								node_modules/ts-node/dist-raw/NODE-LICENSE.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								node_modules/ts-node/dist-raw/NODE-LICENSE.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| This directory contains portions of Node.js source code which is licensed as follows: | ||||
|  | ||||
| --- | ||||
|  | ||||
| Copyright Joyent, Inc. and other Node contributors. | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a | ||||
| copy of this software and associated documentation files (the | ||||
| "Software"), to deal in the Software without restriction, including | ||||
| without limitation the rights to use, copy, modify, merge, publish, | ||||
| distribute, sublicense, and/or sell copies of the Software, and to permit | ||||
| persons to whom the Software is furnished to do so, subject to the | ||||
| following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included | ||||
| in all copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||
| OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||||
| NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||||
| DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||||
| OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||||
| USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
							
								
								
									
										36
									
								
								node_modules/ts-node/dist-raw/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								node_modules/ts-node/dist-raw/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| The `dist-raw` directory contains JS sources that are distributed verbatim, not compiled nor typechecked via TS. | ||||
|  | ||||
| To implement ESM support, we unfortunately must duplicate some of node's built-in functionality that is not | ||||
| exposed via an API.  We have copy-pasted the necessary code from https://github.com/nodejs/node/tree/master/lib | ||||
| then modified it to suite our needs. | ||||
|  | ||||
| Formatting may be intentionally bad to keep the diff as small as possible, to make it easier to merge | ||||
| upstream changes and understand our modifications.  For example, when we need to wrap node's source code | ||||
| in a factory function, we will not indent the function body, to avoid whitespace changes in the diff. | ||||
|  | ||||
| One obvious problem with this approach: the code has been pulled from one version of node, whereas users of ts-node | ||||
| run multiple versions of node. | ||||
| Users running node 12 may see that ts-node behaves like node 14, for example. | ||||
|  | ||||
| ## `raw` directory | ||||
|  | ||||
| Within the `raw` directory, we keep unmodified copies of the node source files.  This allows us to use diffing tools to | ||||
| compare files in `raw` to those in `dist-raw`, which will highlight all of the changes we have made.  Hopefully, these | ||||
| changes are as minimal as possible. | ||||
|  | ||||
| ## Naming convention | ||||
|  | ||||
| Not used consistently, but the idea is: | ||||
|  | ||||
| `node-<directory>(...-<directory>)-<filename>.js` | ||||
|  | ||||
| `node-internal-errors.js` -> `github.com/nodejs/node/blob/TAG/lib/internal/errors.js` | ||||
|  | ||||
| So, take the path within node's `lib/` directory, and replace slashes with hyphens. | ||||
|  | ||||
| In the `raw` directory, files are suffixed with the version number or revision from which | ||||
| they were downloaded. | ||||
|  | ||||
| If they have a `stripped` suffix, this means they have large chunks of code deleted, but no other modifications. | ||||
| This is useful when diffing.  Sometimes our `dist-raw` files only have a small part of a much larger node source file. | ||||
| It is easier to diff `raw/*-stripped.js` against `dist-raw/*.js`. | ||||
							
								
								
									
										4
									
								
								node_modules/ts-node/dist-raw/node-internal-constants.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								node_modules/ts-node/dist-raw/node-internal-constants.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| // Copied from https://github.com/nodejs/node/blob/master/lib/internal/constants.js | ||||
| module.exports = { | ||||
|   CHAR_FORWARD_SLASH: 47, /* / */ | ||||
| }; | ||||
							
								
								
									
										82
									
								
								node_modules/ts-node/dist-raw/node-internal-errors.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								node_modules/ts-node/dist-raw/node-internal-errors.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| const path = require('path'); | ||||
|  | ||||
| exports.codes = { | ||||
|   ERR_INPUT_TYPE_NOT_ALLOWED: createErrorCtor(joinArgs('ERR_INPUT_TYPE_NOT_ALLOWED')), | ||||
|   ERR_INVALID_ARG_VALUE: createErrorCtor(joinArgs('ERR_INVALID_ARG_VALUE')), | ||||
|   ERR_INVALID_MODULE_SPECIFIER: createErrorCtor(joinArgs('ERR_INVALID_MODULE_SPECIFIER')), | ||||
|   ERR_INVALID_PACKAGE_CONFIG: createErrorCtor(joinArgs('ERR_INVALID_PACKAGE_CONFIG')), | ||||
|   ERR_INVALID_PACKAGE_TARGET: createErrorCtor(joinArgs('ERR_INVALID_PACKAGE_TARGET')), | ||||
|   ERR_MANIFEST_DEPENDENCY_MISSING: createErrorCtor(joinArgs('ERR_MANIFEST_DEPENDENCY_MISSING')), | ||||
|   ERR_MODULE_NOT_FOUND: createErrorCtor((path, base, type = 'package') => { | ||||
|     return `Cannot find ${type} '${path}' imported from ${base}` | ||||
|   }), | ||||
|   ERR_PACKAGE_IMPORT_NOT_DEFINED: createErrorCtor(joinArgs('ERR_PACKAGE_IMPORT_NOT_DEFINED')), | ||||
|   ERR_PACKAGE_PATH_NOT_EXPORTED: createErrorCtor(joinArgs('ERR_PACKAGE_PATH_NOT_EXPORTED')), | ||||
|   ERR_UNSUPPORTED_DIR_IMPORT: createErrorCtor(joinArgs('ERR_UNSUPPORTED_DIR_IMPORT')), | ||||
|   ERR_UNSUPPORTED_ESM_URL_SCHEME: createErrorCtor(joinArgs('ERR_UNSUPPORTED_ESM_URL_SCHEME')), | ||||
|   ERR_UNKNOWN_FILE_EXTENSION: createErrorCtor(joinArgs('ERR_UNKNOWN_FILE_EXTENSION')), | ||||
| } | ||||
|  | ||||
| function joinArgs(name) { | ||||
|   return (...args) => { | ||||
|     return [name, ...args].join(' ') | ||||
|   } | ||||
| } | ||||
|  | ||||
| function createErrorCtor(errorMessageCreator) { | ||||
|   return class CustomError extends Error { | ||||
|     constructor(...args) { | ||||
|       super(errorMessageCreator(...args)) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| exports.createErrRequireEsm = createErrRequireEsm; | ||||
|  | ||||
| // Native ERR_REQUIRE_ESM Error is declared here: | ||||
| //   https://github.com/nodejs/node/blob/2d5d77306f6dff9110c1f77fefab25f973415770/lib/internal/errors.js#L1294-L1313 | ||||
| // Error class factory is implemented here: | ||||
| //   function E: https://github.com/nodejs/node/blob/2d5d77306f6dff9110c1f77fefab25f973415770/lib/internal/errors.js#L323-L341 | ||||
| //   function makeNodeErrorWithCode: https://github.com/nodejs/node/blob/2d5d77306f6dff9110c1f77fefab25f973415770/lib/internal/errors.js#L251-L278 | ||||
| // The code below should create an error that matches the native error as closely as possible. | ||||
| // Third-party libraries which attempt to catch the native ERR_REQUIRE_ESM should recognize our imitation error. | ||||
| function createErrRequireEsm(filename, parentPath, packageJsonPath) { | ||||
|   const code = 'ERR_REQUIRE_ESM' | ||||
|   const err = new Error(getErrRequireEsmMessage(filename, parentPath, packageJsonPath)) | ||||
|   // Set `name` to be used in stack trace, generate stack trace with that name baked in, then re-declare the `name` field. | ||||
|   // This trick is copied from node's source. | ||||
|   err.name = `Error [${ code }]` | ||||
|   err.stack | ||||
|   Object.defineProperty(err, 'name', { | ||||
|     value: 'Error', | ||||
|     enumerable: false, | ||||
|     writable: true, | ||||
|     configurable: true | ||||
|   }) | ||||
|   err.code = code | ||||
|   return err | ||||
| } | ||||
|  | ||||
| // Copy-pasted from https://github.com/nodejs/node/blob/b533fb3508009e5f567cc776daba8fbf665386a6/lib/internal/errors.js#L1293-L1311 | ||||
| // so that our error message is identical to the native message. | ||||
| function getErrRequireEsmMessage(filename, parentPath = null, packageJsonPath = null) { | ||||
|   const ext = path.extname(filename) | ||||
|   let msg = `Must use import to load ES Module: ${filename}`; | ||||
|   if (parentPath && packageJsonPath) { | ||||
|     const path = require('path'); | ||||
|     const basename = path.basename(filename) === path.basename(parentPath) ? | ||||
|       filename : path.basename(filename); | ||||
|     msg += | ||||
|       '\nrequire() of ES modules is not supported.\nrequire() of ' + | ||||
|       `${filename} ${parentPath ? `from ${parentPath} ` : ''}` + | ||||
|       `is an ES module file as it is a ${ext} file whose nearest parent ` + | ||||
|       `package.json contains "type": "module" which defines all ${ext} ` + | ||||
|       'files in that package scope as ES modules.\nInstead ' + | ||||
|       'change the requiring code to use ' + | ||||
|       'import(), or remove "type": "module" from ' + | ||||
|       `${packageJsonPath}.\n`; | ||||
|     return msg; | ||||
|   } | ||||
|   return msg; | ||||
| } | ||||
							
								
								
									
										89
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-cjs-helpers.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-cjs-helpers.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| // Copied from https://github.com/nodejs/node/blob/v17.0.1/lib/internal/modules/cjs/helpers.js | ||||
|  | ||||
| 'use strict'; | ||||
|  | ||||
| const { | ||||
|   ArrayPrototypeForEach, | ||||
|   ObjectDefineProperty, | ||||
|   ObjectPrototypeHasOwnProperty, | ||||
|   SafeSet, | ||||
|   StringPrototypeIncludes, | ||||
|   StringPrototypeStartsWith, | ||||
| } = require('./node-primordials'); | ||||
|  | ||||
| const { getOptionValue } = require('./node-options'); | ||||
| const userConditions = getOptionValue('--conditions'); | ||||
|  | ||||
| const noAddons = getOptionValue('--no-addons'); | ||||
| const addonConditions = noAddons ? [] : ['node-addons']; | ||||
|  | ||||
| // TODO: Use this set when resolving pkg#exports conditions in loader.js. | ||||
| const cjsConditions = new SafeSet([ | ||||
|   'require', | ||||
|   'node', | ||||
|   ...addonConditions, | ||||
|   ...userConditions, | ||||
| ]); | ||||
|  | ||||
| /** | ||||
|  * @param {any} object | ||||
|  * @param {string} [dummyModuleName] | ||||
|  * @return {void} | ||||
|  */ | ||||
| function addBuiltinLibsToObject(object, dummyModuleName) { | ||||
|   // Make built-in modules available directly (loaded lazily). | ||||
|   const Module = require('module').Module; | ||||
|   const { builtinModules } = Module; | ||||
|  | ||||
|   // To require built-in modules in user-land and ignore modules whose | ||||
|   // `canBeRequiredByUsers` is false. So we create a dummy module object and not | ||||
|   // use `require()` directly. | ||||
|   const dummyModule = new Module(dummyModuleName); | ||||
|  | ||||
|   ArrayPrototypeForEach(builtinModules, (name) => { | ||||
|     // Neither add underscored modules, nor ones that contain slashes (e.g., | ||||
|     // 'fs/promises') or ones that are already defined. | ||||
|     if (StringPrototypeStartsWith(name, '_') || | ||||
|         StringPrototypeIncludes(name, '/') || | ||||
|         ObjectPrototypeHasOwnProperty(object, name)) { | ||||
|       return; | ||||
|     } | ||||
|     // Goals of this mechanism are: | ||||
|     // - Lazy loading of built-in modules | ||||
|     // - Having all built-in modules available as non-enumerable properties | ||||
|     // - Allowing the user to re-assign these variables as if there were no | ||||
|     //   pre-existing globals with the same name. | ||||
|  | ||||
|     const setReal = (val) => { | ||||
|       // Deleting the property before re-assigning it disables the | ||||
|       // getter/setter mechanism. | ||||
|       delete object[name]; | ||||
|       object[name] = val; | ||||
|     }; | ||||
|  | ||||
|     ObjectDefineProperty(object, name, { | ||||
|       get: () => { | ||||
|         // Node 12 hack; remove when we drop node12 support | ||||
|         const lib = (dummyModule.require || require)(name); | ||||
|  | ||||
|         // Disable the current getter/setter and set up a new | ||||
|         // non-enumerable property. | ||||
|         delete object[name]; | ||||
|         ObjectDefineProperty(object, name, { | ||||
|           get: () => lib, | ||||
|           set: setReal, | ||||
|           configurable: true, | ||||
|           enumerable: false | ||||
|         }); | ||||
|  | ||||
|         return lib; | ||||
|       }, | ||||
|       set: setReal, | ||||
|       configurable: true, | ||||
|       enumerable: false | ||||
|     }); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| exports.addBuiltinLibsToObject = addBuiltinLibsToObject; | ||||
| exports.cjsConditions = cjsConditions; | ||||
							
								
								
									
										593
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-cjs-loader.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										593
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-cjs-loader.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,593 @@ | ||||
| // Copied from several files in node's source code. | ||||
| // https://github.com/nodejs/node/blob/2d5d77306f6dff9110c1f77fefab25f973415770/lib/internal/modules/cjs/loader.js | ||||
| // Each function and variable below must have a comment linking to the source in node's github repo. | ||||
|  | ||||
| 'use strict'; | ||||
|  | ||||
| const { | ||||
|   ArrayIsArray, | ||||
|   ArrayPrototypeIncludes, | ||||
|   ArrayPrototypeJoin, | ||||
|   ArrayPrototypePush, | ||||
|   JSONParse, | ||||
|   ObjectKeys, | ||||
|   RegExpPrototypeTest, | ||||
|   SafeMap, | ||||
|   SafeWeakMap, | ||||
|   StringPrototypeCharCodeAt, | ||||
|   StringPrototypeEndsWith, | ||||
|   StringPrototypeLastIndexOf, | ||||
|   StringPrototypeIndexOf, | ||||
|   StringPrototypeMatch, | ||||
|   StringPrototypeSlice, | ||||
|   StringPrototypeStartsWith, | ||||
| } = require('./node-primordials'); | ||||
| const { NativeModule } = require('./node-nativemodule'); | ||||
| const { pathToFileURL, fileURLToPath } = require('url'); | ||||
| const fs = require('fs'); | ||||
| const path = require('path'); | ||||
| const { sep } = path; | ||||
| const { internalModuleStat } = require('./node-internalBinding-fs'); | ||||
| const packageJsonReader = require('./node-internal-modules-package_json_reader'); | ||||
| const { | ||||
|   cjsConditions, | ||||
| } = require('./node-internal-modules-cjs-helpers'); | ||||
| const { getOptionValue } = require('./node-options'); | ||||
| const preserveSymlinks = getOptionValue('--preserve-symlinks'); | ||||
| const preserveSymlinksMain = getOptionValue('--preserve-symlinks-main'); | ||||
| const {normalizeSlashes} = require('../dist/util'); | ||||
| const {createErrRequireEsm} = require('./node-internal-errors'); | ||||
| const { | ||||
|   codes: { | ||||
|     ERR_INVALID_MODULE_SPECIFIER, | ||||
|   }, | ||||
| } = require('./node-internal-errors'); | ||||
|  | ||||
| const { | ||||
|   CHAR_FORWARD_SLASH, | ||||
| } = require('./node-internal-constants'); | ||||
|  | ||||
| const Module = require('module'); | ||||
|  | ||||
| const isWindows = process.platform === 'win32'; | ||||
|  | ||||
| let statCache = null; | ||||
|  | ||||
| function stat(filename) { | ||||
|   filename = path.toNamespacedPath(filename); | ||||
|   if (statCache !== null) { | ||||
|     const result = statCache.get(filename); | ||||
|     if (result !== undefined) return result; | ||||
|   } | ||||
|   const result = internalModuleStat(filename); | ||||
|   if (statCache !== null && result >= 0) { | ||||
|     // Only set cache when `internalModuleStat(filename)` succeeds. | ||||
|     statCache.set(filename, result); | ||||
|   } | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| // Note: | ||||
| // we cannot get access to node's internal cache, which is populated from | ||||
| // within node's Module constructor.  So the cache here will always be empty. | ||||
| // It's possible we could approximate our own cache by building it up with | ||||
| // hacky workarounds, but it's not worth the complexity and flakiness. | ||||
| const moduleParentCache = new SafeWeakMap(); | ||||
|  | ||||
| // Given a module name, and a list of paths to test, returns the first | ||||
| // matching file in the following precedence. | ||||
| // | ||||
| // require("a.<ext>") | ||||
| //   -> a.<ext> | ||||
| // | ||||
| // require("a") | ||||
| //   -> a | ||||
| //   -> a.<ext> | ||||
| //   -> a/index.<ext> | ||||
|  | ||||
| const packageJsonCache = new SafeMap(); | ||||
|  | ||||
| function readPackage(requestPath) { | ||||
|   const jsonPath = path.resolve(requestPath, 'package.json'); | ||||
|  | ||||
|   const existing = packageJsonCache.get(jsonPath); | ||||
|   if (existing !== undefined) return existing; | ||||
|  | ||||
|   const result = packageJsonReader.read(jsonPath); | ||||
|   const json = result.containsKeys === false ? '{}' : result.string; | ||||
|   if (json === undefined) { | ||||
|     packageJsonCache.set(jsonPath, false); | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   try { | ||||
|     const parsed = JSONParse(json); | ||||
|     const filtered = { | ||||
|       name: parsed.name, | ||||
|       main: parsed.main, | ||||
|       exports: parsed.exports, | ||||
|       imports: parsed.imports, | ||||
|       type: parsed.type | ||||
|     }; | ||||
|     packageJsonCache.set(jsonPath, filtered); | ||||
|     return filtered; | ||||
|   } catch (e) { | ||||
|     e.path = jsonPath; | ||||
|     e.message = 'Error parsing ' + jsonPath + ': ' + e.message; | ||||
|     throw e; | ||||
|   } | ||||
| } | ||||
|  | ||||
| function readPackageScope(checkPath) { | ||||
|   const rootSeparatorIndex = StringPrototypeIndexOf(checkPath, sep); | ||||
|   let separatorIndex; | ||||
|   do { | ||||
|     separatorIndex = StringPrototypeLastIndexOf(checkPath, sep); | ||||
|     checkPath = StringPrototypeSlice(checkPath, 0, separatorIndex); | ||||
|     if (StringPrototypeEndsWith(checkPath, sep + 'node_modules')) | ||||
|       return false; | ||||
|     const pjson = readPackage(checkPath + sep); | ||||
|     if (pjson) return { | ||||
|       data: pjson, | ||||
|       path: checkPath, | ||||
|     }; | ||||
|   } while (separatorIndex > rootSeparatorIndex); | ||||
|   return false; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param {{ | ||||
|  *   nodeEsmResolver: ReturnType<typeof import('./node-internal-modules-esm-resolve').createResolve>, | ||||
|  *   extensions: import('../src/file-extensions').Extensions, | ||||
|  *   preferTsExts | ||||
|  * }} opts | ||||
|  */ | ||||
| function createCjsLoader(opts) { | ||||
| const {nodeEsmResolver, preferTsExts} = opts; | ||||
| const {replacementsForCjs, replacementsForJs, replacementsForMjs, replacementsForJsx} = opts.extensions; | ||||
| const { | ||||
|   encodedSepRegEx, | ||||
|   packageExportsResolve, | ||||
|   packageImportsResolve | ||||
| } = nodeEsmResolver; | ||||
|  | ||||
| function tryPackage(requestPath, exts, isMain, originalPath) { | ||||
|   // const pkg = readPackage(requestPath)?.main; | ||||
|   const tmp = readPackage(requestPath) | ||||
|   const pkg = tmp != null ? tmp.main : undefined; | ||||
|  | ||||
|   if (!pkg) { | ||||
|     return tryExtensions(path.resolve(requestPath, 'index'), exts, isMain); | ||||
|   } | ||||
|  | ||||
|   const filename = path.resolve(requestPath, pkg); | ||||
|   let actual = tryReplacementExtensions(filename, isMain) || | ||||
|     tryFile(filename, isMain) || | ||||
|     tryExtensions(filename, exts, isMain) || | ||||
|     tryExtensions(path.resolve(filename, 'index'), exts, isMain); | ||||
|   if (actual === false) { | ||||
|     actual = tryExtensions(path.resolve(requestPath, 'index'), exts, isMain); | ||||
|     if (!actual) { | ||||
|       // eslint-disable-next-line no-restricted-syntax | ||||
|       const err = new Error( | ||||
|         `Cannot find module '${filename}'. ` + | ||||
|         'Please verify that the package.json has a valid "main" entry' | ||||
|       ); | ||||
|       err.code = 'MODULE_NOT_FOUND'; | ||||
|       err.path = path.resolve(requestPath, 'package.json'); | ||||
|       err.requestPath = originalPath; | ||||
|       // TODO(BridgeAR): Add the requireStack as well. | ||||
|       throw err; | ||||
|     } else { | ||||
|       const jsonPath = path.resolve(requestPath, 'package.json'); | ||||
|       process.emitWarning( | ||||
|         `Invalid 'main' field in '${jsonPath}' of '${pkg}'. ` + | ||||
|           'Please either fix that or report it to the module author', | ||||
|         'DeprecationWarning', | ||||
|         'DEP0128' | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|   return actual; | ||||
| } | ||||
|  | ||||
| // In order to minimize unnecessary lstat() calls, | ||||
| // this cache is a list of known-real paths. | ||||
| // Set to an empty Map to reset. | ||||
| const realpathCache = new SafeMap(); | ||||
|  | ||||
| // Check if the file exists and is not a directory | ||||
| // if using --preserve-symlinks and isMain is false, | ||||
| // keep symlinks intact, otherwise resolve to the | ||||
| // absolute realpath. | ||||
| function tryFile(requestPath, isMain) { | ||||
|   const rc = stat(requestPath); | ||||
|   if (rc !== 0) return; | ||||
|   if (preserveSymlinks && !isMain) { | ||||
|     return path.resolve(requestPath); | ||||
|   } | ||||
|   return toRealPath(requestPath); | ||||
| } | ||||
|  | ||||
| function toRealPath(requestPath) { | ||||
|   return fs.realpathSync(requestPath, { | ||||
|     // [internalFS.realpathCacheKey]: realpathCache | ||||
|   }); | ||||
| } | ||||
|  | ||||
| function statReplacementExtensions(p) { | ||||
|   const lastDotIndex = p.lastIndexOf('.'); | ||||
|   if(lastDotIndex >= 0) { | ||||
|     const ext = p.slice(lastDotIndex); | ||||
|     if (ext === '.js' || ext === '.jsx' || ext === '.mjs' || ext === '.cjs') { | ||||
|       const pathnameWithoutExtension = p.slice(0, lastDotIndex); | ||||
|       const replacementExts = | ||||
|         ext === '.js' ? replacementsForJs | ||||
|         : ext === '.jsx' ? replacementsForJsx | ||||
|         : ext === '.mjs' ? replacementsForMjs | ||||
|         : replacementsForCjs; | ||||
|       for (let i = 0; i < replacementExts.length; i++) { | ||||
|         const filename = pathnameWithoutExtension + replacementExts[i]; | ||||
|         const rc = stat(filename); | ||||
|         if (rc === 0) { | ||||
|           return [rc, filename]; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   return [stat(p), p]; | ||||
| } | ||||
| function tryReplacementExtensions(p, isMain) { | ||||
|   const lastDotIndex = p.lastIndexOf('.'); | ||||
|   if(lastDotIndex >= 0) { | ||||
|     const ext = p.slice(lastDotIndex); | ||||
|     if (ext === '.js' || ext === '.jsx' || ext === '.mjs' || ext === '.cjs') { | ||||
|       const pathnameWithoutExtension = p.slice(0, lastDotIndex); | ||||
|       const replacementExts = | ||||
|         ext === '.js' ? replacementsForJs | ||||
|         : ext === '.jsx' ? replacementsForJsx | ||||
|         : ext === '.mjs' ? replacementsForMjs | ||||
|         : replacementsForCjs; | ||||
|       for (let i = 0; i < replacementExts.length; i++) { | ||||
|         const filename = tryFile(pathnameWithoutExtension + replacementExts[i], isMain); | ||||
|         if (filename) { | ||||
|           return filename; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   return false; | ||||
| } | ||||
|  | ||||
| // Given a path, check if the file exists with any of the set extensions | ||||
| function tryExtensions(p, exts, isMain) { | ||||
|   for (let i = 0; i < exts.length; i++) { | ||||
|     const filename = tryFile(p + exts[i], isMain); | ||||
|  | ||||
|     if (filename) { | ||||
|       return filename; | ||||
|     } | ||||
|   } | ||||
|   return false; | ||||
| } | ||||
|  | ||||
| function trySelfParentPath(parent) { | ||||
|   if (!parent) return false; | ||||
|  | ||||
|   if (parent.filename) { | ||||
|     return parent.filename; | ||||
|   } else if (parent.id === '<repl>' || parent.id === 'internal/preload') { | ||||
|     try { | ||||
|       return process.cwd() + path.sep; | ||||
|     } catch { | ||||
|       return false; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| function trySelf(parentPath, request) { | ||||
|   if (!parentPath) return false; | ||||
|  | ||||
|   const { data: pkg, path: pkgPath } = readPackageScope(parentPath) || {}; | ||||
|   if (!pkg || pkg.exports === undefined) return false; | ||||
|   if (typeof pkg.name !== 'string') return false; | ||||
|  | ||||
|   let expansion; | ||||
|   if (request === pkg.name) { | ||||
|     expansion = '.'; | ||||
|   } else if (StringPrototypeStartsWith(request, `${pkg.name}/`)) { | ||||
|     expansion = '.' + StringPrototypeSlice(request, pkg.name.length); | ||||
|   } else { | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   try { | ||||
|     return finalizeEsmResolution(packageExportsResolve( | ||||
|       pathToFileURL(pkgPath + '/package.json'), expansion, pkg, | ||||
|       pathToFileURL(parentPath), cjsConditions).resolved, parentPath, pkgPath); | ||||
|   } catch (e) { | ||||
|     if (e.code === 'ERR_MODULE_NOT_FOUND') | ||||
|       throw createEsmNotFoundErr(request, pkgPath + '/package.json'); | ||||
|     throw e; | ||||
|   } | ||||
| } | ||||
|  | ||||
| // This only applies to requests of a specific form: | ||||
| // 1. name/.* | ||||
| // 2. @scope/name/.* | ||||
| const EXPORTS_PATTERN = /^((?:@[^/\\%]+\/)?[^./\\%][^/\\%]*)(\/.*)?$/; | ||||
| function resolveExports(nmPath, request) { | ||||
|   // The implementation's behavior is meant to mirror resolution in ESM. | ||||
|   const { 1: name, 2: expansion = '' } = | ||||
|     StringPrototypeMatch(request, EXPORTS_PATTERN) || []; | ||||
|   if (!name) | ||||
|     return; | ||||
|   const pkgPath = path.resolve(nmPath, name); | ||||
|   const pkg = readPackage(pkgPath); | ||||
|   // if (pkg?.exports != null) { | ||||
|   if (pkg != null && pkg.exports != null) { | ||||
|     try { | ||||
|       return finalizeEsmResolution(packageExportsResolve( | ||||
|         pathToFileURL(pkgPath + '/package.json'), '.' + expansion, pkg, null, | ||||
|         cjsConditions).resolved, null, pkgPath); | ||||
|     } catch (e) { | ||||
|       if (e.code === 'ERR_MODULE_NOT_FOUND') | ||||
|         throw createEsmNotFoundErr(request, pkgPath + '/package.json'); | ||||
|       throw e; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| // Backwards compat for old node versions | ||||
| const hasModulePathCache = !!require('module')._pathCache; | ||||
| const Module_pathCache = Object.create(null); | ||||
| const Module_pathCache_get = hasModulePathCache ? (cacheKey) => Module._pathCache[cacheKey] : (cacheKey) => Module_pathCache[cacheKey]; | ||||
| const Module_pathCache_set = hasModulePathCache ? (cacheKey, value) => (Module._pathCache[cacheKey] = value) : (cacheKey) => (Module_pathCache[cacheKey] = value); | ||||
|  | ||||
| const trailingSlashRegex = /(?:^|\/)\.?\.$/; | ||||
| const Module_findPath = function _findPath(request, paths, isMain) { | ||||
|   const absoluteRequest = path.isAbsolute(request); | ||||
|   if (absoluteRequest) { | ||||
|     paths = ['']; | ||||
|   } else if (!paths || paths.length === 0) { | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   const cacheKey = request + '\x00' + ArrayPrototypeJoin(paths, '\x00'); | ||||
|   const entry = Module_pathCache_get(cacheKey); | ||||
|   if (entry) | ||||
|     return entry; | ||||
|  | ||||
|   let exts; | ||||
|   let trailingSlash = request.length > 0 && | ||||
|     StringPrototypeCharCodeAt(request, request.length - 1) === | ||||
|     CHAR_FORWARD_SLASH; | ||||
|   if (!trailingSlash) { | ||||
|     trailingSlash = RegExpPrototypeTest(trailingSlashRegex, request); | ||||
|   } | ||||
|  | ||||
|   // For each path | ||||
|   for (let i = 0; i < paths.length; i++) { | ||||
|     // Don't search further if path doesn't exist | ||||
|     const curPath = paths[i]; | ||||
|     if (curPath && stat(curPath) < 1) continue; | ||||
|  | ||||
|     if (!absoluteRequest) { | ||||
|       const exportsResolved = resolveExports(curPath, request); | ||||
|       if (exportsResolved) | ||||
|         return exportsResolved; | ||||
|     } | ||||
|  | ||||
|     const _basePath = path.resolve(curPath, request); | ||||
|     let filename; | ||||
|  | ||||
|     const [rc, basePath] = statReplacementExtensions(_basePath); | ||||
|     if (!trailingSlash) { | ||||
|       if (rc === 0) {  // File. | ||||
|         if (!isMain) { | ||||
|           if (preserveSymlinks) { | ||||
|             filename = path.resolve(basePath); | ||||
|           } else { | ||||
|             filename = toRealPath(basePath); | ||||
|           } | ||||
|         } else if (preserveSymlinksMain) { | ||||
|           // For the main module, we use the preserveSymlinksMain flag instead | ||||
|           // mainly for backward compatibility, as the preserveSymlinks flag | ||||
|           // historically has not applied to the main module.  Most likely this | ||||
|           // was intended to keep .bin/ binaries working, as following those | ||||
|           // symlinks is usually required for the imports in the corresponding | ||||
|           // files to resolve; that said, in some use cases following symlinks | ||||
|           // causes bigger problems which is why the preserveSymlinksMain option | ||||
|           // is needed. | ||||
|           filename = path.resolve(basePath); | ||||
|         } else { | ||||
|           filename = toRealPath(basePath); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       if (!filename) { | ||||
|         // Try it with each of the extensions | ||||
|         if (exts === undefined) | ||||
|           exts = ObjectKeys(Module._extensions); | ||||
|         filename = tryExtensions(basePath, exts, isMain); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (!filename && rc === 1) {  // Directory. | ||||
|       // try it with each of the extensions at "index" | ||||
|       if (exts === undefined) | ||||
|         exts = ObjectKeys(Module._extensions); | ||||
|       filename = tryPackage(basePath, exts, isMain, request); | ||||
|     } | ||||
|  | ||||
|     if (filename) { | ||||
|       Module_pathCache_set(cacheKey, filename); | ||||
|       return filename; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   return false; | ||||
| }; | ||||
|  | ||||
| const Module_resolveFilename = function _resolveFilename(request, parent, isMain, options) { | ||||
|   if (StringPrototypeStartsWith(request, 'node:') || | ||||
|       NativeModule.canBeRequiredByUsers(request)) { | ||||
|     return request; | ||||
|   } | ||||
|  | ||||
|   let paths; | ||||
|  | ||||
|   if (typeof options === 'object' && options !== null) { | ||||
|     if (ArrayIsArray(options.paths)) { | ||||
|       const isRelative = StringPrototypeStartsWith(request, './') || | ||||
|           StringPrototypeStartsWith(request, '../') || | ||||
|           ((isWindows && StringPrototypeStartsWith(request, '.\\')) || | ||||
|           StringPrototypeStartsWith(request, '..\\')); | ||||
|  | ||||
|       if (isRelative) { | ||||
|         paths = options.paths; | ||||
|       } else { | ||||
|         const fakeParent = new Module('', null); | ||||
|  | ||||
|         paths = []; | ||||
|  | ||||
|         for (let i = 0; i < options.paths.length; i++) { | ||||
|           const path = options.paths[i]; | ||||
|           fakeParent.paths = Module._nodeModulePaths(path); | ||||
|           const lookupPaths = Module._resolveLookupPaths(request, fakeParent); | ||||
|  | ||||
|           for (let j = 0; j < lookupPaths.length; j++) { | ||||
|             if (!ArrayPrototypeIncludes(paths, lookupPaths[j])) | ||||
|               ArrayPrototypePush(paths, lookupPaths[j]); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } else if (options.paths === undefined) { | ||||
|       paths = Module._resolveLookupPaths(request, parent); | ||||
|     } else { | ||||
|       throw new ERR_INVALID_ARG_VALUE('options.paths', options.paths); | ||||
|     } | ||||
|   } else { | ||||
|     paths = Module._resolveLookupPaths(request, parent); | ||||
|   } | ||||
|  | ||||
|   // if (parent?.filename) { | ||||
|   // node 12 hack | ||||
|   if (parent != null && parent.filename) { | ||||
|     if (request[0] === '#') { | ||||
|       const pkg = readPackageScope(parent.filename) || {}; | ||||
|  | ||||
|       // if (pkg.data?.imports != null) { | ||||
|       // node 12 hack | ||||
|       if (pkg.data != null && pkg.data.imports != null) { | ||||
|         try { | ||||
|           return finalizeEsmResolution( | ||||
|             packageImportsResolve(request, pathToFileURL(parent.filename), | ||||
|                                   cjsConditions), parent.filename, | ||||
|             pkg.path); | ||||
|         } catch (e) { | ||||
|           if (e.code === 'ERR_MODULE_NOT_FOUND') | ||||
|             throw createEsmNotFoundErr(request); | ||||
|           throw e; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   // Try module self resolution first | ||||
|   const parentPath = trySelfParentPath(parent); | ||||
|   const selfResolved = trySelf(parentPath, request); | ||||
|   if (selfResolved) { | ||||
|     const cacheKey = request + '\x00' + | ||||
|          (paths.length === 1 ? paths[0] : ArrayPrototypeJoin(paths, '\x00')); | ||||
|     Module._pathCache[cacheKey] = selfResolved; | ||||
|     return selfResolved; | ||||
|   } | ||||
|  | ||||
|   // Look up the filename first, since that's the cache key. | ||||
|   const filename = Module._findPath(request, paths, isMain, false); | ||||
|   if (filename) return filename; | ||||
|   const requireStack = []; | ||||
|   for (let cursor = parent; | ||||
|     cursor; | ||||
|     cursor = moduleParentCache.get(cursor)) { | ||||
|     ArrayPrototypePush(requireStack, cursor.filename || cursor.id); | ||||
|   } | ||||
|   let message = `Cannot find module '${request}'`; | ||||
|   if (requireStack.length > 0) { | ||||
|     message = message + '\nRequire stack:\n- ' + | ||||
|               ArrayPrototypeJoin(requireStack, '\n- '); | ||||
|   } | ||||
|   // eslint-disable-next-line no-restricted-syntax | ||||
|   const err = new Error(message); | ||||
|   err.code = 'MODULE_NOT_FOUND'; | ||||
|   err.requireStack = requireStack; | ||||
|   throw err; | ||||
| }; | ||||
|  | ||||
| function finalizeEsmResolution(resolved, parentPath, pkgPath) { | ||||
|   if (RegExpPrototypeTest(encodedSepRegEx, resolved)) | ||||
|     throw new ERR_INVALID_MODULE_SPECIFIER( | ||||
|       resolved, 'must not include encoded "/" or "\\" characters', parentPath); | ||||
|   const filename = fileURLToPath(resolved); | ||||
|   const actual = tryReplacementExtensions(filename) || tryFile(filename); | ||||
|   if (actual) | ||||
|     return actual; | ||||
|   const err = createEsmNotFoundErr(filename, | ||||
|                                    path.resolve(pkgPath, 'package.json')); | ||||
|   throw err; | ||||
| } | ||||
|  | ||||
| function createEsmNotFoundErr(request, path) { | ||||
|   // eslint-disable-next-line no-restricted-syntax | ||||
|   const err = new Error(`Cannot find module '${request}'`); | ||||
|   err.code = 'MODULE_NOT_FOUND'; | ||||
|   if (path) | ||||
|     err.path = path; | ||||
|   // TODO(BridgeAR): Add the requireStack as well. | ||||
|   return err; | ||||
| } | ||||
|  | ||||
|  | ||||
| return { | ||||
|   Module_findPath, | ||||
|   Module_resolveFilename | ||||
| } | ||||
|  | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * copied from Module._extensions['.js'] | ||||
|  * https://github.com/nodejs/node/blob/v15.3.0/lib/internal/modules/cjs/loader.js#L1113-L1120 | ||||
|  * @param {import('../src/index').Service} service | ||||
|  * @param {NodeJS.Module} module | ||||
|  * @param {string} filename | ||||
|  */ | ||||
| function assertScriptCanLoadAsCJSImpl(service, module, filename) { | ||||
|   const pkg = readPackageScope(filename); | ||||
|  | ||||
|   // ts-node modification: allow our configuration to override | ||||
|   const tsNodeClassification = service.moduleTypeClassifier.classifyModuleByModuleTypeOverrides(normalizeSlashes(filename)); | ||||
|   if(tsNodeClassification.moduleType === 'cjs') return; | ||||
|  | ||||
|   // ignore package.json when file extension is ESM-only or CJS-only | ||||
|   // [MUST_UPDATE_FOR_NEW_FILE_EXTENSIONS] | ||||
|   const lastDotIndex = filename.lastIndexOf('.'); | ||||
|   const ext = lastDotIndex >= 0 ? filename.slice(lastDotIndex) : ''; | ||||
|  | ||||
|   if((ext === '.cts' || ext === '.cjs') && tsNodeClassification.moduleType === 'auto') return; | ||||
|  | ||||
|   // Function require shouldn't be used in ES modules. | ||||
|   if (ext === '.mts' || ext === '.mjs' || tsNodeClassification.moduleType === 'esm' || (pkg && pkg.data && pkg.data.type === 'module')) { | ||||
|     const parentPath = module.parent && module.parent.filename; | ||||
|     const packageJsonPath = pkg ? path.resolve(pkg.path, 'package.json') : null; | ||||
|     throw createErrRequireEsm(filename, parentPath, packageJsonPath); | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| module.exports = { | ||||
|   createCjsLoader, | ||||
|   assertScriptCanLoadAsCJSImpl, | ||||
|   readPackageScope | ||||
| }; | ||||
							
								
								
									
										106
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-esm-get_format.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-esm-get_format.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| // Copied from https://raw.githubusercontent.com/nodejs/node/v15.3.0/lib/internal/modules/esm/get_format.js | ||||
|  | ||||
| 'use strict'; | ||||
| const { | ||||
|   RegExpPrototypeExec, | ||||
|   StringPrototypeStartsWith, | ||||
| } = require('./node-primordials'); | ||||
| const { extname } = require('path'); | ||||
| const { getOptionValue } = require('./node-options'); | ||||
|  | ||||
| const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(s => parseInt(s, 10)); | ||||
| const experimentalJsonModules = | ||||
|   nodeMajor > 17 | ||||
|   || (nodeMajor === 17 && nodeMinor >= 5) | ||||
|   || (nodeMajor === 16 && nodeMinor >= 15) | ||||
|   || getOptionValue('--experimental-json-modules'); | ||||
| const experimentalWasmModules = getOptionValue('--experimental-wasm-modules'); | ||||
| const { URL, fileURLToPath } = require('url'); | ||||
| const { ERR_UNKNOWN_FILE_EXTENSION } = require('./node-internal-errors').codes; | ||||
|  | ||||
| const extensionFormatMap = { | ||||
|   '__proto__': null, | ||||
|   '.cjs': 'commonjs', | ||||
|   '.js': 'module', | ||||
|   '.mjs': 'module' | ||||
| }; | ||||
|  | ||||
| const legacyExtensionFormatMap = { | ||||
|   '__proto__': null, | ||||
|   '.cjs': 'commonjs', | ||||
|   '.js': 'commonjs', | ||||
|   '.json': 'commonjs', | ||||
|   '.mjs': 'module', | ||||
|   '.node': 'commonjs' | ||||
| }; | ||||
|  | ||||
| if (experimentalWasmModules) | ||||
|   extensionFormatMap['.wasm'] = legacyExtensionFormatMap['.wasm'] = 'wasm'; | ||||
|  | ||||
| if (experimentalJsonModules) | ||||
|   extensionFormatMap['.json'] = legacyExtensionFormatMap['.json'] = 'json'; | ||||
|  | ||||
| /** | ||||
|  * | ||||
|  * @param {'node' | 'explicit'} [tsNodeExperimentalSpecifierResolution] | ||||
|  * @param {ReturnType< | ||||
|  *  typeof import('../dist-raw/node-internal-modules-esm-resolve').createResolve | ||||
|  * >} nodeEsmResolver | ||||
|  */ | ||||
| function createGetFormat(tsNodeExperimentalSpecifierResolution, nodeEsmResolver) { | ||||
| // const experimentalSpeciferResolution = tsNodeExperimentalSpecifierResolution ?? getOptionValue('--experimental-specifier-resolution'); | ||||
| let experimentalSpeciferResolution = tsNodeExperimentalSpecifierResolution != null ? tsNodeExperimentalSpecifierResolution : getOptionValue('--experimental-specifier-resolution'); | ||||
| const { getPackageType } = nodeEsmResolver; | ||||
|  | ||||
| /** | ||||
|  * @param {string} url | ||||
|  * @param {{}} context | ||||
|  * @param {any} defaultGetFormatUnused | ||||
|  * @returns {ReturnType<import('../src/esm').NodeLoaderHooksAPI1.GetFormatHook>} | ||||
|  */ | ||||
| function defaultGetFormat(url, context, defaultGetFormatUnused) { | ||||
|   if (StringPrototypeStartsWith(url, 'node:')) { | ||||
|     return { format: 'builtin' }; | ||||
|   } | ||||
|   const parsed = new URL(url); | ||||
|   if (parsed.protocol === 'data:') { | ||||
|     const [ , mime ] = RegExpPrototypeExec( | ||||
|       /^([^/]+\/[^;,]+)(?:[^,]*?)(;base64)?,/, | ||||
|       parsed.pathname, | ||||
|     ) || [ null, null, null ]; | ||||
|     const format = ({ | ||||
|       '__proto__': null, | ||||
|       'text/javascript': 'module', | ||||
|       'application/json': experimentalJsonModules ? 'json' : null, | ||||
|       'application/wasm': experimentalWasmModules ? 'wasm' : null | ||||
|     })[mime] || null; | ||||
|     return { format }; | ||||
|   } else if (parsed.protocol === 'file:') { | ||||
|     const ext = extname(parsed.pathname); | ||||
|     let format; | ||||
|     if (ext === '.js') { | ||||
|       format = getPackageType(parsed.href) === 'module' ? 'module' : 'commonjs'; | ||||
|     } else { | ||||
|       format = extensionFormatMap[ext]; | ||||
|     } | ||||
|     if (!format) { | ||||
|       if (experimentalSpeciferResolution === 'node') { | ||||
|         process.emitWarning( | ||||
|           'The Node.js specifier resolution in ESM is experimental.', | ||||
|           'ExperimentalWarning'); | ||||
|         format = legacyExtensionFormatMap[ext]; | ||||
|       } else { | ||||
|         throw new ERR_UNKNOWN_FILE_EXTENSION(ext, fileURLToPath(url)); | ||||
|       } | ||||
|     } | ||||
|     return { format: format || null }; | ||||
|   } | ||||
|   return { format: null }; | ||||
| } | ||||
|  | ||||
| return {defaultGetFormat}; | ||||
| } | ||||
|  | ||||
| module.exports = { | ||||
|   createGetFormat | ||||
| }; | ||||
							
								
								
									
										962
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										962
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,962 @@ | ||||
| // Copied from https://raw.githubusercontent.com/nodejs/node/v15.3.0/lib/internal/modules/esm/resolve.js | ||||
|  | ||||
| 'use strict'; | ||||
|  | ||||
| const {versionGteLt} = require('../dist/util'); | ||||
|  | ||||
| // Test for node >14.13.1 || (>=12.20.0 && <13) | ||||
| const builtinModuleProtocol = | ||||
|   versionGteLt(process.versions.node, '14.13.1') || | ||||
|   versionGteLt(process.versions.node, '12.20.0', '13.0.0') | ||||
|     ? 'node:' | ||||
|     : 'nodejs:'; | ||||
|  | ||||
| const { | ||||
|   ArrayIsArray, | ||||
|   ArrayPrototypeJoin, | ||||
|   ArrayPrototypeShift, | ||||
|   JSONParse, | ||||
|   JSONStringify, | ||||
|   ObjectFreeze, | ||||
|   ObjectGetOwnPropertyNames, | ||||
|   ObjectPrototypeHasOwnProperty, | ||||
|   RegExpPrototypeTest, | ||||
|   SafeMap, | ||||
|   SafeSet, | ||||
|   StringPrototypeEndsWith, | ||||
|   StringPrototypeIndexOf, | ||||
|   StringPrototypeLastIndexOf, | ||||
|   StringPrototypeReplace, | ||||
|   StringPrototypeSlice, | ||||
|   StringPrototypeSplit, | ||||
|   StringPrototypeStartsWith, | ||||
|   StringPrototypeSubstr, | ||||
| } = require('./node-primordials'); | ||||
|  | ||||
| // const internalFS = require('internal/fs/utils'); | ||||
| const Module = require('module'); | ||||
| const { NativeModule } = require('./node-nativemodule'); | ||||
| const { | ||||
|   realpathSync, | ||||
|   statSync, | ||||
|   Stats, | ||||
| } = require('fs'); | ||||
| // const { getOptionValue } = require('internal/options'); | ||||
| const { getOptionValue } = require('./node-options'); | ||||
| // // Do not eagerly grab .manifest, it may be in TDZ | ||||
| // const policy = getOptionValue('--experimental-policy') ? | ||||
| //   require('internal/process/policy') : | ||||
| //   null; | ||||
| // disabled for now.  I am not sure if/how we should support this | ||||
| const policy = null; | ||||
| const { sep, relative } = require('path'); | ||||
| const preserveSymlinks = getOptionValue('--preserve-symlinks'); | ||||
| const preserveSymlinksMain = getOptionValue('--preserve-symlinks-main'); | ||||
| const typeFlag = getOptionValue('--input-type'); | ||||
| // const { URL, pathToFileURL, fileURLToPath } = require('internal/url'); | ||||
| const { URL, pathToFileURL, fileURLToPath } = require('url'); | ||||
| const { | ||||
|   ERR_INPUT_TYPE_NOT_ALLOWED, | ||||
|   ERR_INVALID_ARG_VALUE, | ||||
|   ERR_INVALID_MODULE_SPECIFIER, | ||||
|   ERR_INVALID_PACKAGE_CONFIG, | ||||
|   ERR_INVALID_PACKAGE_TARGET, | ||||
|   ERR_MANIFEST_DEPENDENCY_MISSING, | ||||
|   ERR_MODULE_NOT_FOUND, | ||||
|   ERR_PACKAGE_IMPORT_NOT_DEFINED, | ||||
|   ERR_PACKAGE_PATH_NOT_EXPORTED, | ||||
|   ERR_UNSUPPORTED_DIR_IMPORT, | ||||
|   ERR_UNSUPPORTED_ESM_URL_SCHEME, | ||||
| // } = require('internal/errors').codes; | ||||
| } = require('./node-internal-errors').codes; | ||||
|  | ||||
| // const { Module: CJSModule } = require('internal/modules/cjs/loader'); | ||||
| const CJSModule = Module; | ||||
|  | ||||
| // const packageJsonReader = require('internal/modules/package_json_reader'); | ||||
| const packageJsonReader = require('./node-internal-modules-package_json_reader'); | ||||
| const userConditions = getOptionValue('--conditions'); | ||||
| const DEFAULT_CONDITIONS = ObjectFreeze(['node', 'import', ...userConditions]); | ||||
| const DEFAULT_CONDITIONS_SET = new SafeSet(DEFAULT_CONDITIONS); | ||||
|  | ||||
| const pendingDeprecation = getOptionValue('--pending-deprecation'); | ||||
|  | ||||
| /** | ||||
|  * @param {{ | ||||
|  *  extensions: import('../src/file-extensions').Extensions, | ||||
|  *  preferTsExts: boolean | undefined; | ||||
|  *  tsNodeExperimentalSpecifierResolution: import('../src/index').ExperimentalSpecifierResolution | undefined; | ||||
|  * }} opts | ||||
|  */ | ||||
| function createResolve(opts) { | ||||
| // TODO receive cached fs implementations here | ||||
| const {preferTsExts, tsNodeExperimentalSpecifierResolution, extensions} = opts; | ||||
| const esrnExtensions = extensions.experimentalSpecifierResolutionAddsIfOmitted; | ||||
| const {legacyMainResolveAddsIfOmitted, replacementsForCjs, replacementsForJs, replacementsForMjs, replacementsForJsx} = extensions; | ||||
| // const experimentalSpecifierResolution = tsNodeExperimentalSpecifierResolution ?? getOptionValue('--experimental-specifier-resolution'); | ||||
| const experimentalSpecifierResolution = tsNodeExperimentalSpecifierResolution != null ? tsNodeExperimentalSpecifierResolution : getOptionValue('--experimental-specifier-resolution'); | ||||
|  | ||||
| const emittedPackageWarnings = new SafeSet(); | ||||
| function emitFolderMapDeprecation(match, pjsonUrl, isExports, base) { | ||||
|   const pjsonPath = fileURLToPath(pjsonUrl); | ||||
|   if (!pendingDeprecation) { | ||||
|     const nodeModulesIndex = StringPrototypeLastIndexOf(pjsonPath, | ||||
|                                                         '/node_modules/'); | ||||
|     if (nodeModulesIndex !== -1) { | ||||
|       const afterNodeModulesPath = StringPrototypeSlice(pjsonPath, | ||||
|                                                         nodeModulesIndex + 14, | ||||
|                                                         -13); | ||||
|       try { | ||||
|         const { packageSubpath } = parsePackageName(afterNodeModulesPath); | ||||
|         if (packageSubpath === '.') | ||||
|           return; | ||||
|       } catch {} | ||||
|     } | ||||
|   } | ||||
|   if (emittedPackageWarnings.has(pjsonPath + '|' + match)) | ||||
|     return; | ||||
|   emittedPackageWarnings.add(pjsonPath + '|' + match); | ||||
|   process.emitWarning( | ||||
|     `Use of deprecated folder mapping "${match}" in the ${isExports ? | ||||
|       '"exports"' : '"imports"'} field module resolution of the package at ${ | ||||
|       pjsonPath}${base ? ` imported from ${fileURLToPath(base)}` : ''}.\n` + | ||||
|       `Update this package.json to use a subpath pattern like "${match}*".`, | ||||
|     'DeprecationWarning', | ||||
|     'DEP0148' | ||||
|   ); | ||||
| } | ||||
|  | ||||
| function getConditionsSet(conditions) { | ||||
|   if (conditions !== undefined && conditions !== DEFAULT_CONDITIONS) { | ||||
|     if (!ArrayIsArray(conditions)) { | ||||
|       throw new ERR_INVALID_ARG_VALUE('conditions', conditions, | ||||
|                                       'expected an array'); | ||||
|     } | ||||
|     return new SafeSet(conditions); | ||||
|   } | ||||
|   return DEFAULT_CONDITIONS_SET; | ||||
| } | ||||
|  | ||||
| const realpathCache = new SafeMap(); | ||||
| const packageJSONCache = new SafeMap();  /* string -> PackageConfig */ | ||||
|  | ||||
| const statSupportsThrowIfNoEntry = versionGteLt(process.versions.node, '15.3.0') || | ||||
|   versionGteLt(process.versions.node, '14.17.0', '15.0.0'); | ||||
| const tryStatSync = statSupportsThrowIfNoEntry ? tryStatSyncWithoutErrors : tryStatSyncWithErrors; | ||||
| const statsIfNotFound = new Stats(); | ||||
| function tryStatSyncWithoutErrors(path) { | ||||
|   const stats = statSync(path, { throwIfNoEntry: false }); | ||||
|   if(stats != null) return stats; | ||||
|   return statsIfNotFound; | ||||
| } | ||||
| function tryStatSyncWithErrors(path) { | ||||
|   try { | ||||
|     return statSync(path); | ||||
|   } catch { | ||||
|     return statsIfNotFound; | ||||
|   } | ||||
| } | ||||
|  | ||||
| function getPackageConfig(path, specifier, base) { | ||||
|   const existing = packageJSONCache.get(path); | ||||
|   if (existing !== undefined) { | ||||
|     return existing; | ||||
|   } | ||||
|   const source = packageJsonReader.read(path).string; | ||||
|   if (source === undefined) { | ||||
|     const packageConfig = { | ||||
|       pjsonPath: path, | ||||
|       exists: false, | ||||
|       main: undefined, | ||||
|       name: undefined, | ||||
|       type: 'none', | ||||
|       exports: undefined, | ||||
|       imports: undefined, | ||||
|     }; | ||||
|     packageJSONCache.set(path, packageConfig); | ||||
|     return packageConfig; | ||||
|   } | ||||
|  | ||||
|   let packageJSON; | ||||
|   try { | ||||
|     packageJSON = JSONParse(source); | ||||
|   } catch (error) { | ||||
|     throw new ERR_INVALID_PACKAGE_CONFIG( | ||||
|       path, | ||||
|       (base ? `"${specifier}" from ` : '') + fileURLToPath(base || specifier), | ||||
|       error.message | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   let { imports, main, name, type } = packageJSON; | ||||
|   const { exports } = packageJSON; | ||||
|   if (typeof imports !== 'object' || imports === null) imports = undefined; | ||||
|   if (typeof main !== 'string') main = undefined; | ||||
|   if (typeof name !== 'string') name = undefined; | ||||
|   // Ignore unknown types for forwards compatibility | ||||
|   if (type !== 'module' && type !== 'commonjs') type = 'none'; | ||||
|  | ||||
|   const packageConfig = { | ||||
|     pjsonPath: path, | ||||
|     exists: true, | ||||
|     main, | ||||
|     name, | ||||
|     type, | ||||
|     exports, | ||||
|     imports, | ||||
|   }; | ||||
|   packageJSONCache.set(path, packageConfig); | ||||
|   return packageConfig; | ||||
| } | ||||
|  | ||||
| function getPackageScopeConfig(resolved) { | ||||
|   let packageJSONUrl = new URL('./package.json', resolved); | ||||
|   while (true) { | ||||
|     const packageJSONPath = packageJSONUrl.pathname; | ||||
|     if (StringPrototypeEndsWith(packageJSONPath, 'node_modules/package.json')) | ||||
|       break; | ||||
|     const packageConfig = getPackageConfig(fileURLToPath(packageJSONUrl), | ||||
|                                            resolved); | ||||
|     if (packageConfig.exists) return packageConfig; | ||||
|  | ||||
|     const lastPackageJSONUrl = packageJSONUrl; | ||||
|     packageJSONUrl = new URL('../package.json', packageJSONUrl); | ||||
|  | ||||
|     // Terminates at root where ../package.json equals ../../package.json | ||||
|     // (can't just check "/package.json" for Windows support). | ||||
|     if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) break; | ||||
|   } | ||||
|   const packageJSONPath = fileURLToPath(packageJSONUrl); | ||||
|   const packageConfig = { | ||||
|     pjsonPath: packageJSONPath, | ||||
|     exists: false, | ||||
|     main: undefined, | ||||
|     name: undefined, | ||||
|     type: 'none', | ||||
|     exports: undefined, | ||||
|     imports: undefined, | ||||
|   }; | ||||
|   packageJSONCache.set(packageJSONPath, packageConfig); | ||||
|   return packageConfig; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Legacy CommonJS main resolution: | ||||
|  * 1. let M = pkg_url + (json main field) | ||||
|  * 2. TRY(M, M.js, M.json, M.node) | ||||
|  * 3. TRY(M/index.js, M/index.json, M/index.node) | ||||
|  * 4. TRY(pkg_url/index.js, pkg_url/index.json, pkg_url/index.node) | ||||
|  * 5. NOT_FOUND | ||||
|  */ | ||||
| function fileExists(url) { | ||||
|   return tryStatSync(fileURLToPath(url)).isFile(); | ||||
| } | ||||
|  | ||||
| function legacyMainResolve(packageJSONUrl, packageConfig, base) { | ||||
|   let guess; | ||||
|   if (packageConfig.main !== undefined) { | ||||
|     // Note: fs check redundances will be handled by Descriptor cache here. | ||||
|     if(guess = resolveReplacementExtensions(new URL(`./${packageConfig.main}`, packageJSONUrl))) { | ||||
|       return guess; | ||||
|     } | ||||
|     if (fileExists(guess = new URL(`./${packageConfig.main}`, | ||||
|                                    packageJSONUrl))) { | ||||
|       return guess; | ||||
|     } | ||||
|     for(const extension of legacyMainResolveAddsIfOmitted) { | ||||
|       if (fileExists(guess = new URL(`./${packageConfig.main}${extension}`, | ||||
|                                     packageJSONUrl))) { | ||||
|         return guess; | ||||
|       } | ||||
|     } | ||||
|     for(const extension of legacyMainResolveAddsIfOmitted) { | ||||
|       if (fileExists(guess = new URL(`./${packageConfig.main}/index${extension}`, | ||||
|                                     packageJSONUrl))) { | ||||
|         return guess; | ||||
|       } | ||||
|     } | ||||
|     // Fallthrough. | ||||
|   } | ||||
|   for(const extension of legacyMainResolveAddsIfOmitted) { | ||||
|     if (fileExists(guess = new URL(`./index${extension}`, packageJSONUrl))) { | ||||
|       return guess; | ||||
|     } | ||||
|   } | ||||
|   // Not found. | ||||
|   throw new ERR_MODULE_NOT_FOUND( | ||||
|     fileURLToPath(new URL('.', packageJSONUrl)), fileURLToPath(base)); | ||||
| } | ||||
|  | ||||
| /** attempts replacement extensions, then tries exact name, then attempts appending extensions */ | ||||
| function resolveExtensionsWithTryExactName(search) { | ||||
|   const resolvedReplacementExtension = resolveReplacementExtensions(search); | ||||
|   if(resolvedReplacementExtension) return resolvedReplacementExtension; | ||||
|   if (fileExists(search)) return search; | ||||
|   return resolveExtensions(search); | ||||
| } | ||||
|  | ||||
| // This appends missing extensions | ||||
| function resolveExtensions(search) { | ||||
|   for (let i = 0; i < esrnExtensions.length; i++) { | ||||
|     const extension = esrnExtensions[i]; | ||||
|     const guess = new URL(`${search.pathname}${extension}`, search); | ||||
|     if (fileExists(guess)) return guess; | ||||
|   } | ||||
|   return undefined; | ||||
| } | ||||
|  | ||||
| /** This replaces JS with TS extensions */ | ||||
| function resolveReplacementExtensions(search) { | ||||
|   const lastDotIndex = search.pathname.lastIndexOf('.'); | ||||
|   if(lastDotIndex >= 0) { | ||||
|     const ext = search.pathname.slice(lastDotIndex); | ||||
|     if (ext === '.js' || ext === '.jsx' || ext === '.mjs' || ext === '.cjs') { | ||||
|       const pathnameWithoutExtension = search.pathname.slice(0, lastDotIndex); | ||||
|       const replacementExts = | ||||
|         ext === '.js' ? replacementsForJs | ||||
|         : ext === '.jsx' ? replacementsForJsx | ||||
|         : ext === '.mjs' ? replacementsForMjs | ||||
|         : replacementsForCjs; | ||||
|       const guess = new URL(search.toString()); | ||||
|       for (let i = 0; i < replacementExts.length; i++) { | ||||
|         const extension = replacementExts[i]; | ||||
|         guess.pathname = `${pathnameWithoutExtension}${extension}`; | ||||
|         if (fileExists(guess)) return guess; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   return undefined; | ||||
| } | ||||
|  | ||||
| function resolveIndex(search) { | ||||
|   return resolveExtensions(new URL('index', search)); | ||||
| } | ||||
|  | ||||
| const encodedSepRegEx = /%2F|%2C/i; | ||||
| function finalizeResolution(resolved, base) { | ||||
|   if (RegExpPrototypeTest(encodedSepRegEx, resolved.pathname)) | ||||
|     throw new ERR_INVALID_MODULE_SPECIFIER( | ||||
|       resolved.pathname, 'must not include encoded "/" or "\\" characters', | ||||
|       fileURLToPath(base)); | ||||
|  | ||||
|   if (experimentalSpecifierResolution === 'node') { | ||||
|     const path = fileURLToPath(resolved); | ||||
|     let file = resolveExtensionsWithTryExactName(resolved); | ||||
|     if (file !== undefined) return file; | ||||
|     if (!StringPrototypeEndsWith(path, '/')) { | ||||
|       file = resolveIndex(new URL(`${resolved}/`)); | ||||
|       if (file !== undefined) return file; | ||||
|     } else { | ||||
|       return resolveIndex(resolved) || resolved; | ||||
|     } | ||||
|     throw new ERR_MODULE_NOT_FOUND( | ||||
|       resolved.pathname, fileURLToPath(base), 'module'); | ||||
|   } | ||||
|  | ||||
|   const file = resolveReplacementExtensions(resolved) || resolved; | ||||
|   const path = fileURLToPath(file); | ||||
|  | ||||
|   const stats = tryStatSync(StringPrototypeEndsWith(path, '/') ? | ||||
|     StringPrototypeSlice(path, -1) : path); | ||||
|   if (stats.isDirectory()) { | ||||
|     const err = new ERR_UNSUPPORTED_DIR_IMPORT(path, fileURLToPath(base)); | ||||
|     err.url = String(resolved); | ||||
|     throw err; | ||||
|   } else if (!stats.isFile()) { | ||||
|     throw new ERR_MODULE_NOT_FOUND( | ||||
|       path || resolved.pathname, fileURLToPath(base), 'module'); | ||||
|   } | ||||
|  | ||||
|   return file; | ||||
| } | ||||
|  | ||||
| function throwImportNotDefined(specifier, packageJSONUrl, base) { | ||||
|   throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( | ||||
|     specifier, packageJSONUrl && fileURLToPath(new URL('.', packageJSONUrl)), | ||||
|     fileURLToPath(base)); | ||||
| } | ||||
|  | ||||
| function throwExportsNotFound(subpath, packageJSONUrl, base) { | ||||
|   throw new ERR_PACKAGE_PATH_NOT_EXPORTED( | ||||
|     fileURLToPath(new URL('.', packageJSONUrl)), subpath, | ||||
|     base && fileURLToPath(base)); | ||||
| } | ||||
|  | ||||
| function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { | ||||
|   const reason = `request is not a valid subpath for the "${internal ? | ||||
|     'imports' : 'exports'}" resolution of ${fileURLToPath(packageJSONUrl)}`; | ||||
|   throw new ERR_INVALID_MODULE_SPECIFIER(subpath, reason, | ||||
|                                          base && fileURLToPath(base)); | ||||
| } | ||||
|  | ||||
| function throwInvalidPackageTarget( | ||||
|   subpath, target, packageJSONUrl, internal, base) { | ||||
|   if (typeof target === 'object' && target !== null) { | ||||
|     target = JSONStringify(target, null, ''); | ||||
|   } else { | ||||
|     target = `${target}`; | ||||
|   } | ||||
|   throw new ERR_INVALID_PACKAGE_TARGET( | ||||
|     fileURLToPath(new URL('.', packageJSONUrl)), subpath, target, | ||||
|     internal, base && fileURLToPath(base)); | ||||
| } | ||||
|  | ||||
| const invalidSegmentRegEx = /(^|\\|\/)(\.\.?|node_modules)(\\|\/|$)/; | ||||
| const patternRegEx = /\*/g; | ||||
|  | ||||
| function resolvePackageTargetString( | ||||
|   target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { | ||||
|   if (subpath !== '' && !pattern && target[target.length - 1] !== '/') | ||||
|     throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); | ||||
|  | ||||
|   if (!StringPrototypeStartsWith(target, './')) { | ||||
|     if (internal && !StringPrototypeStartsWith(target, '../') && | ||||
|         !StringPrototypeStartsWith(target, '/')) { | ||||
|       let isURL = false; | ||||
|       try { | ||||
|         new URL(target); | ||||
|         isURL = true; | ||||
|       } catch {} | ||||
|       if (!isURL) { | ||||
|         const exportTarget = pattern ? | ||||
|           StringPrototypeReplace(target, patternRegEx, subpath) : | ||||
|           target + subpath; | ||||
|         return packageResolve(exportTarget, packageJSONUrl, conditions); | ||||
|       } | ||||
|     } | ||||
|     throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); | ||||
|   } | ||||
|  | ||||
|   if (RegExpPrototypeTest(invalidSegmentRegEx, StringPrototypeSlice(target, 2))) | ||||
|     throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); | ||||
|  | ||||
|   const resolved = new URL(target, packageJSONUrl); | ||||
|   const resolvedPath = resolved.pathname; | ||||
|   const packagePath = new URL('.', packageJSONUrl).pathname; | ||||
|  | ||||
|   if (!StringPrototypeStartsWith(resolvedPath, packagePath)) | ||||
|     throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); | ||||
|  | ||||
|   if (subpath === '') return resolved; | ||||
|  | ||||
|   if (RegExpPrototypeTest(invalidSegmentRegEx, subpath)) | ||||
|     throwInvalidSubpath(match + subpath, packageJSONUrl, internal, base); | ||||
|  | ||||
|   if (pattern) | ||||
|     return new URL(StringPrototypeReplace(resolved.href, patternRegEx, | ||||
|                                           subpath)); | ||||
|   return new URL(subpath, resolved); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param {string} key | ||||
|  * @returns {boolean} | ||||
|  */ | ||||
| function isArrayIndex(key) { | ||||
|   const keyNum = +key; | ||||
|   if (`${keyNum}` !== key) return false; | ||||
|   return keyNum >= 0 && keyNum < 0xFFFF_FFFF; | ||||
| } | ||||
|  | ||||
| function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, | ||||
|                               base, pattern, internal, conditions) { | ||||
|   if (typeof target === 'string') { | ||||
|     return resolvePackageTargetString( | ||||
|       target, subpath, packageSubpath, packageJSONUrl, base, pattern, internal, | ||||
|       conditions); | ||||
|   } else if (ArrayIsArray(target)) { | ||||
|     if (target.length === 0) | ||||
|       return null; | ||||
|  | ||||
|     let lastException; | ||||
|     for (let i = 0; i < target.length; i++) { | ||||
|       const targetItem = target[i]; | ||||
|       let resolved; | ||||
|       try { | ||||
|         resolved = resolvePackageTarget( | ||||
|           packageJSONUrl, targetItem, subpath, packageSubpath, base, pattern, | ||||
|           internal, conditions); | ||||
|       } catch (e) { | ||||
|         lastException = e; | ||||
|         if (e.code === 'ERR_INVALID_PACKAGE_TARGET') | ||||
|           continue; | ||||
|         throw e; | ||||
|       } | ||||
|       if (resolved === undefined) | ||||
|         continue; | ||||
|       if (resolved === null) { | ||||
|         lastException = null; | ||||
|         continue; | ||||
|       } | ||||
|       return resolved; | ||||
|     } | ||||
|     if (lastException === undefined || lastException === null) | ||||
|       return lastException; | ||||
|     throw lastException; | ||||
|   } else if (typeof target === 'object' && target !== null) { | ||||
|     const keys = ObjectGetOwnPropertyNames(target); | ||||
|     for (let i = 0; i < keys.length; i++) { | ||||
|       const key = keys[i]; | ||||
|       if (isArrayIndex(key)) { | ||||
|         throw new ERR_INVALID_PACKAGE_CONFIG( | ||||
|           fileURLToPath(packageJSONUrl), base, | ||||
|           '"exports" cannot contain numeric property keys.'); | ||||
|       } | ||||
|     } | ||||
|     for (let i = 0; i < keys.length; i++) { | ||||
|       const key = keys[i]; | ||||
|       if (key === 'default' || conditions.has(key)) { | ||||
|         const conditionalTarget = target[key]; | ||||
|         const resolved = resolvePackageTarget( | ||||
|           packageJSONUrl, conditionalTarget, subpath, packageSubpath, base, | ||||
|           pattern, internal, conditions); | ||||
|         if (resolved === undefined) | ||||
|           continue; | ||||
|         return resolved; | ||||
|       } | ||||
|     } | ||||
|     return undefined; | ||||
|   } else if (target === null) { | ||||
|     return null; | ||||
|   } | ||||
|   throwInvalidPackageTarget(packageSubpath, target, packageJSONUrl, internal, | ||||
|                             base); | ||||
| } | ||||
|  | ||||
| function isConditionalExportsMainSugar(exports, packageJSONUrl, base) { | ||||
|   if (typeof exports === 'string' || ArrayIsArray(exports)) return true; | ||||
|   if (typeof exports !== 'object' || exports === null) return false; | ||||
|  | ||||
|   const keys = ObjectGetOwnPropertyNames(exports); | ||||
|   let isConditionalSugar = false; | ||||
|   let i = 0; | ||||
|   for (let j = 0; j < keys.length; j++) { | ||||
|     const key = keys[j]; | ||||
|     const curIsConditionalSugar = key === '' || key[0] !== '.'; | ||||
|     if (i++ === 0) { | ||||
|       isConditionalSugar = curIsConditionalSugar; | ||||
|     } else if (isConditionalSugar !== curIsConditionalSugar) { | ||||
|       throw new ERR_INVALID_PACKAGE_CONFIG( | ||||
|         fileURLToPath(packageJSONUrl), base, | ||||
|         '"exports" cannot contain some keys starting with \'.\' and some not.' + | ||||
|         ' The exports object must either be an object of package subpath keys' + | ||||
|         ' or an object of main entry condition name keys only.'); | ||||
|     } | ||||
|   } | ||||
|   return isConditionalSugar; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param {URL} packageJSONUrl | ||||
|  * @param {string} packageSubpath | ||||
|  * @param {object} packageConfig | ||||
|  * @param {string} base | ||||
|  * @param {Set<string>} conditions | ||||
|  * @returns {{resolved: URL, exact: boolean}} | ||||
|  */ | ||||
| function packageExportsResolve( | ||||
|   packageJSONUrl, packageSubpath, packageConfig, base, conditions) { | ||||
|   let exports = packageConfig.exports; | ||||
|   if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) | ||||
|     exports = { '.': exports }; | ||||
|  | ||||
|   if (ObjectPrototypeHasOwnProperty(exports, packageSubpath)) { | ||||
|     const target = exports[packageSubpath]; | ||||
|     const resolved = resolvePackageTarget( | ||||
|       packageJSONUrl, target, '', packageSubpath, base, false, false, conditions | ||||
|     ); | ||||
|     if (resolved === null || resolved === undefined) | ||||
|       throwExportsNotFound(packageSubpath, packageJSONUrl, base); | ||||
|     return { resolved, exact: true }; | ||||
|   } | ||||
|  | ||||
|   let bestMatch = ''; | ||||
|   const keys = ObjectGetOwnPropertyNames(exports); | ||||
|   for (let i = 0; i < keys.length; i++) { | ||||
|     const key = keys[i]; | ||||
|     if (key[key.length - 1] === '*' && | ||||
|         StringPrototypeStartsWith(packageSubpath, | ||||
|                                   StringPrototypeSlice(key, 0, -1)) && | ||||
|         packageSubpath.length >= key.length && | ||||
|         key.length > bestMatch.length) { | ||||
|       bestMatch = key; | ||||
|     } else if (key[key.length - 1] === '/' && | ||||
|       StringPrototypeStartsWith(packageSubpath, key) && | ||||
|       key.length > bestMatch.length) { | ||||
|       bestMatch = key; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (bestMatch) { | ||||
|     const target = exports[bestMatch]; | ||||
|     const pattern = bestMatch[bestMatch.length - 1] === '*'; | ||||
|     const subpath = StringPrototypeSubstr(packageSubpath, bestMatch.length - | ||||
|       (pattern ? 1 : 0)); | ||||
|     const resolved = resolvePackageTarget(packageJSONUrl, target, subpath, | ||||
|                                           bestMatch, base, pattern, false, | ||||
|                                           conditions); | ||||
|     if (resolved === null || resolved === undefined) | ||||
|       throwExportsNotFound(packageSubpath, packageJSONUrl, base); | ||||
|     if (!pattern) | ||||
|       emitFolderMapDeprecation(bestMatch, packageJSONUrl, true, base); | ||||
|     return { resolved, exact: pattern }; | ||||
|   } | ||||
|  | ||||
|   throwExportsNotFound(packageSubpath, packageJSONUrl, base); | ||||
| } | ||||
|  | ||||
| function packageImportsResolve(name, base, conditions) { | ||||
|   if (name === '#' || StringPrototypeStartsWith(name, '#/')) { | ||||
|     const reason = 'is not a valid internal imports specifier name'; | ||||
|     throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)); | ||||
|   } | ||||
|   let packageJSONUrl; | ||||
|   const packageConfig = getPackageScopeConfig(base); | ||||
|   if (packageConfig.exists) { | ||||
|     packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); | ||||
|     const imports = packageConfig.imports; | ||||
|     if (imports) { | ||||
|       if (ObjectPrototypeHasOwnProperty(imports, name)) { | ||||
|         const resolved = resolvePackageTarget( | ||||
|           packageJSONUrl, imports[name], '', name, base, false, true, conditions | ||||
|         ); | ||||
|         if (resolved !== null) | ||||
|           return { resolved, exact: true }; | ||||
|       } else { | ||||
|         let bestMatch = ''; | ||||
|         const keys = ObjectGetOwnPropertyNames(imports); | ||||
|         for (let i = 0; i < keys.length; i++) { | ||||
|           const key = keys[i]; | ||||
|           if (key[key.length - 1] === '*' && | ||||
|               StringPrototypeStartsWith(name, | ||||
|                                         StringPrototypeSlice(key, 0, -1)) && | ||||
|               name.length >= key.length && | ||||
|               key.length > bestMatch.length) { | ||||
|             bestMatch = key; | ||||
|           } else if (key[key.length - 1] === '/' && | ||||
|             StringPrototypeStartsWith(name, key) && | ||||
|             key.length > bestMatch.length) { | ||||
|             bestMatch = key; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         if (bestMatch) { | ||||
|           const target = imports[bestMatch]; | ||||
|           const pattern = bestMatch[bestMatch.length - 1] === '*'; | ||||
|           const subpath = StringPrototypeSubstr(name, bestMatch.length - | ||||
|             (pattern ? 1 : 0)); | ||||
|           const resolved = resolvePackageTarget( | ||||
|             packageJSONUrl, target, subpath, bestMatch, base, pattern, true, | ||||
|             conditions); | ||||
|           if (resolved !== null) { | ||||
|             if (!pattern) | ||||
|               emitFolderMapDeprecation(bestMatch, packageJSONUrl, false, base); | ||||
|             return { resolved, exact: pattern }; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   throwImportNotDefined(name, packageJSONUrl, base); | ||||
| } | ||||
|  | ||||
| function getPackageType(url) { | ||||
|   const packageConfig = getPackageScopeConfig(url); | ||||
|   return packageConfig.type; | ||||
| } | ||||
|  | ||||
| function parsePackageName(specifier, base) { | ||||
|   let separatorIndex = StringPrototypeIndexOf(specifier, '/'); | ||||
|   let validPackageName = true; | ||||
|   let isScoped = false; | ||||
|   if (specifier[0] === '@') { | ||||
|     isScoped = true; | ||||
|     if (separatorIndex === -1 || specifier.length === 0) { | ||||
|       validPackageName = false; | ||||
|     } else { | ||||
|       separatorIndex = StringPrototypeIndexOf( | ||||
|         specifier, '/', separatorIndex + 1); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   const packageName = separatorIndex === -1 ? | ||||
|     specifier : StringPrototypeSlice(specifier, 0, separatorIndex); | ||||
|  | ||||
|   // Package name cannot have leading . and cannot have percent-encoding or | ||||
|   // separators. | ||||
|   for (let i = 0; i < packageName.length; i++) { | ||||
|     if (packageName[i] === '%' || packageName[i] === '\\') { | ||||
|       validPackageName = false; | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (!validPackageName) { | ||||
|     throw new ERR_INVALID_MODULE_SPECIFIER( | ||||
|       specifier, 'is not a valid package name', fileURLToPath(base)); | ||||
|   } | ||||
|  | ||||
|   const packageSubpath = '.' + (separatorIndex === -1 ? '' : | ||||
|     StringPrototypeSlice(specifier, separatorIndex)); | ||||
|  | ||||
|   return { packageName, packageSubpath, isScoped }; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param {string} specifier | ||||
|  * @param {URL} base | ||||
|  * @param {Set<string>} conditions | ||||
|  * @returns {URL} | ||||
|  */ | ||||
| function packageResolve(specifier, base, conditions) { | ||||
|   const { packageName, packageSubpath, isScoped } = | ||||
|     parsePackageName(specifier, base); | ||||
|  | ||||
|   // ResolveSelf | ||||
|   const packageConfig = getPackageScopeConfig(base); | ||||
|   if (packageConfig.exists) { | ||||
|     const packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); | ||||
|     if (packageConfig.name === packageName && | ||||
|         packageConfig.exports !== undefined && packageConfig.exports !== null) { | ||||
|       return packageExportsResolve( | ||||
|         packageJSONUrl, packageSubpath, packageConfig, base, conditions | ||||
|       ).resolved; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   let packageJSONUrl = | ||||
|     new URL('./node_modules/' + packageName + '/package.json', base); | ||||
|   let packageJSONPath = fileURLToPath(packageJSONUrl); | ||||
|   let lastPath; | ||||
|   do { | ||||
|     const stat = tryStatSync(StringPrototypeSlice(packageJSONPath, 0, | ||||
|                                                   packageJSONPath.length - 13)); | ||||
|     if (!stat.isDirectory()) { | ||||
|       lastPath = packageJSONPath; | ||||
|       packageJSONUrl = new URL((isScoped ? | ||||
|         '../../../../node_modules/' : '../../../node_modules/') + | ||||
|         packageName + '/package.json', packageJSONUrl); | ||||
|       packageJSONPath = fileURLToPath(packageJSONUrl); | ||||
|       continue; | ||||
|     } | ||||
|  | ||||
|     // Package match. | ||||
|     const packageConfig = getPackageConfig(packageJSONPath, specifier, base); | ||||
|     if (packageConfig.exports !== undefined && packageConfig.exports !== null) | ||||
|       return packageExportsResolve( | ||||
|         packageJSONUrl, packageSubpath, packageConfig, base, conditions | ||||
|       ).resolved; | ||||
|     if (packageSubpath === '.') | ||||
|       return legacyMainResolve(packageJSONUrl, packageConfig, base); | ||||
|     return new URL(packageSubpath, packageJSONUrl); | ||||
|     // Cross-platform root check. | ||||
|   } while (packageJSONPath.length !== lastPath.length); | ||||
|  | ||||
|   // eslint can't handle the above code. | ||||
|   // eslint-disable-next-line no-unreachable | ||||
|   throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base)); | ||||
| } | ||||
|  | ||||
| function isBareSpecifier(specifier) { | ||||
|   return specifier[0] && specifier[0] !== '/' && specifier[0] !== '.'; | ||||
| } | ||||
|  | ||||
| function isRelativeSpecifier(specifier) { | ||||
|   if (specifier[0] === '.') { | ||||
|     if (specifier.length === 1 || specifier[1] === '/') return true; | ||||
|     if (specifier[1] === '.') { | ||||
|       if (specifier.length === 2 || specifier[2] === '/') return true; | ||||
|     } | ||||
|   } | ||||
|   return false; | ||||
| } | ||||
|  | ||||
| function shouldBeTreatedAsRelativeOrAbsolutePath(specifier) { | ||||
|   if (specifier === '') return false; | ||||
|   if (specifier[0] === '/') return true; | ||||
|   return isRelativeSpecifier(specifier); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param {string} specifier | ||||
|  * @param {URL} base | ||||
|  * @param {Set<string>} conditions | ||||
|  * @returns {URL} | ||||
|  */ | ||||
| function moduleResolve(specifier, base, conditions) { | ||||
|   // Order swapped from spec for minor perf gain. | ||||
|   // Ok since relative URLs cannot parse as URLs. | ||||
|   let resolved; | ||||
|   if (shouldBeTreatedAsRelativeOrAbsolutePath(specifier)) { | ||||
|     resolved = new URL(specifier, base); | ||||
|   } else if (specifier[0] === '#') { | ||||
|     ({ resolved } = packageImportsResolve(specifier, base, conditions)); | ||||
|   } else { | ||||
|     try { | ||||
|       resolved = new URL(specifier); | ||||
|     } catch { | ||||
|       resolved = packageResolve(specifier, base, conditions); | ||||
|     } | ||||
|   } | ||||
|   return finalizeResolution(resolved, base); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Try to resolve an import as a CommonJS module | ||||
|  * @param {string} specifier | ||||
|  * @param {string} parentURL | ||||
|  * @returns {boolean|string} | ||||
|  */ | ||||
| function resolveAsCommonJS(specifier, parentURL) { | ||||
|   try { | ||||
|     const parent = fileURLToPath(parentURL); | ||||
|     const tmpModule = new CJSModule(parent, null); | ||||
|     tmpModule.paths = CJSModule._nodeModulePaths(parent); | ||||
|  | ||||
|     let found = CJSModule._resolveFilename(specifier, tmpModule, false); | ||||
|  | ||||
|     // If it is a relative specifier return the relative path | ||||
|     // to the parent | ||||
|     if (isRelativeSpecifier(specifier)) { | ||||
|       found = relative(parent, found); | ||||
|       // Add '.separator if the path does not start with '..separator' | ||||
|       // This should be a safe assumption because when loading | ||||
|       // esm modules there should be always a file specified so | ||||
|       // there should not be a specifier like '..' or '.' | ||||
|       if (!StringPrototypeStartsWith(found, `..${sep}`)) { | ||||
|         found = `.${sep}${found}`; | ||||
|       } | ||||
|     } else if (isBareSpecifier(specifier)) { | ||||
|       // If it is a bare specifier return the relative path within the | ||||
|       // module | ||||
|       const pkg = StringPrototypeSplit(specifier, '/')[0]; | ||||
|       const index = StringPrototypeIndexOf(found, pkg); | ||||
|       if (index !== -1) { | ||||
|         found = StringPrototypeSlice(found, index); | ||||
|       } | ||||
|     } | ||||
|     // Normalize the path separator to give a valid suggestion | ||||
|     // on Windows | ||||
|     if (process.platform === 'win32') { | ||||
|       found = StringPrototypeReplace(found, new RegExp(`\\${sep}`, 'g'), '/'); | ||||
|     } | ||||
|     return found; | ||||
|   } catch { | ||||
|     return false; | ||||
|   } | ||||
| } | ||||
|  | ||||
| function defaultResolve(specifier, context = {}, defaultResolveUnused) { | ||||
|   let { parentURL, conditions } = context; | ||||
|   if (parentURL && policy != null && policy.manifest) { | ||||
|     const redirects = policy.manifest.getDependencyMapper(parentURL); | ||||
|     if (redirects) { | ||||
|       const { resolve, reaction } = redirects; | ||||
|       const destination = resolve(specifier, new SafeSet(conditions)); | ||||
|       let missing = true; | ||||
|       if (destination === true) { | ||||
|         missing = false; | ||||
|       } else if (destination) { | ||||
|         const href = destination.href; | ||||
|         return { url: href }; | ||||
|       } | ||||
|       if (missing) { | ||||
|         reaction(new ERR_MANIFEST_DEPENDENCY_MISSING( | ||||
|           parentURL, | ||||
|           specifier, | ||||
|           ArrayPrototypeJoin([...conditions], ', ')) | ||||
|         ); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   let parsed; | ||||
|   try { | ||||
|     parsed = new URL(specifier); | ||||
|     if (parsed.protocol === 'data:') { | ||||
|       return { | ||||
|         url: specifier | ||||
|       }; | ||||
|     } | ||||
|   } catch {} | ||||
|   if (parsed && parsed.protocol === builtinModuleProtocol) | ||||
|     return { url: specifier }; | ||||
|   if (parsed && parsed.protocol !== 'file:' && parsed.protocol !== 'data:') | ||||
|     throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed); | ||||
|   if (NativeModule.canBeRequiredByUsers(specifier)) { | ||||
|     return { | ||||
|       url: builtinModuleProtocol + specifier | ||||
|     }; | ||||
|   } | ||||
|   if (parentURL && StringPrototypeStartsWith(parentURL, 'data:')) { | ||||
|     // This is gonna blow up, we want the error | ||||
|     new URL(specifier, parentURL); | ||||
|   } | ||||
|  | ||||
|   const isMain = parentURL === undefined; | ||||
|   if (isMain) { | ||||
|     parentURL = pathToFileURL(`${process.cwd()}/`).href; | ||||
|  | ||||
|     // This is the initial entry point to the program, and --input-type has | ||||
|     // been passed as an option; but --input-type can only be used with | ||||
|     // --eval, --print or STDIN string input. It is not allowed with file | ||||
|     // input, to avoid user confusion over how expansive the effect of the | ||||
|     // flag should be (i.e. entry point only, package scope surrounding the | ||||
|     // entry point, etc.). | ||||
|     if (typeFlag) | ||||
|       throw new ERR_INPUT_TYPE_NOT_ALLOWED(); | ||||
|   } | ||||
|  | ||||
|   conditions = getConditionsSet(conditions); | ||||
|   let url; | ||||
|   try { | ||||
|     url = moduleResolve(specifier, parentURL, conditions); | ||||
|   } catch (error) { | ||||
|     // Try to give the user a hint of what would have been the | ||||
|     // resolved CommonJS module | ||||
|     if (error.code === 'ERR_MODULE_NOT_FOUND' || | ||||
|         error.code === 'ERR_UNSUPPORTED_DIR_IMPORT') { | ||||
|       if (StringPrototypeStartsWith(specifier, 'file://')) { | ||||
|         specifier = fileURLToPath(specifier); | ||||
|       } | ||||
|       const found = resolveAsCommonJS(specifier, parentURL); | ||||
|       if (found) { | ||||
|         // Modify the stack and message string to include the hint | ||||
|         const lines = StringPrototypeSplit(error.stack, '\n'); | ||||
|         const hint = `Did you mean to import ${found}?`; | ||||
|         error.stack = | ||||
|           ArrayPrototypeShift(lines) + '\n' + | ||||
|           hint + '\n' + | ||||
|           ArrayPrototypeJoin(lines, '\n'); | ||||
|         error.message += `\n${hint}`; | ||||
|       } | ||||
|     } | ||||
|     throw error; | ||||
|   } | ||||
|  | ||||
|   if (isMain ? !preserveSymlinksMain : !preserveSymlinks) { | ||||
|     const urlPath = fileURLToPath(url); | ||||
|     const real = realpathSync(urlPath, { | ||||
|       // [internalFS.realpathCacheKey]: realpathCache | ||||
|     }); | ||||
|     const old = url; | ||||
|     url = pathToFileURL( | ||||
|       real + (StringPrototypeEndsWith(urlPath, sep) ? '/' : '')); | ||||
|     url.search = old.search; | ||||
|     url.hash = old.hash; | ||||
|   } | ||||
|  | ||||
|   return { url: `${url}` }; | ||||
| } | ||||
|  | ||||
| return { | ||||
|   DEFAULT_CONDITIONS, | ||||
|   defaultResolve, | ||||
|   encodedSepRegEx, | ||||
|   getPackageType, | ||||
|   packageExportsResolve, | ||||
|   packageImportsResolve | ||||
| }; | ||||
| } | ||||
| module.exports = { | ||||
|   createResolve | ||||
| }; | ||||
							
								
								
									
										44
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-package_json_reader.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								node_modules/ts-node/dist-raw/node-internal-modules-package_json_reader.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| // copied from https://github.com/nodejs/node/blob/v15.3.0/lib/internal/modules/package_json_reader.js | ||||
| 'use strict'; | ||||
|  | ||||
| const { SafeMap } = require('./node-primordials'); | ||||
| const { internalModuleReadJSON } = require('./node-internalBinding-fs'); | ||||
| const { pathToFileURL } = require('url'); | ||||
| const { toNamespacedPath } = require('path'); | ||||
| // const { getOptionValue } = require('./node-options'); | ||||
|  | ||||
| const cache = new SafeMap(); | ||||
|  | ||||
| let manifest; | ||||
|  | ||||
| /** | ||||
|  * @param {string} jsonPath | ||||
|  * @return {{string: string, containsKeys: boolean}} | ||||
|  */ | ||||
| function read(jsonPath) { | ||||
|   if (cache.has(jsonPath)) { | ||||
|     return cache.get(jsonPath); | ||||
|   } | ||||
|  | ||||
|   const [string, containsKeys] = internalModuleReadJSON( | ||||
|     toNamespacedPath(jsonPath) | ||||
|   ); | ||||
|   const result = { string, containsKeys }; | ||||
|   if (string !== undefined) { | ||||
|     if (manifest === undefined) { | ||||
|       // manifest = getOptionValue('--experimental-policy') ? | ||||
|       //   require('internal/process/policy').manifest : | ||||
|       //   null; | ||||
|       // disabled for now.  I am not sure if/how we should support this | ||||
|       manifest = null; | ||||
|     } | ||||
|     if (manifest !== null) { | ||||
|       const jsonURL = pathToFileURL(jsonPath); | ||||
|       manifest.assertIntegrity(jsonURL, string); | ||||
|     } | ||||
|   } | ||||
|   cache.set(jsonPath, result); | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| module.exports = { read }; | ||||
							
								
								
									
										254
									
								
								node_modules/ts-node/dist-raw/node-internal-repl-await.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								node_modules/ts-node/dist-raw/node-internal-repl-await.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,254 @@ | ||||
| // copied from https://github.com/nodejs/node/blob/88799930794045795e8abac874730f9eba7e2300/lib/internal/repl/await.js | ||||
| 'use strict'; | ||||
|  | ||||
| const { | ||||
|   ArrayFrom, | ||||
|   ArrayPrototypeForEach, | ||||
|   ArrayPrototypeIncludes, | ||||
|   ArrayPrototypeJoin, | ||||
|   ArrayPrototypePop, | ||||
|   ArrayPrototypePush, | ||||
|   FunctionPrototype, | ||||
|   ObjectKeys, | ||||
|   RegExpPrototypeSymbolReplace, | ||||
|   StringPrototypeEndsWith, | ||||
|   StringPrototypeIncludes, | ||||
|   StringPrototypeIndexOf, | ||||
|   StringPrototypeRepeat, | ||||
|   StringPrototypeSplit, | ||||
|   StringPrototypeStartsWith, | ||||
|   SyntaxError, | ||||
| } = require('./node-primordials'); | ||||
|  | ||||
| const parser = require('acorn').Parser; | ||||
| const walk = require('acorn-walk'); | ||||
| const { Recoverable } = require('repl'); | ||||
|  | ||||
| function isTopLevelDeclaration(state) { | ||||
|   return state.ancestors[state.ancestors.length - 2] === state.body; | ||||
| } | ||||
|  | ||||
| const noop = FunctionPrototype; | ||||
| const visitorsWithoutAncestors = { | ||||
|   ClassDeclaration(node, state, c) { | ||||
|     if (isTopLevelDeclaration(state)) { | ||||
|       state.prepend(node, `${node.id.name}=`); | ||||
|       ArrayPrototypePush( | ||||
|         state.hoistedDeclarationStatements, | ||||
|         `let ${node.id.name}; ` | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     walk.base.ClassDeclaration(node, state, c); | ||||
|   }, | ||||
|   ForOfStatement(node, state, c) { | ||||
|     if (node.await === true) { | ||||
|       state.containsAwait = true; | ||||
|     } | ||||
|     walk.base.ForOfStatement(node, state, c); | ||||
|   }, | ||||
|   FunctionDeclaration(node, state, c) { | ||||
|     state.prepend(node, `${node.id.name}=`); | ||||
|     ArrayPrototypePush( | ||||
|       state.hoistedDeclarationStatements, | ||||
|       `var ${node.id.name}; ` | ||||
|     ); | ||||
|   }, | ||||
|   FunctionExpression: noop, | ||||
|   ArrowFunctionExpression: noop, | ||||
|   MethodDefinition: noop, | ||||
|   AwaitExpression(node, state, c) { | ||||
|     state.containsAwait = true; | ||||
|     walk.base.AwaitExpression(node, state, c); | ||||
|   }, | ||||
|   ReturnStatement(node, state, c) { | ||||
|     state.containsReturn = true; | ||||
|     walk.base.ReturnStatement(node, state, c); | ||||
|   }, | ||||
|   VariableDeclaration(node, state, c) { | ||||
|     const variableKind = node.kind; | ||||
|     const isIterableForDeclaration = ArrayPrototypeIncludes( | ||||
|       ['ForOfStatement', 'ForInStatement'], | ||||
|       state.ancestors[state.ancestors.length - 2].type | ||||
|     ); | ||||
|  | ||||
|     if (variableKind === 'var' || isTopLevelDeclaration(state)) { | ||||
|       state.replace( | ||||
|         node.start, | ||||
|         node.start + variableKind.length + (isIterableForDeclaration ? 1 : 0), | ||||
|         variableKind === 'var' && isIterableForDeclaration ? | ||||
|           '' : | ||||
|           'void' + (node.declarations.length === 1 ? '' : ' (') | ||||
|       ); | ||||
|  | ||||
|       if (!isIterableForDeclaration) { | ||||
|         ArrayPrototypeForEach(node.declarations, (decl) => { | ||||
|           state.prepend(decl, '('); | ||||
|           state.append(decl, decl.init ? ')' : '=undefined)'); | ||||
|         }); | ||||
|  | ||||
|         if (node.declarations.length !== 1) { | ||||
|           state.append(node.declarations[node.declarations.length - 1], ')'); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       const variableIdentifiersToHoist = [ | ||||
|         ['var', []], | ||||
|         ['let', []], | ||||
|       ]; | ||||
|       function registerVariableDeclarationIdentifiers(node) { | ||||
|         switch (node.type) { | ||||
|           case 'Identifier': | ||||
|             ArrayPrototypePush( | ||||
|               variableIdentifiersToHoist[variableKind === 'var' ? 0 : 1][1], | ||||
|               node.name | ||||
|             ); | ||||
|             break; | ||||
|           case 'ObjectPattern': | ||||
|             ArrayPrototypeForEach(node.properties, (property) => { | ||||
|               registerVariableDeclarationIdentifiers(property.value); | ||||
|             }); | ||||
|             break; | ||||
|           case 'ArrayPattern': | ||||
|             ArrayPrototypeForEach(node.elements, (element) => { | ||||
|               registerVariableDeclarationIdentifiers(element); | ||||
|             }); | ||||
|             break; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       ArrayPrototypeForEach(node.declarations, (decl) => { | ||||
|         registerVariableDeclarationIdentifiers(decl.id); | ||||
|       }); | ||||
|  | ||||
|       ArrayPrototypeForEach( | ||||
|         variableIdentifiersToHoist, | ||||
|         ({ 0: kind, 1: identifiers }) => { | ||||
|           if (identifiers.length > 0) { | ||||
|             ArrayPrototypePush( | ||||
|               state.hoistedDeclarationStatements, | ||||
|               `${kind} ${ArrayPrototypeJoin(identifiers, ', ')}; ` | ||||
|             ); | ||||
|           } | ||||
|         } | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     walk.base.VariableDeclaration(node, state, c); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| const visitors = {}; | ||||
| for (const nodeType of ObjectKeys(walk.base)) { | ||||
|   const callback = visitorsWithoutAncestors[nodeType] || walk.base[nodeType]; | ||||
|   visitors[nodeType] = (node, state, c) => { | ||||
|     const isNew = node !== state.ancestors[state.ancestors.length - 1]; | ||||
|     if (isNew) { | ||||
|       ArrayPrototypePush(state.ancestors, node); | ||||
|     } | ||||
|     callback(node, state, c); | ||||
|     if (isNew) { | ||||
|       ArrayPrototypePop(state.ancestors); | ||||
|     } | ||||
|   }; | ||||
| } | ||||
|  | ||||
| function processTopLevelAwait(src) { | ||||
|   const wrapPrefix = '(async () => { '; | ||||
|   const wrapped = `${wrapPrefix}${src} })()`; | ||||
|   const wrappedArray = ArrayFrom(wrapped); | ||||
|   let root; | ||||
|   try { | ||||
|     root = parser.parse(wrapped, { ecmaVersion: 'latest' }); | ||||
|   } catch (e) { | ||||
|     if (StringPrototypeStartsWith(e.message, 'Unterminated ')) | ||||
|       throw new Recoverable(e); | ||||
|     // If the parse error is before the first "await", then use the execution | ||||
|     // error. Otherwise we must emit this parse error, making it look like a | ||||
|     // proper syntax error. | ||||
|     const awaitPos = StringPrototypeIndexOf(src, 'await'); | ||||
|     const errPos = e.pos - wrapPrefix.length; | ||||
|     if (awaitPos > errPos) | ||||
|       return null; | ||||
|     // Convert keyword parse errors on await into their original errors when | ||||
|     // possible. | ||||
|     if (errPos === awaitPos + 6 && | ||||
|         StringPrototypeIncludes(e.message, 'Expecting Unicode escape sequence')) | ||||
|       return null; | ||||
|     if (errPos === awaitPos + 7 && | ||||
|         StringPrototypeIncludes(e.message, 'Unexpected token')) | ||||
|       return null; | ||||
|     const line = e.loc.line; | ||||
|     const column = line === 1 ? e.loc.column - wrapPrefix.length : e.loc.column; | ||||
|     let message = '\n' + StringPrototypeSplit(src, '\n')[line - 1] + '\n' + | ||||
|         StringPrototypeRepeat(' ', column) + | ||||
|         '^\n\n' + RegExpPrototypeSymbolReplace(/ \([^)]+\)/, e.message, ''); | ||||
|     // V8 unexpected token errors include the token string. | ||||
|     if (StringPrototypeEndsWith(message, 'Unexpected token')) | ||||
|       message += " '" + | ||||
|         // Wrapper end may cause acorn to report error position after the source | ||||
|         ((src.length - 1) >= (e.pos - wrapPrefix.length) | ||||
|           ? src[e.pos - wrapPrefix.length] | ||||
|           : src[src.length - 1]) + | ||||
|         "'"; | ||||
|     // eslint-disable-next-line no-restricted-syntax | ||||
|     throw new SyntaxError(message); | ||||
|   } | ||||
|   const body = root.body[0].expression.callee.body; | ||||
|   const state = { | ||||
|     body, | ||||
|     ancestors: [], | ||||
|     hoistedDeclarationStatements: [], | ||||
|     replace(from, to, str) { | ||||
|       for (let i = from; i < to; i++) { | ||||
|         wrappedArray[i] = ''; | ||||
|       } | ||||
|       if (from === to) str += wrappedArray[from]; | ||||
|       wrappedArray[from] = str; | ||||
|     }, | ||||
|     prepend(node, str) { | ||||
|       wrappedArray[node.start] = str + wrappedArray[node.start]; | ||||
|     }, | ||||
|     append(node, str) { | ||||
|       wrappedArray[node.end - 1] += str; | ||||
|     }, | ||||
|     containsAwait: false, | ||||
|     containsReturn: false | ||||
|   }; | ||||
|  | ||||
|   walk.recursive(body, state, visitors); | ||||
|  | ||||
|   // Do not transform if | ||||
|   // 1. False alarm: there isn't actually an await expression. | ||||
|   // 2. There is a top-level return, which is not allowed. | ||||
|   if (!state.containsAwait || state.containsReturn) { | ||||
|     return null; | ||||
|   } | ||||
|  | ||||
|   const last = body.body[body.body.length - 1]; | ||||
|   if (last.type === 'ExpressionStatement') { | ||||
|     // For an expression statement of the form | ||||
|     // ( expr ) ; | ||||
|     // ^^^^^^^^^^   // last | ||||
|     //   ^^^^       // last.expression | ||||
|     // | ||||
|     // We do not want the left parenthesis before the `return` keyword; | ||||
|     // therefore we prepend the `return (` to `last`. | ||||
|     // | ||||
|     // On the other hand, we do not want the right parenthesis after the | ||||
|     // semicolon. Since there can only be more right parentheses between | ||||
|     // last.expression.end and the semicolon, appending one more to | ||||
|     // last.expression should be fine. | ||||
|     state.prepend(last, 'return ('); | ||||
|     state.append(last.expression, ')'); | ||||
|   } | ||||
|  | ||||
|   return ( | ||||
|     ArrayPrototypeJoin(state.hoistedDeclarationStatements, '') + | ||||
|     ArrayPrototypeJoin(wrappedArray, '') | ||||
|   ); | ||||
| } | ||||
|  | ||||
| module.exports = { | ||||
|   processTopLevelAwait | ||||
| }; | ||||
							
								
								
									
										58
									
								
								node_modules/ts-node/dist-raw/node-internalBinding-fs.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								node_modules/ts-node/dist-raw/node-internalBinding-fs.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| const fs = require('fs'); | ||||
| const {versionGteLt} = require('../dist/util'); | ||||
|  | ||||
| // In node's core, this is implemented in C | ||||
| // https://github.com/nodejs/node/blob/v15.3.0/src/node_file.cc#L891-L985 | ||||
| /** | ||||
|  * @param {string} path | ||||
|  * @returns {[] | [string, boolean]} | ||||
|  */ | ||||
| function internalModuleReadJSON(path) { | ||||
|   let string | ||||
|   try { | ||||
|     string = fs.readFileSync(path, 'utf8') | ||||
|   } catch (e) { | ||||
|     if (e.code === 'ENOENT') return [] | ||||
|     throw e | ||||
|   } | ||||
|   // Node's implementation checks for the presence of relevant keys: main, name, type, exports, imports | ||||
|   // Node does this for performance to skip unnecessary parsing. | ||||
|   // This would slow us down and, based on our usage, we can skip it. | ||||
|   const containsKeys = true | ||||
|   return [string, containsKeys] | ||||
| } | ||||
|  | ||||
| // In node's core, this is implemented in C | ||||
| // https://github.com/nodejs/node/blob/63e7dc1e5c71b70c80ed9eda230991edb00811e2/src/node_file.cc#L987-L1005 | ||||
| /** | ||||
|  * @param {string} path | ||||
|  * @returns {number} 0 = file, 1 = dir, negative = error | ||||
|  */ | ||||
| function internalModuleStat(path) { | ||||
|   const stat = fs.statSync(path, { throwIfNoEntry: false }); | ||||
|   if(!stat) return -1; | ||||
|   if(stat.isFile()) return 0; | ||||
|   if(stat.isDirectory()) return 1; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param {string} path | ||||
|  * @returns {number} 0 = file, 1 = dir, negative = error | ||||
|  */ | ||||
| function internalModuleStatInefficient(path) { | ||||
|   try { | ||||
|     const stat = fs.statSync(path); | ||||
|     if(stat.isFile()) return 0; | ||||
|     if(stat.isDirectory()) return 1; | ||||
|   } catch(e) { | ||||
|     return -e.errno || -1; | ||||
|   } | ||||
| } | ||||
|  | ||||
| const statSupportsThrowIfNoEntry = versionGteLt(process.versions.node, '15.3.0') || | ||||
|   versionGteLt(process.versions.node, '14.17.0', '15.0.0'); | ||||
|  | ||||
| module.exports = { | ||||
|   internalModuleReadJSON, | ||||
|   internalModuleStat: statSupportsThrowIfNoEntry ? internalModuleStat : internalModuleStatInefficient | ||||
| }; | ||||
							
								
								
									
										9
									
								
								node_modules/ts-node/dist-raw/node-nativemodule.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								node_modules/ts-node/dist-raw/node-nativemodule.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
|  | ||||
| // Node imports this from 'internal/bootstrap/loaders' | ||||
| const Module = require('module'); | ||||
| const NativeModule = { | ||||
|   canBeRequiredByUsers(specifier) { | ||||
|     return Module.builtinModules.includes(specifier) | ||||
|   } | ||||
| }; | ||||
| exports.NativeModule = NativeModule; | ||||
							
								
								
									
										103
									
								
								node_modules/ts-node/dist-raw/node-options.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								node_modules/ts-node/dist-raw/node-options.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | ||||
| // Replacement for node's internal 'internal/options' module | ||||
|  | ||||
| exports.getOptionValue = getOptionValue; | ||||
| function getOptionValue(opt) { | ||||
|   parseOptions(); | ||||
|   return options[opt]; | ||||
| } | ||||
|  | ||||
| let options; | ||||
| function parseOptions() { | ||||
|   if (!options) { | ||||
|     options = { | ||||
|       '--preserve-symlinks': false, | ||||
|       '--preserve-symlinks-main': false, | ||||
|       '--input-type': undefined, | ||||
|       '--experimental-specifier-resolution': 'explicit', | ||||
|       '--experimental-policy': undefined, | ||||
|       '--conditions': [], | ||||
|       '--pending-deprecation': false, | ||||
|       ...parseArgv(getNodeOptionsEnvArgv()), | ||||
|       ...parseArgv(process.execArgv), | ||||
|       ...getOptionValuesFromOtherEnvVars() | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| function parseArgv(argv) { | ||||
|   return require('arg')({ | ||||
|     '--preserve-symlinks': Boolean, | ||||
|     '--preserve-symlinks-main': Boolean, | ||||
|     '--input-type': String, | ||||
|     '--experimental-specifier-resolution': String, | ||||
|     // Legacy alias for node versions prior to 12.16 | ||||
|     '--es-module-specifier-resolution': '--experimental-specifier-resolution', | ||||
|     '--experimental-policy': String, | ||||
|     '--conditions': [String], | ||||
|     '--pending-deprecation': Boolean, | ||||
|     '--experimental-json-modules': Boolean, | ||||
|     '--experimental-wasm-modules': Boolean, | ||||
|   }, { | ||||
|     argv, | ||||
|     permissive: true | ||||
|   }); | ||||
| } | ||||
|  | ||||
| function getNodeOptionsEnvArgv() { | ||||
|   const errors = []; | ||||
|   const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || '', errors); | ||||
|   if (errors.length !== 0) { | ||||
|     // TODO: handle errors somehow | ||||
|   } | ||||
|   return envArgv; | ||||
| } | ||||
|  | ||||
| // Direct JS port of C implementation: https://github.com/nodejs/node/blob/67ba825037b4082d5d16f922fb9ce54516b4a869/src/node_options.cc#L1024-L1063 | ||||
| function ParseNodeOptionsEnvVar(node_options, errors) { | ||||
|   const env_argv = []; | ||||
|  | ||||
|   let is_in_string = false; | ||||
|   let will_start_new_arg = true; | ||||
|   for (let index = 0; index < node_options.length; ++index) { | ||||
|       let c = node_options[index]; | ||||
|  | ||||
|       // Backslashes escape the following character | ||||
|       if (c === '\\' && is_in_string) { | ||||
|           if (index + 1 === node_options.length) { | ||||
|               errors.push("invalid value for NODE_OPTIONS " + | ||||
|                   "(invalid escape)\n"); | ||||
|               return env_argv; | ||||
|           } else { | ||||
|               c = node_options[++index]; | ||||
|           } | ||||
|       } else if (c === ' ' && !is_in_string) { | ||||
|           will_start_new_arg = true; | ||||
|           continue; | ||||
|       } else if (c === '"') { | ||||
|           is_in_string = !is_in_string; | ||||
|           continue; | ||||
|       } | ||||
|  | ||||
|       if (will_start_new_arg) { | ||||
|           env_argv.push(c); | ||||
|           will_start_new_arg = false; | ||||
|       } else { | ||||
|           env_argv[env_argv.length - 1] += c; | ||||
|       } | ||||
|   } | ||||
|  | ||||
|   if (is_in_string) { | ||||
|       errors.push("invalid value for NODE_OPTIONS " + | ||||
|           "(unterminated string)\n"); | ||||
|   } | ||||
|   return env_argv; | ||||
| } | ||||
|  | ||||
| // Get option values that can be specified via env vars besides NODE_OPTIONS | ||||
| function getOptionValuesFromOtherEnvVars() { | ||||
|   const options = {}; | ||||
|   if(process.env.NODE_PENDING_DEPRECATION === '1') { | ||||
|     options['--pending-deprecation'] = true; | ||||
|   } | ||||
|   return options; | ||||
| } | ||||
							
								
								
									
										37
									
								
								node_modules/ts-node/dist-raw/node-primordials.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								node_modules/ts-node/dist-raw/node-primordials.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| module.exports = { | ||||
|   ArrayFrom: Array.from, | ||||
|   ArrayIsArray: Array.isArray, | ||||
|   ArrayPrototypeShift: (obj) => Array.prototype.shift.call(obj), | ||||
|   ArrayPrototypeForEach: (arr, ...rest) => Array.prototype.forEach.apply(arr, rest), | ||||
|   ArrayPrototypeIncludes: (arr, ...rest) => Array.prototype.includes.apply(arr, rest), | ||||
|   ArrayPrototypeJoin: (arr, ...rest) => Array.prototype.join.apply(arr, rest), | ||||
|   ArrayPrototypePop: (arr, ...rest) => Array.prototype.pop.apply(arr, rest), | ||||
|   ArrayPrototypePush: (arr, ...rest) => Array.prototype.push.apply(arr, rest), | ||||
|   FunctionPrototype: Function.prototype, | ||||
|   JSONParse: JSON.parse, | ||||
|   JSONStringify: JSON.stringify, | ||||
|   ObjectFreeze: Object.freeze, | ||||
|   ObjectKeys: Object.keys, | ||||
|   ObjectGetOwnPropertyNames: Object.getOwnPropertyNames, | ||||
|   ObjectDefineProperty: Object.defineProperty, | ||||
|   ObjectPrototypeHasOwnProperty: (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop), | ||||
|   RegExpPrototypeExec: (obj, string) => RegExp.prototype.exec.call(obj, string), | ||||
|   RegExpPrototypeTest: (obj, string) => RegExp.prototype.test.call(obj, string), | ||||
|   RegExpPrototypeSymbolReplace: (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest), | ||||
|   SafeMap: Map, | ||||
|   SafeSet: Set, | ||||
|   SafeWeakMap: WeakMap, | ||||
|   StringPrototypeEndsWith: (str, ...rest) => String.prototype.endsWith.apply(str, rest), | ||||
|   StringPrototypeIncludes: (str, ...rest) => String.prototype.includes.apply(str, rest), | ||||
|   StringPrototypeLastIndexOf: (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest), | ||||
|   StringPrototypeIndexOf: (str, ...rest) => String.prototype.indexOf.apply(str, rest), | ||||
|   StringPrototypeRepeat: (str, ...rest) => String.prototype.repeat.apply(str, rest), | ||||
|   StringPrototypeReplace: (str, ...rest) => String.prototype.replace.apply(str, rest), | ||||
|   StringPrototypeSlice: (str, ...rest) => String.prototype.slice.apply(str, rest), | ||||
|   StringPrototypeSplit: (str, ...rest) => String.prototype.split.apply(str, rest), | ||||
|   StringPrototypeStartsWith: (str, ...rest) => String.prototype.startsWith.apply(str, rest), | ||||
|   StringPrototypeSubstr: (str, ...rest) => String.prototype.substr.apply(str, rest), | ||||
|   StringPrototypeCharCodeAt: (str, ...rest) => String.prototype.charCodeAt.apply(str, rest), | ||||
|   StringPrototypeMatch: (str, ...rest) => String.prototype.match.apply(str, rest), | ||||
|   SyntaxError: SyntaxError | ||||
| }; | ||||
							
								
								
									
										9
									
								
								node_modules/ts-node/dist-raw/runmain-hack.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								node_modules/ts-node/dist-raw/runmain-hack.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| const {pathToFileURL} = require('url'); | ||||
|  | ||||
| // Hack to avoid Module.runMain on node 18.6.0 | ||||
| // Keeping it simple for now, isolated in this file. | ||||
| // Could theoretically probe `getFormat` impl to determine if `import()` or `Module._load()` is best | ||||
| // Note that I attempted a try-catch around `Module._load`, but it poisons some sort of cache such that subsequent `import()` is impossible. | ||||
| exports.run = function(entryPointPath) { | ||||
|   import(pathToFileURL(entryPointPath)); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user