PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/metro/src/DeltaBundler
Просмотр файла: Transformer.js
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true,
});
exports.default = void 0;
var _pathUtils = require("../lib/pathUtils");
var _getTransformCacheKey = _interopRequireDefault(
require("./getTransformCacheKey"),
);
var _WorkerFarm = _interopRequireDefault(require("./WorkerFarm"));
var _assert = _interopRequireDefault(require("assert"));
var _crypto = _interopRequireDefault(require("crypto"));
var _fs = _interopRequireDefault(require("fs"));
var _metroCache = require("metro-cache");
var _path = _interopRequireDefault(require("path"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
const debug = require("debug")("Metro:Transformer");
class Transformer {
constructor(config, opts) {
this._config = config;
this._config.watchFolders.forEach(verifyRootExists);
this._cache = new _metroCache.Cache(config.cacheStores);
this._getSha1 = opts.getOrComputeSha1;
const {
getTransformOptions: _getTransformOptions,
transformVariants: _transformVariants,
unstable_workerThreads: _workerThreads,
...transformerConfig
} = this._config.transformer;
const transformerOptions = {
transformerPath: this._config.transformerPath,
transformerConfig,
};
this._workerFarm = new _WorkerFarm.default(config, transformerOptions);
const globalCacheKey = this._cache.isDisabled
? ""
: (0, _getTransformCacheKey.default)({
cacheVersion: this._config.cacheVersion,
projectRoot: this._config.projectRoot,
transformerConfig: transformerOptions,
});
const baseHashBuffer = (0, _metroCache.stableHash)([globalCacheKey]);
this._baseHash = baseHashBuffer.toString("binary");
debug("Base hash: %s", baseHashBuffer.toString("hex"));
}
async transformFile(filePath, transformerOptions, fileBuffer) {
const cache = this._cache;
const {
customTransformOptions,
dev,
experimentalImportSupport,
inlinePlatform,
inlineRequires,
minify,
nonInlinedRequires,
platform,
type,
unstable_transformProfile,
unstable_memoizeInlineRequires,
unstable_nonMemoizedInlineRequires,
...extra
} = transformerOptions;
for (const key in extra) {
if (hasOwnProperty.call(extra, key)) {
throw new Error(
"Extra keys detected: " + Object.keys(extra).join(", "),
);
}
}
const localPath = _path.default.relative(
this._config.projectRoot,
filePath,
);
const partialKey = (0, _metroCache.stableHash)([
this._baseHash,
(0, _pathUtils.normalizePathSeparatorsToPosix)(localPath),
customTransformOptions,
dev,
experimentalImportSupport,
inlinePlatform,
inlineRequires,
minify,
nonInlinedRequires,
platform,
type,
unstable_memoizeInlineRequires,
unstable_nonMemoizedInlineRequires,
unstable_transformProfile,
]);
let sha1;
let content;
if (fileBuffer) {
sha1 = _crypto.default
.createHash("sha1")
.update(fileBuffer)
.digest("hex");
content = fileBuffer;
} else {
const result = await this._getSha1(filePath);
sha1 = result.sha1;
if (result.content) {
content = result.content;
}
}
let fullKey = Buffer.concat([partialKey, Buffer.from(sha1, "hex")]);
let result;
try {
result = await cache.get(fullKey);
} catch (error) {
this._config.reporter.update({
type: "cache_read_error",
error,
});
throw error;
}
const data = result
? {
result,
sha1,
}
: await this._workerFarm.transform(
localPath,
transformerOptions,
content,
);
if (sha1 !== data.sha1) {
fullKey = Buffer.concat([partialKey, Buffer.from(data.sha1, "hex")]);
}
cache.set(fullKey, data.result).catch((error) => {
this._config.reporter.update({
type: "cache_write_error",
error,
});
});
return {
...data.result,
unstable_transformResultKey: fullKey.toString(),
getSource() {
if (fileBuffer) {
return fileBuffer;
}
return _fs.default.readFileSync(filePath);
},
};
}
async end() {
await this._workerFarm.kill();
}
}
exports.default = Transformer;
function verifyRootExists(root) {
(0, _assert.default)(
_fs.default.statSync(root).isDirectory(),
"Root has to be a valid directory",
);
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!