123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- "use strict";
- var _a;
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.versionGteLt = exports.once = exports.getBasePathForProjectLocalDependencyResolution = exports.createProjectLocalResolveHelper = exports.attemptRequireWithV8CompileCache = exports.cachedLookup = exports.hasOwnProperty = exports.normalizeSlashes = exports.parse = exports.split = exports.assign = exports.yn = exports.createRequire = void 0;
- const module_1 = require("module");
- const ynModule = require("yn");
- const path_1 = require("path");
- /** @internal */
- exports.createRequire = (_a = module_1.createRequire !== null && module_1.createRequire !== void 0 ? module_1.createRequire : module_1.createRequireFromPath) !== null && _a !== void 0 ? _a : require('create-require');
- /**
- * Wrapper around yn module that returns `undefined` instead of `null`.
- * This is implemented by yn v4, but we're staying on v3 to avoid v4's node 10 requirement.
- * @internal
- */
- function yn(value) {
- var _a;
- return (_a = ynModule(value)) !== null && _a !== void 0 ? _a : undefined;
- }
- exports.yn = yn;
- /**
- * Like `Object.assign`, but ignores `undefined` properties.
- *
- * @internal
- */
- function assign(initialValue, ...sources) {
- for (const source of sources) {
- for (const key of Object.keys(source)) {
- const value = source[key];
- if (value !== undefined)
- initialValue[key] = value;
- }
- }
- return initialValue;
- }
- exports.assign = assign;
- /**
- * Split a string array of values
- * and remove empty strings from the resulting array.
- * @internal
- */
- function split(value) {
- return typeof value === 'string'
- ? value.split(/ *, */g).filter((v) => v !== '')
- : undefined;
- }
- exports.split = split;
- /**
- * Parse a string as JSON.
- * @internal
- */
- function parse(value) {
- return typeof value === 'string' ? JSON.parse(value) : undefined;
- }
- exports.parse = parse;
- const directorySeparator = '/';
- const backslashRegExp = /\\/g;
- /**
- * Replace backslashes with forward slashes.
- * @internal
- */
- function normalizeSlashes(value) {
- return value.replace(backslashRegExp, directorySeparator);
- }
- exports.normalizeSlashes = normalizeSlashes;
- /**
- * Safe `hasOwnProperty`
- * @internal
- */
- function hasOwnProperty(object, property) {
- return Object.prototype.hasOwnProperty.call(object, property);
- }
- exports.hasOwnProperty = hasOwnProperty;
- /**
- * Cached fs operation wrapper.
- */
- function cachedLookup(fn) {
- const cache = new Map();
- return (arg) => {
- if (!cache.has(arg)) {
- const v = fn(arg);
- cache.set(arg, v);
- return v;
- }
- return cache.get(arg);
- };
- }
- exports.cachedLookup = cachedLookup;
- /**
- * @internal
- * Require something with v8-compile-cache, which should make subsequent requires faster.
- * Do lots of error-handling so that, worst case, we require without the cache, and users are not blocked.
- */
- function attemptRequireWithV8CompileCache(requireFn, specifier) {
- try {
- const v8CC = require('v8-compile-cache-lib').install();
- try {
- return requireFn(specifier);
- }
- finally {
- v8CC === null || v8CC === void 0 ? void 0 : v8CC.uninstall();
- }
- }
- catch (e) {
- return requireFn(specifier);
- }
- }
- exports.attemptRequireWithV8CompileCache = attemptRequireWithV8CompileCache;
- /**
- * Helper to discover dependencies relative to a user's project, optionally
- * falling back to relative to ts-node. This supports global installations of
- * ts-node, for example where someone does `#!/usr/bin/env -S ts-node --swc` and
- * we need to fallback to a global install of @swc/core
- * @internal
- */
- function createProjectLocalResolveHelper(localDirectory) {
- return function projectLocalResolveHelper(specifier, fallbackToTsNodeRelative) {
- return require.resolve(specifier, {
- paths: fallbackToTsNodeRelative
- ? [localDirectory, __dirname]
- : [localDirectory],
- });
- };
- }
- exports.createProjectLocalResolveHelper = createProjectLocalResolveHelper;
- /**
- * Used as a reminder of all the factors we must consider when finding project-local dependencies and when a config file
- * on disk may or may not exist.
- * @internal
- */
- function getBasePathForProjectLocalDependencyResolution(configFilePath, projectSearchDirOption, projectOption, cwdOption) {
- var _a;
- if (configFilePath != null)
- return (0, path_1.dirname)(configFilePath);
- return (_a = projectSearchDirOption !== null && projectSearchDirOption !== void 0 ? projectSearchDirOption : projectOption) !== null && _a !== void 0 ? _a : cwdOption;
- // TODO technically breaks if projectOption is path to a file, not a directory,
- // and we attempt to resolve relative specifiers. By the time we resolve relative specifiers,
- // should have configFilePath, so not reach this codepath.
- }
- exports.getBasePathForProjectLocalDependencyResolution = getBasePathForProjectLocalDependencyResolution;
- /** @internal */
- function once(fn) {
- let value;
- let ran = false;
- function onceFn(...args) {
- if (ran)
- return value;
- value = fn(...args);
- ran = true;
- return value;
- }
- return onceFn;
- }
- exports.once = once;
- /** @internal */
- function versionGteLt(version, gteRequirement, ltRequirement) {
- const [major, minor, patch, extra] = parse(version);
- const [gteMajor, gteMinor, gtePatch] = parse(gteRequirement);
- const isGte = major > gteMajor ||
- (major === gteMajor &&
- (minor > gteMinor || (minor === gteMinor && patch >= gtePatch)));
- let isLt = true;
- if (ltRequirement) {
- const [ltMajor, ltMinor, ltPatch] = parse(ltRequirement);
- isLt =
- major < ltMajor ||
- (major === ltMajor &&
- (minor < ltMinor || (minor === ltMinor && patch < ltPatch)));
- }
- return isGte && isLt;
- function parse(requirement) {
- return requirement.split(/[\.-]/).map((s) => parseInt(s, 10));
- }
- }
- exports.versionGteLt = versionGteLt;
- //# sourceMappingURL=util.js.map
|