create-expo-cljs-app
Version:
Create a react native application with Expo and Shadow-CLJS!
53 lines (44 loc) • 1.2 kB
Flow
/**
* 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
*/
;
import type {
Bundle,
BundleMetadata,
} from 'metro-runtime/src/modules/types.flow';
/**
* Serializes a bundle into a plain JS bundle.
*/
function bundleToString(
bundle: Bundle,
): {|+code: string, +metadata: BundleMetadata|} {
let code = bundle.pre.length > 0 ? bundle.pre + '\n' : '';
const modules = [];
const sortedModules = bundle.modules
.slice()
// The order of the modules needs to be deterministic in order for source
// maps to work properly.
.sort((a: [number, string], b: [number, string]) => a[0] - b[0]);
for (const [id, moduleCode] of sortedModules) {
if (moduleCode.length > 0) {
code += moduleCode + '\n';
}
modules.push([id, moduleCode.length]);
}
if (bundle.post.length > 0) {
code += bundle.post;
} else {
code = code.slice(0, -1);
}
return {
code,
metadata: {pre: bundle.pre.length, post: bundle.post.length, modules},
};
}
module.exports = bundleToString;