/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
*/
'use strict';
import type {Options as DeltaBundlerOptions} from '../DeltaBundler/types.flow';
import type {
CustomTransformOptions,
MinifierOptions,
} from '../JSTransformer/worker';
import type {TransformInputOptions} from '../lib/transformHelpers';
import type {BabelSourceMap} from '@babel/core';
import type {
MetroSourceMap,
MetroSourceMapSegmentTuple,
} from 'metro-source-map';
type BundleType =
| 'bundle'
| 'delta'
| 'meta'
| 'map'
| 'ram'
| 'cli'
| 'hmr'
| 'todo'
| 'graph';
type MetroSourceMapOrMappings =
| MetroSourceMap
| Array<MetroSourceMapSegmentTuple>;
export type BundleOptions = {
bundleType: BundleType,
customTransformOptions: CustomTransformOptions,
dev: boolean,
entryFile: string,
+excludeSource: boolean,
+hot: boolean,
+inlineSourceMap: boolean,
minify: boolean,
onProgress: ?(doneCont: number, totalCount: number) => mixed,
+platform: ?string,
+runModule: boolean,
sourceMapUrl: ?string,
createModuleIdFactory?: () => (path: string) => number,
};
type SerializerOptions = {|
+sourceMapUrl: ?string,
+runModule: boolean,
+excludeSource: boolean,
+inlineSourceMap: boolean,
|};
// Stricter representation of BundleOptions.
export type SplitBundleOptions = {|
+entryFile: string,
+transformOptions: TransformInputOptions,
+serializerOptions: SerializerOptions,
+onProgress: $PropertyType<DeltaBundlerOptions<>, 'onProgress'>,
|};
export type ModuleGroups = {|
groups: Map<number, Set<number>>,
modulesById: Map<number, ModuleTransportLike>,
modulesInGroups: Set<number>,
|};
export type ModuleTransportLike = {
+code: string,
+id: number,
+map: ?MetroSourceMapOrMappings,
+name?: string,
+sourcePath: string,
};
export type OutputOptions = {
bundleOutput: string,
bundleEncoding?: 'utf8' | 'utf16le' | 'ascii',
dev?: boolean,
platform: string,
sourcemapOutput?: string,
sourcemapSourcesRoot?: string,
sourcemapUseAbsolutePath?: boolean,
};
export type RequestOptions = {|
entryFile: string,
inlineSourceMap?: boolean,
sourceMapUrl?: string,
dev?: boolean,
minify: boolean,
platform: string,
createModuleIdFactory?: () => (path: string) => number,
onProgress?: (transformedFileCount: number, totalFileCount: number) => void,
|};
export type {MinifierOptions};
export type MinifierResult = {
code: string,
map?: BabelSourceMap,
};
export type MetroMinifier = MinifierOptions => MinifierResult;