| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- "use strict";
- var __create = Object.create;
- var __defProp = Object.defineProperty;
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
- var __getOwnPropNames = Object.getOwnPropertyNames;
- var __getProtoOf = Object.getPrototypeOf;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __export = (target, all) => {
- for (var name in all)
- __defProp(target, name, { get: all[name], enumerable: true });
- };
- var __copyProps = (to, from, except, desc) => {
- if (from && typeof from === "object" || typeof from === "function") {
- for (let key of __getOwnPropNames(from))
- if (!__hasOwnProp.call(to, key) && key !== except)
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
- }
- return to;
- };
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
- // If the importer is in node compatibility mode or this is not an ESM
- // file that has been converted to a CommonJS file using a Babel-
- // compatible transform (i.e. "__esModule" has not been set), then set
- // "default" to the CommonJS "module.exports" for node compatibility.
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
- mod
- ));
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
- var transform_exports = {};
- __export(transform_exports, {
- requireOrImport: () => requireOrImport,
- resolveHook: () => resolveHook,
- setSingleTSConfig: () => setSingleTSConfig,
- setTransformConfig: () => setTransformConfig,
- setTransformData: () => setTransformData,
- shouldTransform: () => shouldTransform,
- singleTSConfig: () => singleTSConfig,
- transformConfig: () => transformConfig,
- transformHook: () => transformHook,
- wrapFunctionWithLocation: () => wrapFunctionWithLocation
- });
- module.exports = __toCommonJS(transform_exports);
- var import_fs = __toESM(require("fs"));
- var import_module = __toESM(require("module"));
- var import_path = __toESM(require("path"));
- var import_url = __toESM(require("url"));
- var import_crypto = __toESM(require("crypto"));
- var import_tsconfig_loader = require("../third_party/tsconfig-loader");
- var import_util = require("../util");
- var import_utilsBundle = require("../utilsBundle");
- var import_compilationCache = require("./compilationCache");
- var import_pirates = require("../third_party/pirates");
- const version = require("../../package.json").version;
- const cachedTSConfigs = /* @__PURE__ */ new Map();
- let _transformConfig = {
- babelPlugins: [],
- external: []
- };
- let _externalMatcher = () => false;
- function setTransformConfig(config) {
- _transformConfig = config;
- _externalMatcher = (0, import_util.createFileMatcher)(_transformConfig.external);
- }
- function transformConfig() {
- return _transformConfig;
- }
- let _singleTSConfigPath;
- let _singleTSConfig;
- function setSingleTSConfig(value) {
- _singleTSConfigPath = value;
- }
- function singleTSConfig() {
- return _singleTSConfigPath;
- }
- function validateTsConfig(tsconfig) {
- const pathsBase = tsconfig.absoluteBaseUrl ?? tsconfig.paths?.pathsBasePath;
- const pathsFallback = tsconfig.absoluteBaseUrl ? [{ key: "*", values: ["*"] }] : [];
- return {
- allowJs: !!tsconfig.allowJs,
- pathsBase,
- paths: Object.entries(tsconfig.paths?.mapping || {}).map(([key, values]) => ({ key, values })).concat(pathsFallback)
- };
- }
- function loadAndValidateTsconfigsForFile(file2) {
- if (_singleTSConfigPath && !_singleTSConfig)
- _singleTSConfig = (0, import_tsconfig_loader.loadTsConfig)(_singleTSConfigPath).map(validateTsConfig);
- if (_singleTSConfig)
- return _singleTSConfig;
- return loadAndValidateTsconfigsForFolder(import_path.default.dirname(file2));
- }
- function loadAndValidateTsconfigsForFolder(folder) {
- const foldersWithConfig = [];
- let currentFolder = import_path.default.resolve(folder);
- let result2;
- while (true) {
- const cached = cachedTSConfigs.get(currentFolder);
- if (cached) {
- result2 = cached;
- break;
- }
- foldersWithConfig.push(currentFolder);
- for (const name of ["tsconfig.json", "jsconfig.json"]) {
- const configPath = import_path.default.join(currentFolder, name);
- if (import_fs.default.existsSync(configPath)) {
- const loaded = (0, import_tsconfig_loader.loadTsConfig)(configPath);
- result2 = loaded.map(validateTsConfig);
- break;
- }
- }
- if (result2)
- break;
- const parentFolder = import_path.default.resolve(currentFolder, "../");
- if (currentFolder === parentFolder)
- break;
- currentFolder = parentFolder;
- }
- result2 = result2 || [];
- for (const folder2 of foldersWithConfig)
- cachedTSConfigs.set(folder2, result2);
- return result2;
- }
- const pathSeparator = process.platform === "win32" ? ";" : ":";
- const builtins = new Set(import_module.default.builtinModules);
- function resolveHook(filename, specifier) {
- if (specifier.startsWith("node:") || builtins.has(specifier))
- return;
- if (!shouldTransform(filename))
- return;
- if (isRelativeSpecifier(specifier))
- return (0, import_util.resolveImportSpecifierAfterMapping)(import_path.default.resolve(import_path.default.dirname(filename), specifier), false);
- const isTypeScript = filename.endsWith(".ts") || filename.endsWith(".tsx");
- const tsconfigs = loadAndValidateTsconfigsForFile(filename);
- for (const tsconfig of tsconfigs) {
- if (!isTypeScript && !tsconfig.allowJs)
- continue;
- let longestPrefixLength = -1;
- let pathMatchedByLongestPrefix;
- for (const { key, values } of tsconfig.paths) {
- let matchedPartOfSpecifier = specifier;
- const [keyPrefix, keySuffix] = key.split("*");
- if (key.includes("*")) {
- if (keyPrefix) {
- if (!specifier.startsWith(keyPrefix))
- continue;
- matchedPartOfSpecifier = matchedPartOfSpecifier.substring(keyPrefix.length, matchedPartOfSpecifier.length);
- }
- if (keySuffix) {
- if (!specifier.endsWith(keySuffix))
- continue;
- matchedPartOfSpecifier = matchedPartOfSpecifier.substring(0, matchedPartOfSpecifier.length - keySuffix.length);
- }
- } else {
- if (specifier !== key)
- continue;
- matchedPartOfSpecifier = specifier;
- }
- if (keyPrefix.length <= longestPrefixLength)
- continue;
- for (const value of values) {
- let candidate = value;
- if (value.includes("*"))
- candidate = candidate.replace("*", matchedPartOfSpecifier);
- candidate = import_path.default.resolve(tsconfig.pathsBase, candidate);
- const existing = (0, import_util.resolveImportSpecifierAfterMapping)(candidate, true);
- if (existing) {
- longestPrefixLength = keyPrefix.length;
- pathMatchedByLongestPrefix = existing;
- }
- }
- }
- if (pathMatchedByLongestPrefix)
- return pathMatchedByLongestPrefix;
- }
- if (import_path.default.isAbsolute(specifier)) {
- return (0, import_util.resolveImportSpecifierAfterMapping)(specifier, false);
- }
- }
- function shouldTransform(filename) {
- if (_externalMatcher(filename))
- return false;
- return !(0, import_compilationCache.belongsToNodeModules)(filename);
- }
- let transformData;
- function setTransformData(pluginName, value) {
- transformData.set(pluginName, value);
- }
- function transformHook(originalCode, filename, moduleUrl) {
- const hasPreprocessor = process.env.PW_TEST_SOURCE_TRANSFORM && process.env.PW_TEST_SOURCE_TRANSFORM_SCOPE && process.env.PW_TEST_SOURCE_TRANSFORM_SCOPE.split(pathSeparator).some((f) => filename.startsWith(f));
- const pluginsPrologue = _transformConfig.babelPlugins;
- const pluginsEpilogue = hasPreprocessor ? [[process.env.PW_TEST_SOURCE_TRANSFORM]] : [];
- const hash = calculateHash(originalCode, filename, !!moduleUrl, pluginsPrologue, pluginsEpilogue);
- const { cachedCode, addToCache, serializedCache } = (0, import_compilationCache.getFromCompilationCache)(filename, hash, moduleUrl);
- if (cachedCode !== void 0)
- return { code: cachedCode, serializedCache };
- process.env.BROWSERSLIST_IGNORE_OLD_DATA = "true";
- const { babelTransform } = require("./babelBundle");
- transformData = /* @__PURE__ */ new Map();
- const babelResult = babelTransform(originalCode, filename, !!moduleUrl, pluginsPrologue, pluginsEpilogue);
- if (!babelResult?.code)
- return { code: originalCode, serializedCache };
- const { code, map } = babelResult;
- const added = addToCache(code, map, transformData);
- return { code, serializedCache: added.serializedCache };
- }
- function calculateHash(content, filePath, isModule2, pluginsPrologue, pluginsEpilogue) {
- const hash = import_crypto.default.createHash("sha1").update(isModule2 ? "esm" : "no_esm").update(content).update(filePath).update(version).update(pluginsPrologue.map((p) => p[0]).join(",")).update(pluginsEpilogue.map((p) => p[0]).join(",")).digest("hex");
- return hash;
- }
- async function requireOrImport(file) {
- installTransformIfNeeded();
- const isModule = (0, import_util.fileIsModule)(file);
- const esmImport = () => eval(`import(${JSON.stringify(import_url.default.pathToFileURL(file))})`);
- if (isModule) {
- return await esmImport().finally(async () => {
- await new Promise((resolve) => setTimeout(resolve, 0));
- });
- }
- const result = require(file);
- const depsCollector = (0, import_compilationCache.currentFileDepsCollector)();
- if (depsCollector) {
- const module2 = require.cache[file];
- if (module2)
- collectCJSDependencies(module2, depsCollector);
- }
- return result;
- }
- let transformInstalled = false;
- function installTransformIfNeeded() {
- if (transformInstalled)
- return;
- transformInstalled = true;
- (0, import_compilationCache.installSourceMapSupport)();
- const originalResolveFilename = import_module.default._resolveFilename;
- function resolveFilename(specifier, parent, ...rest) {
- if (parent) {
- const resolved = resolveHook(parent.filename, specifier);
- if (resolved !== void 0)
- specifier = resolved;
- }
- return originalResolveFilename.call(this, specifier, parent, ...rest);
- }
- import_module.default._resolveFilename = resolveFilename;
- (0, import_pirates.addHook)((code, filename) => {
- return transformHook(code, filename).code;
- }, shouldTransform, [".ts", ".tsx", ".js", ".jsx", ".mjs", ".mts", ".cjs", ".cts"]);
- }
- const collectCJSDependencies = (module2, dependencies) => {
- module2.children.forEach((child) => {
- if (!(0, import_compilationCache.belongsToNodeModules)(child.filename) && !dependencies.has(child.filename)) {
- dependencies.add(child.filename);
- collectCJSDependencies(child, dependencies);
- }
- });
- };
- function wrapFunctionWithLocation(func) {
- return (...args) => {
- const oldPrepareStackTrace = Error.prepareStackTrace;
- Error.prepareStackTrace = (error, stackFrames) => {
- const frame = import_utilsBundle.sourceMapSupport.wrapCallSite(stackFrames[1]);
- const fileName = frame.getFileName();
- const file2 = fileName && fileName.startsWith("file://") ? import_url.default.fileURLToPath(fileName) : fileName;
- return {
- file: file2,
- line: frame.getLineNumber(),
- column: frame.getColumnNumber()
- };
- };
- const oldStackTraceLimit = Error.stackTraceLimit;
- Error.stackTraceLimit = 2;
- const obj = {};
- Error.captureStackTrace(obj);
- const location = obj.stack;
- Error.stackTraceLimit = oldStackTraceLimit;
- Error.prepareStackTrace = oldPrepareStackTrace;
- return func(location, ...args);
- };
- }
- function isRelativeSpecifier(specifier) {
- return specifier === "." || specifier === ".." || specifier.startsWith("./") || specifier.startsWith("../");
- }
- // Annotate the CommonJS export names for ESM import in node:
- 0 && (module.exports = {
- requireOrImport,
- resolveHook,
- setSingleTSConfig,
- setTransformConfig,
- setTransformData,
- shouldTransform,
- singleTSConfig,
- transformConfig,
- transformHook,
- wrapFunctionWithLocation
- });
|