@module-federation/metro 0.0.0-next-20250827124348
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/babel-plugin/index.js +115 -0
- package/babel-plugin/patch-initialize-core.js +61 -0
- package/babel-plugin/patch-require.js +174 -0
- package/bootstrap/index.d.ts +1 -0
- package/bootstrap/index.js +1 -0
- package/dist/babel/transformer.d.ts +2 -0
- package/dist/babel/transformer.js +15 -0
- package/dist/commands/bundle-host/index.d.ts +13 -0
- package/dist/commands/bundle-host/index.js +95 -0
- package/dist/commands/bundle-host/index.mjs +69 -0
- package/dist/commands/bundle-host/options.d.ts +5 -0
- package/dist/commands/bundle-host/options.js +39 -0
- package/dist/commands/bundle-host/options.mjs +7 -0
- package/dist/commands/bundle-host/types.d.ts +22 -0
- package/dist/commands/bundle-host/types.js +18 -0
- package/dist/commands/bundle-host/types.mjs +2 -0
- package/dist/commands/bundle-remote/index.d.ts +12 -0
- package/dist/commands/bundle-remote/index.js +226 -0
- package/dist/commands/bundle-remote/index.mjs +200 -0
- package/dist/commands/bundle-remote/options.d.ts +32 -0
- package/dist/commands/bundle-remote/options.js +109 -0
- package/dist/commands/bundle-remote/options.mjs +67 -0
- package/dist/commands/bundle-remote/types.d.ts +16 -0
- package/dist/commands/bundle-remote/types.js +18 -0
- package/dist/commands/bundle-remote/types.mjs +2 -0
- package/dist/commands/index.d.ts +48 -0
- package/dist/commands/index.js +72 -0
- package/dist/commands/index.mjs +13 -0
- package/dist/commands/types.d.ts +14 -0
- package/dist/commands/types.js +18 -0
- package/dist/commands/types.mjs +2 -0
- package/dist/commands/utils/create-module-path-remapper.d.ts +7 -0
- package/dist/commands/utils/create-module-path-remapper.js +64 -0
- package/dist/commands/utils/create-module-path-remapper.mjs +32 -0
- package/dist/commands/utils/create-resolver.d.ts +20 -0
- package/dist/commands/utils/create-resolver.js +57 -0
- package/dist/commands/utils/create-resolver.mjs +25 -0
- package/dist/commands/utils/get-community-plugin.d.ts +29 -0
- package/dist/commands/utils/get-community-plugin.js +50 -0
- package/dist/commands/utils/get-community-plugin.mjs +18 -0
- package/dist/commands/utils/load-metro-config.d.ts +3 -0
- package/dist/commands/utils/load-metro-config.js +84 -0
- package/dist/commands/utils/load-metro-config.mjs +43 -0
- package/dist/commands/utils/save-bundle-and-map.d.ts +5 -0
- package/dist/commands/utils/save-bundle-and-map.js +77 -0
- package/dist/commands/utils/save-bundle-and-map.mjs +57 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +40 -0
- package/dist/index.mjs +5 -0
- package/dist/modules/HMRClient.ts +31 -0
- package/dist/modules/HMRClientShim.ts +1 -0
- package/dist/modules/asyncRequire.ts +134 -0
- package/dist/modules/asyncStartup.tsx +38 -0
- package/dist/modules/getDevServer.ts +15 -0
- package/dist/modules/metroCorePlugin.ts +83 -0
- package/dist/plugin/babel-transformer.d.ts +11 -0
- package/dist/plugin/babel-transformer.js +68 -0
- package/dist/plugin/babel-transformer.mjs +25 -0
- package/dist/plugin/constants.d.ts +9 -0
- package/dist/plugin/constants.js +68 -0
- package/dist/plugin/constants.mjs +12 -0
- package/dist/plugin/generators.d.ts +13 -0
- package/dist/plugin/generators.js +157 -0
- package/dist/plugin/generators.mjs +99 -0
- package/dist/plugin/helpers.d.ts +7 -0
- package/dist/plugin/helpers.js +119 -0
- package/dist/plugin/helpers.mjs +58 -0
- package/dist/plugin/index.d.ts +9 -0
- package/dist/plugin/index.js +167 -0
- package/dist/plugin/index.mjs +124 -0
- package/dist/plugin/manifest.d.ts +3 -0
- package/dist/plugin/manifest.js +146 -0
- package/dist/plugin/manifest.mjs +100 -0
- package/dist/plugin/normalize-extra-options.d.ts +8 -0
- package/dist/plugin/normalize-extra-options.js +46 -0
- package/dist/plugin/normalize-extra-options.mjs +14 -0
- package/dist/plugin/normalize-options.d.ts +7 -0
- package/dist/plugin/normalize-options.js +89 -0
- package/dist/plugin/normalize-options.mjs +46 -0
- package/dist/plugin/resolver.d.ts +25 -0
- package/dist/plugin/resolver.js +199 -0
- package/dist/plugin/resolver.mjs +160 -0
- package/dist/plugin/rewrite-request.d.ts +10 -0
- package/dist/plugin/rewrite-request.js +76 -0
- package/dist/plugin/rewrite-request.mjs +34 -0
- package/dist/plugin/serializer.d.ts +5 -0
- package/dist/plugin/serializer.js +171 -0
- package/dist/plugin/serializer.mjs +151 -0
- package/dist/plugin/validate-options.d.ts +2 -0
- package/dist/plugin/validate-options.js +61 -0
- package/dist/plugin/validate-options.mjs +29 -0
- package/dist/runtime/host-entry.d.ts +1 -0
- package/dist/runtime/host-entry.js +3 -0
- package/dist/runtime/init-host.d.ts +1 -0
- package/dist/runtime/init-host.js +31 -0
- package/dist/runtime/remote-entry.d.ts +1 -0
- package/dist/runtime/remote-entry.js +57 -0
- package/dist/runtime/remote-hmr.d.ts +1 -0
- package/dist/runtime/remote-hmr.js +19 -0
- package/dist/runtime/remote-module-registry.d.ts +7 -0
- package/dist/runtime/remote-module-registry.js +57 -0
- package/dist/runtime/remote-module.d.ts +1 -0
- package/dist/runtime/remote-module.js +2 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.js +18 -0
- package/dist/types.mjs +2 -0
- package/dist/utils/errors.d.ts +8 -0
- package/dist/utils/errors.js +50 -0
- package/dist/utils/errors.mjs +15 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +43 -0
- package/dist/utils/index.mjs +5 -0
- package/dist/utils/vm-manager.d.ts +21 -0
- package/dist/utils/vm-manager.js +116 -0
- package/dist/utils/vm-manager.mjs +73 -0
- package/package.json +91 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.r = (exports1)=>{
|
|
5
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
6
|
+
value: 'Module'
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
9
|
+
value: true
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
})();
|
|
13
|
+
var __webpack_exports__ = {};
|
|
14
|
+
__webpack_require__.r(__webpack_exports__);
|
|
15
|
+
for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
16
|
+
Object.defineProperty(exports, '__esModule', {
|
|
17
|
+
value: true
|
|
18
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ModuleFederationConfigNormalized } from '../../types';
|
|
2
|
+
import type { Config } from '../types';
|
|
3
|
+
import type { BundleFederatedRemoteArgs } from './types';
|
|
4
|
+
declare global {
|
|
5
|
+
var __METRO_FEDERATION_CONFIG: ModuleFederationConfigNormalized;
|
|
6
|
+
var __METRO_FEDERATION_ORIGINAL_ENTRY_PATH: string | undefined;
|
|
7
|
+
var __METRO_FEDERATION_REMOTE_ENTRY_PATH: string | undefined;
|
|
8
|
+
var __METRO_FEDERATION_MANIFEST_PATH: string | undefined;
|
|
9
|
+
}
|
|
10
|
+
declare function bundleFederatedRemote(_argv: Array<string>, cfg: Config, args: BundleFederatedRemoteArgs): Promise<void>;
|
|
11
|
+
export default bundleFederatedRemote;
|
|
12
|
+
export { default as bundleFederatedRemoteOptions } from './options';
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
14
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: definition[key]
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
})();
|
|
20
|
+
(()=>{
|
|
21
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
22
|
+
})();
|
|
23
|
+
(()=>{
|
|
24
|
+
__webpack_require__.r = (exports1)=>{
|
|
25
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
26
|
+
value: 'Module'
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
29
|
+
value: true
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
var __webpack_exports__ = {};
|
|
34
|
+
__webpack_require__.r(__webpack_exports__);
|
|
35
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
bundleFederatedRemoteOptions: ()=>external_options_js_default(),
|
|
37
|
+
default: ()=>bundle_remote
|
|
38
|
+
});
|
|
39
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
40
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
41
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
42
|
+
const external_node_url_namespaceObject = require("node:url");
|
|
43
|
+
const external_node_util_namespaceObject = require("node:util");
|
|
44
|
+
var external_node_util_default = /*#__PURE__*/ __webpack_require__.n(external_node_util_namespaceObject);
|
|
45
|
+
const external_metro_namespaceObject = require("metro");
|
|
46
|
+
const Server_namespaceObject = require("metro/src/Server");
|
|
47
|
+
var Server_default = /*#__PURE__*/ __webpack_require__.n(Server_namespaceObject);
|
|
48
|
+
const errors_js_namespaceObject = require("../../utils/errors.js");
|
|
49
|
+
const create_module_path_remapper_js_namespaceObject = require("../utils/create-module-path-remapper.js");
|
|
50
|
+
const create_resolver_js_namespaceObject = require("../utils/create-resolver.js");
|
|
51
|
+
const load_metro_config_js_namespaceObject = require("../utils/load-metro-config.js");
|
|
52
|
+
var load_metro_config_js_default = /*#__PURE__*/ __webpack_require__.n(load_metro_config_js_namespaceObject);
|
|
53
|
+
const save_bundle_and_map_js_namespaceObject = require("../utils/save-bundle-and-map.js");
|
|
54
|
+
const external_options_js_namespaceObject = require("./options.js");
|
|
55
|
+
var external_options_js_default = /*#__PURE__*/ __webpack_require__.n(external_options_js_namespaceObject);
|
|
56
|
+
const DEFAULT_OUTPUT = 'dist';
|
|
57
|
+
async function buildBundle(server, requestOpts) {
|
|
58
|
+
const bundle = await server.build({
|
|
59
|
+
...Server_default().DEFAULT_BUNDLE_OPTIONS,
|
|
60
|
+
...requestOpts
|
|
61
|
+
});
|
|
62
|
+
return bundle;
|
|
63
|
+
}
|
|
64
|
+
function getRequestOpts(args, opts) {
|
|
65
|
+
return {
|
|
66
|
+
dev: args.dev,
|
|
67
|
+
minify: void 0 !== args.minify ? args.minify : !args.dev,
|
|
68
|
+
platform: args.platform,
|
|
69
|
+
entryFile: opts.entryFile,
|
|
70
|
+
sourceUrl: opts.sourceUrl,
|
|
71
|
+
sourceMapUrl: opts.sourceMapUrl,
|
|
72
|
+
lazy: opts.isContainerModule,
|
|
73
|
+
runModule: opts.isContainerModule,
|
|
74
|
+
modulesOnly: !opts.isContainerModule
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function getSaveBundleOpts(args, opts) {
|
|
78
|
+
return {
|
|
79
|
+
indexedRamBundle: false,
|
|
80
|
+
bundleEncoding: args.bundleEncoding,
|
|
81
|
+
dev: args.dev,
|
|
82
|
+
platform: args.platform,
|
|
83
|
+
sourcemapSourcesRoot: args.sourcemapSourcesRoot,
|
|
84
|
+
sourcemapUseAbsolutePath: args.sourcemapUseAbsolutePath,
|
|
85
|
+
bundleOutput: opts.bundleOutput,
|
|
86
|
+
sourcemapOutput: opts.sourcemapOutput
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
async function bundleFederatedRemote(_argv, cfg, args) {
|
|
90
|
+
const rawConfig = await load_metro_config_js_default()(cfg, {
|
|
91
|
+
maxWorkers: args.maxWorkers,
|
|
92
|
+
resetCache: args.resetCache,
|
|
93
|
+
config: args.config
|
|
94
|
+
});
|
|
95
|
+
const logger = cfg.logger ?? console;
|
|
96
|
+
const federationConfig = global.__METRO_FEDERATION_CONFIG;
|
|
97
|
+
if (!federationConfig) {
|
|
98
|
+
logger.error(`${external_node_util_default().styleText('red', 'error')} Module Federation configuration is missing.`);
|
|
99
|
+
logger.info("Import the plugin 'withModuleFederation' from '@module-federation/metro' package and wrap your final Metro config with it.");
|
|
100
|
+
throw new errors_js_namespaceObject.CLIError('Bundling failed');
|
|
101
|
+
}
|
|
102
|
+
const containerEntryFilepath = global.__METRO_FEDERATION_REMOTE_ENTRY_PATH;
|
|
103
|
+
if (!containerEntryFilepath) {
|
|
104
|
+
logger.error(`${external_node_util_default().styleText('red', 'error')} Cannot determine the container entry file path.`);
|
|
105
|
+
logger.info("To bundle a container, you need to expose at least one module in your Module Federation configuration.");
|
|
106
|
+
throw new errors_js_namespaceObject.CLIError('Bundling failed');
|
|
107
|
+
}
|
|
108
|
+
const manifestFilepath = global.__METRO_FEDERATION_MANIFEST_PATH;
|
|
109
|
+
if (!manifestFilepath) {
|
|
110
|
+
logger.error(`${external_node_util_default().styleText('red', 'error')} Cannot determine the manifest file path.`);
|
|
111
|
+
throw new errors_js_namespaceObject.CLIError('Bundling failed');
|
|
112
|
+
}
|
|
113
|
+
if (-1 === rawConfig.resolver.platforms.indexOf(args.platform)) {
|
|
114
|
+
logger.error(`${external_node_util_default().styleText('red', 'error')}: Invalid platform ${args.platform ? `"${external_node_util_default().styleText('bold', args.platform)}" ` : ''}selected.`);
|
|
115
|
+
logger.info(`Available platforms are: ${rawConfig.resolver.platforms.map((x)=>`"${external_node_util_default().styleText('bold', x)}"`).join(', ')}. If you are trying to bundle for an out-of-tree platform, it may not be installed.`);
|
|
116
|
+
throw new errors_js_namespaceObject.CLIError('Bundling failed');
|
|
117
|
+
}
|
|
118
|
+
process.env.NODE_ENV = args.dev ? 'development' : 'production';
|
|
119
|
+
const modulePathRemapper = (0, create_module_path_remapper_js_namespaceObject.createModulePathRemapper)();
|
|
120
|
+
const config = (0, external_metro_namespaceObject.mergeConfig)(rawConfig, {
|
|
121
|
+
resolver: {
|
|
122
|
+
resolveRequest: (context, moduleName, platform)=>{
|
|
123
|
+
const originalResolveRequest = rawConfig.resolver.resolveRequest;
|
|
124
|
+
const res = originalResolveRequest(context, moduleName, platform);
|
|
125
|
+
return modulePathRemapper.remap(res);
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
serializer: {
|
|
129
|
+
createModuleIdFactory: ()=>{
|
|
130
|
+
const factory = rawConfig.serializer.createModuleIdFactory();
|
|
131
|
+
return (path)=>factory(modulePathRemapper.reverse(path));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
const server = new (Server_default())(config);
|
|
136
|
+
config.server.enhanceMiddleware(server.processRequest, server);
|
|
137
|
+
const resolver = await (0, create_resolver_js_namespaceObject.createResolver)(server, args.platform);
|
|
138
|
+
const outputDir = args.output ? external_node_path_default().resolve(external_node_path_default().join(args.output, args.platform)) : external_node_path_default().resolve(config.projectRoot, external_node_path_default().join(DEFAULT_OUTPUT, args.platform));
|
|
139
|
+
const containerModule = {
|
|
140
|
+
[federationConfig.filename]: {
|
|
141
|
+
moduleInputFilepath: containerEntryFilepath,
|
|
142
|
+
moduleOutputDir: outputDir,
|
|
143
|
+
isContainerModule: true
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
resolver.resolve({
|
|
147
|
+
from: config.projectRoot,
|
|
148
|
+
to: `./${external_node_path_default().relative(config.projectRoot, containerEntryFilepath)}`
|
|
149
|
+
});
|
|
150
|
+
const exposedModules = Object.entries(federationConfig.exposes).map(([moduleName, moduleFilepath])=>[
|
|
151
|
+
moduleName.slice(2),
|
|
152
|
+
moduleFilepath
|
|
153
|
+
]).reduce((acc, [moduleName, moduleInputFilepath])=>{
|
|
154
|
+
acc[moduleName] = {
|
|
155
|
+
moduleInputFilepath: external_node_path_default().resolve(config.projectRoot, moduleInputFilepath),
|
|
156
|
+
moduleOutputDir: external_node_path_default().resolve(outputDir, 'exposed'),
|
|
157
|
+
isContainerModule: false
|
|
158
|
+
};
|
|
159
|
+
return acc;
|
|
160
|
+
}, {});
|
|
161
|
+
const sharedModules = Object.entries(federationConfig.shared).filter(([, sharedConfig])=>!sharedConfig.eager && false !== sharedConfig.import).reduce((acc, [moduleName])=>{
|
|
162
|
+
const inputFilepath = resolver.resolve({
|
|
163
|
+
from: containerEntryFilepath,
|
|
164
|
+
to: moduleName
|
|
165
|
+
});
|
|
166
|
+
acc[moduleName] = {
|
|
167
|
+
moduleInputFilepath: inputFilepath,
|
|
168
|
+
moduleOutputDir: external_node_path_default().resolve(outputDir, 'shared'),
|
|
169
|
+
isContainerModule: false
|
|
170
|
+
};
|
|
171
|
+
return acc;
|
|
172
|
+
}, {});
|
|
173
|
+
const requests = Object.entries({
|
|
174
|
+
...containerModule,
|
|
175
|
+
...exposedModules,
|
|
176
|
+
...sharedModules
|
|
177
|
+
}).map(([moduleName, { moduleInputFilepath, moduleOutputDir, isContainerModule = false }])=>{
|
|
178
|
+
const moduleBundleName = isContainerModule ? moduleName : `${moduleName}.bundle`;
|
|
179
|
+
const moduleBundleFilepath = external_node_path_default().resolve(moduleOutputDir, moduleBundleName);
|
|
180
|
+
const moduleBundleUrl = (0, external_node_url_namespaceObject.pathToFileURL)('/' + external_node_path_default().relative(outputDir, moduleBundleFilepath)).href;
|
|
181
|
+
const moduleSourceMapName = `${moduleBundleName}.map`;
|
|
182
|
+
const moduleSourceMapFilepath = external_node_path_default().resolve(moduleOutputDir, moduleSourceMapName);
|
|
183
|
+
const moduleSourceMapUrl = external_node_path_default().relative(outputDir, moduleSourceMapFilepath);
|
|
184
|
+
if (!isContainerModule) modulePathRemapper.addMapping(moduleInputFilepath, external_node_path_default().relative(outputDir, moduleBundleFilepath));
|
|
185
|
+
return {
|
|
186
|
+
targetDir: external_node_path_default().dirname(moduleBundleFilepath),
|
|
187
|
+
requestOpts: getRequestOpts(args, {
|
|
188
|
+
isContainerModule,
|
|
189
|
+
entryFile: moduleInputFilepath,
|
|
190
|
+
sourceUrl: moduleBundleUrl,
|
|
191
|
+
sourceMapUrl: moduleSourceMapUrl
|
|
192
|
+
}),
|
|
193
|
+
saveBundleOpts: getSaveBundleOpts(args, {
|
|
194
|
+
bundleOutput: moduleBundleFilepath,
|
|
195
|
+
sourcemapOutput: moduleSourceMapFilepath
|
|
196
|
+
})
|
|
197
|
+
};
|
|
198
|
+
});
|
|
199
|
+
try {
|
|
200
|
+
logger.info(`${external_node_util_default().styleText('blue', 'Processing remote container and exposed modules')}`);
|
|
201
|
+
for (const { requestOpts, saveBundleOpts, targetDir } of requests){
|
|
202
|
+
await external_node_fs_namespaceObject.promises.mkdir(targetDir, {
|
|
203
|
+
recursive: true,
|
|
204
|
+
mode: 493
|
|
205
|
+
});
|
|
206
|
+
const bundle = await buildBundle(server, requestOpts);
|
|
207
|
+
await (0, save_bundle_and_map_js_namespaceObject.saveBundleAndMap)(bundle, saveBundleOpts, logger.info);
|
|
208
|
+
}
|
|
209
|
+
logger.info(`${external_node_util_default().styleText('blue', 'Processing manifest')}`);
|
|
210
|
+
const manifestOutputFilepath = external_node_path_default().resolve(outputDir, 'mf-manifest.json');
|
|
211
|
+
await external_node_fs_namespaceObject.promises.copyFile(manifestFilepath, manifestOutputFilepath);
|
|
212
|
+
logger.info(`Done writing MF Manifest to:\n${external_node_util_default().styleText('dim', manifestOutputFilepath)}`);
|
|
213
|
+
} finally{
|
|
214
|
+
await server.end();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const bundle_remote = bundleFederatedRemote;
|
|
218
|
+
exports.bundleFederatedRemoteOptions = __webpack_exports__.bundleFederatedRemoteOptions;
|
|
219
|
+
exports["default"] = __webpack_exports__["default"];
|
|
220
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
221
|
+
"bundleFederatedRemoteOptions",
|
|
222
|
+
"default"
|
|
223
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
224
|
+
Object.defineProperty(exports, '__esModule', {
|
|
225
|
+
value: true
|
|
226
|
+
});
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import 'module';
|
|
2
|
+
/*#__PURE__*/ import.meta.url;
|
|
3
|
+
import { promises } from "node:fs";
|
|
4
|
+
import node_path from "node:path";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
6
|
+
import node_util from "node:util";
|
|
7
|
+
import { CLIError } from "../../utils/errors.mjs";
|
|
8
|
+
import { createModulePathRemapper } from "../utils/create-module-path-remapper.mjs";
|
|
9
|
+
import { createResolver } from "../utils/create-resolver.mjs";
|
|
10
|
+
import load_metro_config from "../utils/load-metro-config.mjs";
|
|
11
|
+
import { saveBundleAndMap } from "../utils/save-bundle-and-map.mjs";
|
|
12
|
+
import options from "./options.mjs";
|
|
13
|
+
import { createRequire as __WEBPACK_EXTERNAL_createRequire } from "node:module";
|
|
14
|
+
var __webpack_require__ = {};
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.n = (module)=>{
|
|
17
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
18
|
+
__webpack_require__.d(getter, {
|
|
19
|
+
a: getter
|
|
20
|
+
});
|
|
21
|
+
return getter;
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
(()=>{
|
|
25
|
+
__webpack_require__.d = (exports, definition)=>{
|
|
26
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
get: definition[key]
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
})();
|
|
32
|
+
(()=>{
|
|
33
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
34
|
+
})();
|
|
35
|
+
const external_metro_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("metro");
|
|
36
|
+
const Server_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("metro/src/Server");
|
|
37
|
+
var Server_default = /*#__PURE__*/ __webpack_require__.n(Server_namespaceObject);
|
|
38
|
+
const DEFAULT_OUTPUT = 'dist';
|
|
39
|
+
async function buildBundle(server, requestOpts) {
|
|
40
|
+
const bundle = await server.build({
|
|
41
|
+
...Server_default().DEFAULT_BUNDLE_OPTIONS,
|
|
42
|
+
...requestOpts
|
|
43
|
+
});
|
|
44
|
+
return bundle;
|
|
45
|
+
}
|
|
46
|
+
function getRequestOpts(args, opts) {
|
|
47
|
+
return {
|
|
48
|
+
dev: args.dev,
|
|
49
|
+
minify: void 0 !== args.minify ? args.minify : !args.dev,
|
|
50
|
+
platform: args.platform,
|
|
51
|
+
entryFile: opts.entryFile,
|
|
52
|
+
sourceUrl: opts.sourceUrl,
|
|
53
|
+
sourceMapUrl: opts.sourceMapUrl,
|
|
54
|
+
lazy: opts.isContainerModule,
|
|
55
|
+
runModule: opts.isContainerModule,
|
|
56
|
+
modulesOnly: !opts.isContainerModule
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function getSaveBundleOpts(args, opts) {
|
|
60
|
+
return {
|
|
61
|
+
indexedRamBundle: false,
|
|
62
|
+
bundleEncoding: args.bundleEncoding,
|
|
63
|
+
dev: args.dev,
|
|
64
|
+
platform: args.platform,
|
|
65
|
+
sourcemapSourcesRoot: args.sourcemapSourcesRoot,
|
|
66
|
+
sourcemapUseAbsolutePath: args.sourcemapUseAbsolutePath,
|
|
67
|
+
bundleOutput: opts.bundleOutput,
|
|
68
|
+
sourcemapOutput: opts.sourcemapOutput
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async function bundleFederatedRemote(_argv, cfg, args) {
|
|
72
|
+
const rawConfig = await load_metro_config(cfg, {
|
|
73
|
+
maxWorkers: args.maxWorkers,
|
|
74
|
+
resetCache: args.resetCache,
|
|
75
|
+
config: args.config
|
|
76
|
+
});
|
|
77
|
+
const logger = cfg.logger ?? console;
|
|
78
|
+
const federationConfig = global.__METRO_FEDERATION_CONFIG;
|
|
79
|
+
if (!federationConfig) {
|
|
80
|
+
logger.error(`${node_util.styleText('red', 'error')} Module Federation configuration is missing.`);
|
|
81
|
+
logger.info("Import the plugin 'withModuleFederation' from '@module-federation/metro' package and wrap your final Metro config with it.");
|
|
82
|
+
throw new CLIError('Bundling failed');
|
|
83
|
+
}
|
|
84
|
+
const containerEntryFilepath = global.__METRO_FEDERATION_REMOTE_ENTRY_PATH;
|
|
85
|
+
if (!containerEntryFilepath) {
|
|
86
|
+
logger.error(`${node_util.styleText('red', 'error')} Cannot determine the container entry file path.`);
|
|
87
|
+
logger.info("To bundle a container, you need to expose at least one module in your Module Federation configuration.");
|
|
88
|
+
throw new CLIError('Bundling failed');
|
|
89
|
+
}
|
|
90
|
+
const manifestFilepath = global.__METRO_FEDERATION_MANIFEST_PATH;
|
|
91
|
+
if (!manifestFilepath) {
|
|
92
|
+
logger.error(`${node_util.styleText('red', 'error')} Cannot determine the manifest file path.`);
|
|
93
|
+
throw new CLIError('Bundling failed');
|
|
94
|
+
}
|
|
95
|
+
if (-1 === rawConfig.resolver.platforms.indexOf(args.platform)) {
|
|
96
|
+
logger.error(`${node_util.styleText('red', 'error')}: Invalid platform ${args.platform ? `"${node_util.styleText('bold', args.platform)}" ` : ''}selected.`);
|
|
97
|
+
logger.info(`Available platforms are: ${rawConfig.resolver.platforms.map((x)=>`"${node_util.styleText('bold', x)}"`).join(', ')}. If you are trying to bundle for an out-of-tree platform, it may not be installed.`);
|
|
98
|
+
throw new CLIError('Bundling failed');
|
|
99
|
+
}
|
|
100
|
+
process.env.NODE_ENV = args.dev ? 'development' : 'production';
|
|
101
|
+
const modulePathRemapper = createModulePathRemapper();
|
|
102
|
+
const config = (0, external_metro_namespaceObject.mergeConfig)(rawConfig, {
|
|
103
|
+
resolver: {
|
|
104
|
+
resolveRequest: (context, moduleName, platform)=>{
|
|
105
|
+
const originalResolveRequest = rawConfig.resolver.resolveRequest;
|
|
106
|
+
const res = originalResolveRequest(context, moduleName, platform);
|
|
107
|
+
return modulePathRemapper.remap(res);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
serializer: {
|
|
111
|
+
createModuleIdFactory: ()=>{
|
|
112
|
+
const factory = rawConfig.serializer.createModuleIdFactory();
|
|
113
|
+
return (path)=>factory(modulePathRemapper.reverse(path));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
const server = new (Server_default())(config);
|
|
118
|
+
config.server.enhanceMiddleware(server.processRequest, server);
|
|
119
|
+
const resolver = await createResolver(server, args.platform);
|
|
120
|
+
const outputDir = args.output ? node_path.resolve(node_path.join(args.output, args.platform)) : node_path.resolve(config.projectRoot, node_path.join(DEFAULT_OUTPUT, args.platform));
|
|
121
|
+
const containerModule = {
|
|
122
|
+
[federationConfig.filename]: {
|
|
123
|
+
moduleInputFilepath: containerEntryFilepath,
|
|
124
|
+
moduleOutputDir: outputDir,
|
|
125
|
+
isContainerModule: true
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
resolver.resolve({
|
|
129
|
+
from: config.projectRoot,
|
|
130
|
+
to: `./${node_path.relative(config.projectRoot, containerEntryFilepath)}`
|
|
131
|
+
});
|
|
132
|
+
const exposedModules = Object.entries(federationConfig.exposes).map(([moduleName, moduleFilepath])=>[
|
|
133
|
+
moduleName.slice(2),
|
|
134
|
+
moduleFilepath
|
|
135
|
+
]).reduce((acc, [moduleName, moduleInputFilepath])=>{
|
|
136
|
+
acc[moduleName] = {
|
|
137
|
+
moduleInputFilepath: node_path.resolve(config.projectRoot, moduleInputFilepath),
|
|
138
|
+
moduleOutputDir: node_path.resolve(outputDir, 'exposed'),
|
|
139
|
+
isContainerModule: false
|
|
140
|
+
};
|
|
141
|
+
return acc;
|
|
142
|
+
}, {});
|
|
143
|
+
const sharedModules = Object.entries(federationConfig.shared).filter(([, sharedConfig])=>!sharedConfig.eager && false !== sharedConfig.import).reduce((acc, [moduleName])=>{
|
|
144
|
+
const inputFilepath = resolver.resolve({
|
|
145
|
+
from: containerEntryFilepath,
|
|
146
|
+
to: moduleName
|
|
147
|
+
});
|
|
148
|
+
acc[moduleName] = {
|
|
149
|
+
moduleInputFilepath: inputFilepath,
|
|
150
|
+
moduleOutputDir: node_path.resolve(outputDir, 'shared'),
|
|
151
|
+
isContainerModule: false
|
|
152
|
+
};
|
|
153
|
+
return acc;
|
|
154
|
+
}, {});
|
|
155
|
+
const requests = Object.entries({
|
|
156
|
+
...containerModule,
|
|
157
|
+
...exposedModules,
|
|
158
|
+
...sharedModules
|
|
159
|
+
}).map(([moduleName, { moduleInputFilepath, moduleOutputDir, isContainerModule = false }])=>{
|
|
160
|
+
const moduleBundleName = isContainerModule ? moduleName : `${moduleName}.bundle`;
|
|
161
|
+
const moduleBundleFilepath = node_path.resolve(moduleOutputDir, moduleBundleName);
|
|
162
|
+
const moduleBundleUrl = pathToFileURL('/' + node_path.relative(outputDir, moduleBundleFilepath)).href;
|
|
163
|
+
const moduleSourceMapName = `${moduleBundleName}.map`;
|
|
164
|
+
const moduleSourceMapFilepath = node_path.resolve(moduleOutputDir, moduleSourceMapName);
|
|
165
|
+
const moduleSourceMapUrl = node_path.relative(outputDir, moduleSourceMapFilepath);
|
|
166
|
+
if (!isContainerModule) modulePathRemapper.addMapping(moduleInputFilepath, node_path.relative(outputDir, moduleBundleFilepath));
|
|
167
|
+
return {
|
|
168
|
+
targetDir: node_path.dirname(moduleBundleFilepath),
|
|
169
|
+
requestOpts: getRequestOpts(args, {
|
|
170
|
+
isContainerModule,
|
|
171
|
+
entryFile: moduleInputFilepath,
|
|
172
|
+
sourceUrl: moduleBundleUrl,
|
|
173
|
+
sourceMapUrl: moduleSourceMapUrl
|
|
174
|
+
}),
|
|
175
|
+
saveBundleOpts: getSaveBundleOpts(args, {
|
|
176
|
+
bundleOutput: moduleBundleFilepath,
|
|
177
|
+
sourcemapOutput: moduleSourceMapFilepath
|
|
178
|
+
})
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
try {
|
|
182
|
+
logger.info(`${node_util.styleText('blue', 'Processing remote container and exposed modules')}`);
|
|
183
|
+
for (const { requestOpts, saveBundleOpts, targetDir } of requests){
|
|
184
|
+
await promises.mkdir(targetDir, {
|
|
185
|
+
recursive: true,
|
|
186
|
+
mode: 493
|
|
187
|
+
});
|
|
188
|
+
const bundle = await buildBundle(server, requestOpts);
|
|
189
|
+
await saveBundleAndMap(bundle, saveBundleOpts, logger.info);
|
|
190
|
+
}
|
|
191
|
+
logger.info(`${node_util.styleText('blue', 'Processing manifest')}`);
|
|
192
|
+
const manifestOutputFilepath = node_path.resolve(outputDir, 'mf-manifest.json');
|
|
193
|
+
await promises.copyFile(manifestFilepath, manifestOutputFilepath);
|
|
194
|
+
logger.info(`Done writing MF Manifest to:\n${node_util.styleText('dim', manifestOutputFilepath)}`);
|
|
195
|
+
} finally{
|
|
196
|
+
await server.end();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const bundle_remote = bundleFederatedRemote;
|
|
200
|
+
export { options as bundleFederatedRemoteOptions, bundle_remote as default };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
declare const options: ({
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
default: string;
|
|
5
|
+
parse?: undefined;
|
|
6
|
+
} | {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
parse: (val: string) => boolean;
|
|
10
|
+
default: boolean;
|
|
11
|
+
} | {
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
parse: (val: string) => boolean;
|
|
15
|
+
default?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
default?: undefined;
|
|
20
|
+
parse?: undefined;
|
|
21
|
+
} | {
|
|
22
|
+
name: string;
|
|
23
|
+
description: string;
|
|
24
|
+
default: boolean;
|
|
25
|
+
parse?: undefined;
|
|
26
|
+
} | {
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
parse: (val: string) => string;
|
|
30
|
+
default?: undefined;
|
|
31
|
+
})[];
|
|
32
|
+
export default options;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
14
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: definition[key]
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
})();
|
|
20
|
+
(()=>{
|
|
21
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
22
|
+
})();
|
|
23
|
+
(()=>{
|
|
24
|
+
__webpack_require__.r = (exports1)=>{
|
|
25
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
26
|
+
value: 'Module'
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
29
|
+
value: true
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
var __webpack_exports__ = {};
|
|
34
|
+
__webpack_require__.r(__webpack_exports__);
|
|
35
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
default: ()=>options
|
|
37
|
+
});
|
|
38
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
39
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
40
|
+
const options_options = [
|
|
41
|
+
{
|
|
42
|
+
name: '--platform <string>',
|
|
43
|
+
description: 'Either "ios" or "android"',
|
|
44
|
+
default: 'ios'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: '--dev [boolean]',
|
|
48
|
+
description: 'If false, warnings are disabled and the bundle is minified',
|
|
49
|
+
parse: (val)=>'false' !== val,
|
|
50
|
+
default: true
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: '--minify [boolean]',
|
|
54
|
+
description: "Allows overriding whether bundle is minified. This defaults to false if dev is true, and true if dev is false. Disabling minification can be useful for speeding up production builds for testing purposes.",
|
|
55
|
+
parse: (val)=>'false' !== val
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: '--bundle-encoding <string>',
|
|
59
|
+
description: 'Encoding the bundle should be written in (https://nodejs.org/api/buffer.html#buffer_buffer).',
|
|
60
|
+
default: 'utf8'
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: '--max-workers <number>',
|
|
64
|
+
description: "Specifies the maximum number of workers the worker-pool will spawn for transforming files. This defaults to the number of the cores available on your machine."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: '--sourcemap-output <string>',
|
|
68
|
+
description: 'File name where to store the sourcemap file for resulting bundle, ex. /tmp/groups.map'
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: '--sourcemap-sources-root <string>',
|
|
72
|
+
description: "Path to make sourcemap's sources entries relative to, ex. /root/dir"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: '--sourcemap-use-absolute-path',
|
|
76
|
+
description: 'Report SourceMapURL using its full path',
|
|
77
|
+
default: false
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: '--assets-dest <string>',
|
|
81
|
+
description: 'Directory name where to store assets referenced in the bundle'
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: '--asset-catalog-dest [string]',
|
|
85
|
+
description: 'Path where to create an iOS Asset Catalog for images'
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: '--reset-cache',
|
|
89
|
+
description: 'Removes cached files',
|
|
90
|
+
default: false
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: '--config <string>',
|
|
94
|
+
description: 'Path to the CLI configuration file',
|
|
95
|
+
parse: (val)=>external_node_path_default().resolve(val)
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: '--output <string>',
|
|
99
|
+
description: 'Output directory for the bundle'
|
|
100
|
+
}
|
|
101
|
+
];
|
|
102
|
+
const options = options_options;
|
|
103
|
+
exports["default"] = __webpack_exports__["default"];
|
|
104
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
105
|
+
"default"
|
|
106
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
107
|
+
Object.defineProperty(exports, '__esModule', {
|
|
108
|
+
value: true
|
|
109
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import 'module';
|
|
2
|
+
/*#__PURE__*/ import.meta.url;
|
|
3
|
+
import node_path from "node:path";
|
|
4
|
+
const options_options = [
|
|
5
|
+
{
|
|
6
|
+
name: '--platform <string>',
|
|
7
|
+
description: 'Either "ios" or "android"',
|
|
8
|
+
default: 'ios'
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: '--dev [boolean]',
|
|
12
|
+
description: 'If false, warnings are disabled and the bundle is minified',
|
|
13
|
+
parse: (val)=>'false' !== val,
|
|
14
|
+
default: true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: '--minify [boolean]',
|
|
18
|
+
description: "Allows overriding whether bundle is minified. This defaults to false if dev is true, and true if dev is false. Disabling minification can be useful for speeding up production builds for testing purposes.",
|
|
19
|
+
parse: (val)=>'false' !== val
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: '--bundle-encoding <string>',
|
|
23
|
+
description: 'Encoding the bundle should be written in (https://nodejs.org/api/buffer.html#buffer_buffer).',
|
|
24
|
+
default: 'utf8'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: '--max-workers <number>',
|
|
28
|
+
description: "Specifies the maximum number of workers the worker-pool will spawn for transforming files. This defaults to the number of the cores available on your machine."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: '--sourcemap-output <string>',
|
|
32
|
+
description: 'File name where to store the sourcemap file for resulting bundle, ex. /tmp/groups.map'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: '--sourcemap-sources-root <string>',
|
|
36
|
+
description: "Path to make sourcemap's sources entries relative to, ex. /root/dir"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: '--sourcemap-use-absolute-path',
|
|
40
|
+
description: 'Report SourceMapURL using its full path',
|
|
41
|
+
default: false
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: '--assets-dest <string>',
|
|
45
|
+
description: 'Directory name where to store assets referenced in the bundle'
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: '--asset-catalog-dest [string]',
|
|
49
|
+
description: 'Path where to create an iOS Asset Catalog for images'
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: '--reset-cache',
|
|
53
|
+
description: 'Removes cached files',
|
|
54
|
+
default: false
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: '--config <string>',
|
|
58
|
+
description: 'Path to the CLI configuration file',
|
|
59
|
+
parse: (val)=>node_path.resolve(val)
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: '--output <string>',
|
|
63
|
+
description: 'Output directory for the bundle'
|
|
64
|
+
}
|
|
65
|
+
];
|
|
66
|
+
const options = options_options;
|
|
67
|
+
export { options as default };
|