Icard/angular-clarity-master(work.../node_modules/ts-node/dist/util.js

175 lines
6.0 KiB
JavaScript

"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