PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/metro/src/shared/output/RamBundle
Просмотр файла: as-assets.js.flow
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
* @oncall react_native
*/
import type {RamBundleInfo} from '../../../DeltaBundler/Serializers/getRamBundleInfo';
import type {ModuleTransportLike} from '../../../shared/types';
import type {OutputOptions} from '../../types';
import relativizeSourceMapInline from '../../../lib/relativizeSourceMap';
import writeFile from '../writeFile';
import buildSourcemapWithMetadata from './buildSourcemapWithMetadata';
import MAGIC_RAM_BUNDLE_NUMBER from './magic-number';
import {joinModules} from './util';
import writeSourceMap from './write-sourcemap';
import {promises as fsPromises} from 'fs';
import path from 'path';
// must not start with a dot, as that won't go into the apk
const MAGIC_RAM_BUNDLE_FILENAME = 'UNBUNDLE';
const MODULES_DIR = 'js-modules';
/**
* Saves all JS modules of an app as single files
* The startup code (prelude, polyfills etc.) are written to the file
* designated by the `bundleOuput` option.
* All other modules go into a 'js-modules' folder that in the same parent
* directory as the startup file.
*/
export default function saveAsAssets(
bundle: RamBundleInfo,
options: OutputOptions,
log: (...args: Array<string>) => void,
): Promise<mixed> {
const {
bundleOutput,
bundleEncoding: encoding,
sourcemapOutput,
sourcemapSourcesRoot,
} = options;
log('start');
const {startupModules, lazyModules} = bundle;
log('finish');
const startupCode = joinModules(startupModules);
log('Writing bundle output to:', bundleOutput);
const modulesDir = path.join(path.dirname(bundleOutput), MODULES_DIR);
const writeUnbundle = createDir(modulesDir).then(
// create the modules directory first
() =>
Promise.all([
writeModules(lazyModules, modulesDir, encoding),
writeFile(bundleOutput, startupCode, encoding),
writeMagicFlagFile(modulesDir),
]),
);
// $FlowFixMe[unused-promise]
writeUnbundle.then(() => log('Done writing unbundle output'));
if (sourcemapOutput) {
const sourceMap = buildSourcemapWithMetadata({
fixWrapperOffset: true,
lazyModules: lazyModules.concat<
ModuleTransportLike,
ModuleTransportLike,
>(),
moduleGroups: null,
startupModules: startupModules.concat<
ModuleTransportLike,
ModuleTransportLike,
>(),
});
if (sourcemapSourcesRoot != null) {
relativizeSourceMapInline(sourceMap, sourcemapSourcesRoot);
}
const wroteSourceMap = writeSourceMap(
sourcemapOutput,
JSON.stringify(sourceMap),
log,
);
return Promise.all([writeUnbundle, wroteSourceMap]);
} else {
return writeUnbundle;
}
}
function createDir(dirName: string): Promise<void> {
return fsPromises.mkdir(dirName, {recursive: true});
}
function writeModuleFile(
module: ModuleTransportLike,
modulesDir: string,
encoding: void | 'ascii' | 'utf16le' | 'utf8',
): Promise<mixed> {
const {code, id} = module;
return writeFile(path.join(modulesDir, id + '.js'), code, encoding);
}
function writeModules(
modules: $ReadOnlyArray<ModuleTransportLike>,
modulesDir: string,
encoding: void | 'ascii' | 'utf16le' | 'utf8',
): Promise<Array<mixed>> {
const writeFiles = modules.map(
(module: ModuleTransportLike): Promise<mixed> =>
writeModuleFile(module, modulesDir, encoding),
);
return Promise.all(writeFiles);
}
function writeMagicFlagFile(outputDir: string): Promise<mixed> {
const buffer = Buffer.alloc(4);
buffer.writeUInt32LE(MAGIC_RAM_BUNDLE_NUMBER, 0);
return writeFile(path.join(outputDir, MAGIC_RAM_BUNDLE_FILENAME), buffer);
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!