@teambit/react 0.0.801 → 0.0.804
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/apps/web/react-app-options.ts +3 -3
- package/apps/web/react.app-type.ts +5 -2
- package/apps/web/react.application.ts +117 -23
- package/apps/web/ssr/ssr-express.ts +81 -0
- package/apps/web/webpack/mutators.ts +20 -0
- package/apps/web/webpack/webpack.app.ssr.config.ts +37 -0
- package/artifacts/__bit_junit.xml +2 -2
- package/artifacts/env-template/public/{681.8e3a069c66e71cfa4166.js → 994.bb73ab7fa3ec9ae9dc3b.js} +2 -2
- package/artifacts/env-template/public/assets-manifest.json +14 -14
- package/artifacts/env-template/public/{compositions.21c4c6c15f8ea62e3e5c.js → compositions.52254428c46016cd7126.js} +1 -1
- package/artifacts/env-template/public/compositions.html +1 -1
- package/artifacts/env-template/public/{overview.5f316fbe3b1341b52232.js → overview.feaf6bb95eb88100792c.js} +1 -1
- package/artifacts/env-template/public/overview.html +1 -1
- package/artifacts/env-template/public/peers.1d2b76311bfbf98a86fc.js +1 -0
- package/artifacts/env-template/public/{preview-root.f0d5db4b6ad4f6ac6a95.js → preview-root.3a0d522c80063747b87d.js} +1 -1
- package/artifacts/env-template/public/static/css/{681.90cfc900.css → 994.90cfc900.css} +0 -0
- package/artifacts/env-template/public/static/css/{overview.df4a22d4.css → overview.c86de60f.css} +1 -1
- package/artifacts/preview/teambit_react_react-preview.js +2 -2
- package/{compositions-1659065375106.js → compositions-1659347901202.js} +0 -0
- package/dist/apps/web/react-app-options.d.ts +3 -3
- package/dist/apps/web/react-app-options.js.map +1 -1
- package/dist/apps/web/react.app-type.d.ts +3 -1
- package/dist/apps/web/react.app-type.js +3 -2
- package/dist/apps/web/react.app-type.js.map +1 -1
- package/dist/apps/web/react.application.d.ts +11 -4
- package/dist/apps/web/react.application.js +134 -14
- package/dist/apps/web/react.application.js.map +1 -1
- package/dist/apps/web/ssr/ssr-express.d.ts +15 -0
- package/dist/apps/web/ssr/ssr-express.js +151 -0
- package/dist/apps/web/ssr/ssr-express.js.map +1 -0
- package/dist/apps/web/webpack/mutators.d.ts +3 -0
- package/dist/apps/web/webpack/mutators.js +27 -0
- package/dist/apps/web/webpack/mutators.js.map +1 -0
- package/dist/apps/web/webpack/webpack.app.ssr.config.d.ts +15 -0
- package/dist/apps/web/webpack/webpack.app.ssr.config.js +62 -0
- package/dist/apps/web/webpack/webpack.app.ssr.config.js.map +1 -0
- package/dist/react.main.runtime.js +1 -1
- package/dist/react.main.runtime.js.map +1 -1
- package/{overview-1659065375106.js → overview-1659347901202.js} +0 -0
- package/package-tar/teambit-react-0.0.804.tgz +0 -0
- package/package.json +40 -32
- package/{preview-1659065375106.js → preview-1659347901202.js} +2 -2
- package/artifacts/env-template/public/peers.5a16c311213be568be15.js +0 -1
- package/package-tar/teambit-react-0.0.801.tgz +0 -0
|
@@ -61,6 +61,16 @@ function _terserWebpackPlugin() {
|
|
|
61
61
|
return data;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
function _bitError() {
|
|
65
|
+
const data = require("@teambit/bit-error");
|
|
66
|
+
|
|
67
|
+
_bitError = function () {
|
|
68
|
+
return data;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
return data;
|
|
72
|
+
}
|
|
73
|
+
|
|
64
74
|
function _plugins() {
|
|
65
75
|
const data = require("./plugins");
|
|
66
76
|
|
|
@@ -91,10 +101,45 @@ function _computeResults() {
|
|
|
91
101
|
return data;
|
|
92
102
|
}
|
|
93
103
|
|
|
104
|
+
function _webpackAppSsr() {
|
|
105
|
+
const data = require("./webpack/webpack.app.ssr.config");
|
|
106
|
+
|
|
107
|
+
_webpackAppSsr = function () {
|
|
108
|
+
return data;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
return data;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function _mutators() {
|
|
115
|
+
const data = require("./webpack/mutators");
|
|
116
|
+
|
|
117
|
+
_mutators = function () {
|
|
118
|
+
return data;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
return data;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function _ssrExpress() {
|
|
125
|
+
const data = require("./ssr/ssr-express");
|
|
126
|
+
|
|
127
|
+
_ssrExpress = function () {
|
|
128
|
+
return data;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
return data;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
135
|
+
|
|
136
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
137
|
+
|
|
94
138
|
class ReactApp {
|
|
95
|
-
constructor(name, entry, portRange, reactEnv, prerender, bundler, devServer, transformers = [], deploy, favicon) {
|
|
139
|
+
constructor(name, entry, ssr, portRange, reactEnv, prerender, bundler, devServer, transformers = [], deploy, favicon, logger) {
|
|
96
140
|
this.name = name;
|
|
97
141
|
this.entry = entry;
|
|
142
|
+
this.ssr = ssr;
|
|
98
143
|
this.portRange = portRange;
|
|
99
144
|
this.reactEnv = reactEnv;
|
|
100
145
|
this.prerender = prerender;
|
|
@@ -103,6 +148,7 @@ class ReactApp {
|
|
|
103
148
|
this.transformers = transformers;
|
|
104
149
|
this.deploy = deploy;
|
|
105
150
|
this.favicon = favicon;
|
|
151
|
+
this.logger = logger;
|
|
106
152
|
(0, _defineProperty2().default)(this, "applicationType", 'react-common-js');
|
|
107
153
|
(0, _defineProperty2().default)(this, "dir", 'public');
|
|
108
154
|
(0, _defineProperty2().default)(this, "getESBuildConfig", (isPrerendering = this.prerender) => {
|
|
@@ -169,23 +215,90 @@ class ReactApp {
|
|
|
169
215
|
}
|
|
170
216
|
|
|
171
217
|
const devServerContext = await this.getDevServerContext(context);
|
|
172
|
-
const devServer = this.reactEnv.getDevServer(devServerContext, [
|
|
173
|
-
historyApiFallback: {
|
|
174
|
-
index: '/index.html',
|
|
175
|
-
disableDotRule: true,
|
|
176
|
-
headers: {
|
|
177
|
-
'Access-Control-Allow-Headers': '*'
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}), configMutator => {
|
|
181
|
-
if (!configMutator.raw.output) configMutator.raw.output = {};
|
|
182
|
-
configMutator.raw.output.publicPath = '/';
|
|
183
|
-
return configMutator;
|
|
184
|
-
}, ...this.transformers]);
|
|
218
|
+
const devServer = this.reactEnv.getDevServer(devServerContext, [_mutators().addDevServer, _mutators().setOutput, ...this.transformers]);
|
|
185
219
|
await devServer.listen(port);
|
|
186
220
|
return port;
|
|
187
221
|
}
|
|
188
222
|
|
|
223
|
+
async runSsr(context) {
|
|
224
|
+
var _this$logger, _this$logger2, _this$logger3;
|
|
225
|
+
|
|
226
|
+
const [from, to] = this.portRange;
|
|
227
|
+
const port = await _toolboxNetwork().Port.getPort(from, to); // bundle client
|
|
228
|
+
|
|
229
|
+
const clientBundle = await this.buildClient(context);
|
|
230
|
+
if (clientBundle.errors.length > 0) return {
|
|
231
|
+
errors: clientBundle.errors
|
|
232
|
+
};
|
|
233
|
+
(_this$logger = this.logger) === null || _this$logger === void 0 ? void 0 : _this$logger.info('[react.application] [ssr] client bundle - complete'); // bundle server
|
|
234
|
+
|
|
235
|
+
const serverBundle = await this.buildSsr(context);
|
|
236
|
+
if (serverBundle.errors.length > 0) return {
|
|
237
|
+
errors: serverBundle.errors
|
|
238
|
+
};
|
|
239
|
+
(_this$logger2 = this.logger) === null || _this$logger2 === void 0 ? void 0 : _this$logger2.info('[react.application] [ssr] server bundle - complete'); // load server-side runtime
|
|
240
|
+
|
|
241
|
+
const app = await (0, _ssrExpress().loadSsrApp)(context.workdir, context.appName);
|
|
242
|
+
(_this$logger3 = this.logger) === null || _this$logger3 === void 0 ? void 0 : _this$logger3.info('[react.application] [ssr] bundle code - loaded');
|
|
243
|
+
const expressApp = (0, _ssrExpress().createExpressSsr)({
|
|
244
|
+
name: context.appName,
|
|
245
|
+
workdir: context.workdir,
|
|
246
|
+
port,
|
|
247
|
+
app,
|
|
248
|
+
assets: (0, _ssrExpress().parseAssets)(clientBundle.assets),
|
|
249
|
+
logger: this.logger
|
|
250
|
+
});
|
|
251
|
+
expressApp.listen(port);
|
|
252
|
+
return {
|
|
253
|
+
port
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
async buildClient(context) {
|
|
258
|
+
const htmlConfig = [{
|
|
259
|
+
title: context.appName,
|
|
260
|
+
templateContent: (0, _webpack().html)(context.appName),
|
|
261
|
+
minify: false,
|
|
262
|
+
favicon: this.favicon
|
|
263
|
+
}]; // extend, including prototype methods
|
|
264
|
+
|
|
265
|
+
const ctx = Object.assign(Object.create(context), {
|
|
266
|
+
html: htmlConfig,
|
|
267
|
+
targets: [{
|
|
268
|
+
entries: await this.getEntries(),
|
|
269
|
+
components: [context.appComponent],
|
|
270
|
+
outputPath: (0, _path().resolve)(context.workdir, (0, _webpackAppSsr().calcOutputPath)(context.appName, 'browser')),
|
|
271
|
+
hostDependencies: await this.getPeers(),
|
|
272
|
+
aliasHostDependencies: true
|
|
273
|
+
}],
|
|
274
|
+
// @ts-ignore
|
|
275
|
+
capsuleNetwork: undefined,
|
|
276
|
+
previousTasksResults: []
|
|
277
|
+
});
|
|
278
|
+
const bundler = await this.reactEnv.getBundler(ctx, [config => config.merge([(0, _webpackAppSsr().clientConfig)()]), ...this.transformers]);
|
|
279
|
+
const bundleResult = await bundler.run();
|
|
280
|
+
return bundleResult[0];
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
async buildSsr(context) {
|
|
284
|
+
// extend, including prototype methods
|
|
285
|
+
const ctx = Object.assign(Object.create(context), _objectSpread(_objectSpread({}, context), {}, {
|
|
286
|
+
targets: [{
|
|
287
|
+
entries: await this.getSsrEntries(),
|
|
288
|
+
components: [context.appComponent],
|
|
289
|
+
outputPath: (0, _path().resolve)(context.workdir, (0, _webpackAppSsr().calcOutputPath)(context.appName, 'ssr')),
|
|
290
|
+
hostDependencies: await this.getPeers(),
|
|
291
|
+
aliasHostDependencies: true
|
|
292
|
+
}],
|
|
293
|
+
// @ts-ignore
|
|
294
|
+
capsuleNetwork: undefined,
|
|
295
|
+
previousTasksResults: []
|
|
296
|
+
}));
|
|
297
|
+
const bundler = await this.reactEnv.getBundler(ctx, [config => config.merge([(0, _webpackAppSsr().ssrConfig)()]), ...this.transformers]);
|
|
298
|
+
const bundleResult = await bundler.run();
|
|
299
|
+
return bundleResult[0];
|
|
300
|
+
}
|
|
301
|
+
|
|
189
302
|
async build(context) {
|
|
190
303
|
const htmlConfig = [{
|
|
191
304
|
title: context.name,
|
|
@@ -227,6 +340,7 @@ class ReactApp {
|
|
|
227
340
|
components: [capsule === null || capsule === void 0 ? void 0 : capsule.component],
|
|
228
341
|
entries,
|
|
229
342
|
outputPath,
|
|
343
|
+
hostRootDir: capsule === null || capsule === void 0 ? void 0 : capsule.path,
|
|
230
344
|
hostDependencies: await this.getPeers(),
|
|
231
345
|
aliasHostDependencies: true
|
|
232
346
|
}],
|
|
@@ -274,6 +388,12 @@ class ReactApp {
|
|
|
274
388
|
return this.entry();
|
|
275
389
|
}
|
|
276
390
|
|
|
391
|
+
async getSsrEntries() {
|
|
392
|
+
if (!this.ssr) throw new (_bitError().BitError)('tried to build ssr without ssr entries');
|
|
393
|
+
if (typeof this.ssr === 'string') return [this.ssr];
|
|
394
|
+
return [await this.ssr()];
|
|
395
|
+
}
|
|
396
|
+
|
|
277
397
|
async getDevServerContext(context) {
|
|
278
398
|
const entries = await this.getEntries();
|
|
279
399
|
return Object.assign(context, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ReactApp","constructor","name","entry","portRange","reactEnv","prerender","bundler","devServer","transformers","deploy","favicon","isPrerendering","TerserPlugin","extractComments","terserOptions","parse","ecma","compress","warnings","comparisons","inline","mangle","safari10","output","comments","ascii_only","minify","esbuildMinify","run","context","from","to","port","Port","getPort","listen","devServerContext","getDevServerContext","getDevServer","configMutator","addTopLevel","historyApiFallback","index","disableDotRule","headers","raw","publicPath","build","htmlConfig","title","templateContent","html","Object","assign","getBundler","bundleResult","computeResults","publicDir","getPublicDir","artifactsDir","dir","getDefaultBundler","capsule","env","outputPath","join","path","distDir","getCompiler","targetEntries","Array","isArray","entries","map","require","resolve","basename","staticDir","bundlerContext","targets","components","component","hostDependencies","getPeers","aliasHostDependencies","rootPath","metaData","initiator","envId","id","defaultTransformer","config","filename","addPlugin","prerenderPlugin","optimization","minimizer","remove","push","getESBuildConfig","applicationType","getEntries","getPeerDependenciesList"],"sources":["react.application.ts"],"sourcesContent":["import { join, basename } from 'path';\nimport { Application, AppContext, AppBuildContext } from '@teambit/application';\nimport { Bundler, DevServer, BundlerContext, DevServerContext, BundlerHtmlConfig } from '@teambit/bundler';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport { remove } from 'lodash';\nimport TerserPlugin from 'terser-webpack-plugin';\nimport { WebpackConfigTransformer } from '@teambit/webpack';\nimport { ReactEnv } from '../../react.env';\nimport { prerenderPlugin } from './plugins';\nimport { ReactAppBuildResult } from './react-build-result';\nimport { ReactAppPrerenderOptions } from './react-app-options';\nimport { html } from '../../webpack';\nimport { ReactDeployContext } from '.';\nimport { computeResults } from './compute-results';\n\nexport class ReactApp implements Application {\n constructor(\n readonly name: string,\n readonly entry: string[] | (() => Promise<string[]>),\n readonly portRange: number[],\n private reactEnv: ReactEnv,\n readonly prerender?: ReactAppPrerenderOptions,\n readonly bundler?: Bundler,\n readonly devServer?: DevServer,\n readonly transformers: WebpackConfigTransformer[] = [],\n readonly deploy?: (context: ReactDeployContext) => Promise<void>,\n readonly favicon?: string\n ) {}\n readonly applicationType = 'react-common-js';\n readonly dir = 'public';\n\n async run(context: AppContext): Promise<number> {\n const [from, to] = this.portRange;\n const port = await Port.getPort(from, to);\n if (this.devServer) {\n await this.devServer.listen(port);\n return port;\n }\n const devServerContext = await this.getDevServerContext(context);\n const devServer = this.reactEnv.getDevServer(devServerContext, [\n (configMutator) =>\n configMutator.addTopLevel('devServer', {\n historyApiFallback: {\n index: '/index.html',\n disableDotRule: true,\n headers: {\n 'Access-Control-Allow-Headers': '*',\n },\n },\n }),\n (configMutator) => {\n if (!configMutator.raw.output) configMutator.raw.output = {};\n configMutator.raw.output.publicPath = '/';\n\n return configMutator;\n },\n ...this.transformers,\n ]);\n await devServer.listen(port);\n return port;\n }\n\n async build(context: AppBuildContext): Promise<ReactAppBuildResult> {\n const htmlConfig: BundlerHtmlConfig[] = [\n {\n title: context.name,\n templateContent: html(context.name),\n minify: false,\n favicon: this.favicon,\n // filename: ''.html`,\n },\n ];\n Object.assign(context, {\n html: htmlConfig,\n });\n const bundler = await this.getBundler(context);\n const bundleResult = await bundler.run();\n\n return computeResults(bundleResult, { publicDir: `${this.getPublicDir(context.artifactsDir)}/${this.dir}` });\n }\n\n private getBundler(context: AppBuildContext) {\n if (this.bundler) return this.bundler;\n return this.getDefaultBundler(context);\n }\n private async getDefaultBundler(context: AppBuildContext) {\n const { capsule } = context;\n const reactEnv: ReactEnv = context.env;\n const publicDir = this.getPublicDir(context.artifactsDir);\n const outputPath = join(capsule.path, publicDir);\n const { distDir } = reactEnv.getCompiler();\n const targetEntries = Array.isArray(this.entry) ? this.entry : await this.entry();\n const entries = targetEntries.map((entry) => require.resolve(`${capsule.path}/${distDir}/${basename(entry)}`));\n const staticDir = join(outputPath, this.dir);\n\n const bundlerContext: BundlerContext = Object.assign(context, {\n targets: [\n {\n components: [capsule?.component],\n entries,\n outputPath,\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n },\n ],\n entry: [],\n rootPath: '/',\n metaData: {\n initiator: `building app: ${context.name}`,\n envId: context.id,\n },\n });\n\n const defaultTransformer: WebpackConfigTransformer = (configMutator) => {\n const config = configMutator.addTopLevel('output', {\n path: staticDir,\n publicPath: `/`,\n filename: '[name].[chunkhash].js',\n });\n if (this.prerender) config.addPlugin(prerenderPlugin(this.prerender));\n if (config.raw.optimization?.minimizer) {\n remove(config.raw.optimization?.minimizer, (minimizer) => {\n return minimizer.constructor.name === 'TerserPlugin';\n });\n\n config.raw.optimization?.minimizer.push(this.getESBuildConfig());\n }\n\n return config;\n };\n const transformers = [defaultTransformer, ...this.transformers];\n const bundler: Bundler = await reactEnv.getBundler(bundlerContext, transformers);\n return bundler;\n }\n private getESBuildConfig = (isPrerendering = this.prerender) => {\n // We don't want to use esbuild in case of prerendering since the headless browser puppeteer doesn't support\n // the output of esbuild\n\n if (isPrerendering) {\n return new TerserPlugin({\n extractComments: false,\n terserOptions: {\n parse: {\n // We want terser to parse ecma 8 code. However, we don't want it\n // to apply any minification steps that turns valid ecma 5 code\n // into invalid ecma 5 code. This is why the 'compress' and 'output'\n // sections only apply transformations that are ecma 5 safe\n // https://github.com/facebook/create-react-app/pull/4234\n ecma: 8,\n },\n compress: {\n ecma: 5,\n warnings: false,\n // Disabled because of an issue with Uglify breaking seemingly valid code:\n // https://github.com/facebook/create-react-app/issues/2376\n // Pending further investigation:\n // https://github.com/mishoo/UglifyJS2/issues/2011\n comparisons: false,\n // Disabled because of an issue with Terser breaking valid code:\n // https://github.com/facebook/create-react-app/issues/5250\n // Pending further investigation:\n // https://github.com/terser-js/terser/issues/120\n inline: 2,\n },\n mangle: {\n safari10: true,\n },\n output: {\n ecma: 5,\n comments: false,\n // Turned on because emoji and regex is not minified properly using default\n // https://github.com/facebook/create-react-app/issues/2488\n ascii_only: true,\n },\n },\n });\n }\n return new TerserPlugin({\n minify: TerserPlugin.esbuildMinify,\n // `terserOptions` options will be passed to `esbuild`\n // Link to options - https://esbuild.github.io/api/#minify\n terserOptions: {\n minify: true,\n },\n });\n };\n\n private getPublicDir(artifactsDir: string) {\n return join(artifactsDir, this.applicationType, this.name);\n }\n\n async getEntries(): Promise<string[]> {\n if (Array.isArray(this.entry)) return this.entry;\n return this.entry();\n }\n\n private async getDevServerContext(context: AppContext): Promise<DevServerContext> {\n const entries = await this.getEntries();\n return Object.assign(context, {\n entry: entries,\n rootPath: '',\n publicPath: `public/${this.name}`,\n title: this.name,\n favicon: this.favicon,\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n });\n }\n\n private getPeers(): Promise<string[]> {\n return this.reactEnv.getPeerDependenciesList();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["ReactApp","constructor","name","entry","ssr","portRange","reactEnv","prerender","bundler","devServer","transformers","deploy","favicon","logger","isPrerendering","TerserPlugin","extractComments","terserOptions","parse","ecma","compress","warnings","comparisons","inline","mangle","safari10","output","comments","ascii_only","minify","esbuildMinify","run","context","from","to","port","Port","getPort","listen","devServerContext","getDevServerContext","getDevServer","addDevServer","setOutput","runSsr","clientBundle","buildClient","errors","length","info","serverBundle","buildSsr","app","loadSsrApp","workdir","appName","expressApp","createExpressSsr","assets","parseAssets","htmlConfig","title","templateContent","html","ctx","Object","assign","create","targets","entries","getEntries","components","appComponent","outputPath","resolve","calcOutputPath","hostDependencies","getPeers","aliasHostDependencies","capsuleNetwork","undefined","previousTasksResults","getBundler","config","merge","clientConfig","bundleResult","getSsrEntries","ssrConfig","build","computeResults","publicDir","getPublicDir","artifactsDir","dir","getDefaultBundler","capsule","env","join","path","distDir","getCompiler","targetEntries","Array","isArray","map","require","basename","staticDir","bundlerContext","component","hostRootDir","rootPath","metaData","initiator","envId","id","defaultTransformer","configMutator","addTopLevel","publicPath","filename","addPlugin","prerenderPlugin","raw","optimization","minimizer","remove","push","getESBuildConfig","applicationType","BitError","getPeerDependenciesList"],"sources":["react.application.ts"],"sourcesContent":["import { join, resolve, basename } from 'path';\nimport { Application, AppContext, AppBuildContext, AppResult } from '@teambit/application';\nimport type { Bundler, DevServer, BundlerContext, DevServerContext, BundlerHtmlConfig } from '@teambit/bundler';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport type { Logger } from '@teambit/logger';\nimport { remove } from 'lodash';\nimport TerserPlugin from 'terser-webpack-plugin';\nimport { WebpackConfigTransformer } from '@teambit/webpack';\nimport { BitError } from '@teambit/bit-error';\nimport { ReactEnv } from '../../react.env';\nimport { prerenderPlugin } from './plugins';\nimport { ReactAppBuildResult } from './react-build-result';\nimport { ReactAppPrerenderOptions } from './react-app-options';\nimport { html } from '../../webpack';\nimport { ReactDeployContext } from '.';\nimport { computeResults } from './compute-results';\nimport { clientConfig, ssrConfig, calcOutputPath } from './webpack/webpack.app.ssr.config';\nimport { addDevServer, setOutput } from './webpack/mutators';\nimport { createExpressSsr, loadSsrApp, parseAssets } from './ssr/ssr-express';\n\nexport class ReactApp implements Application {\n constructor(\n readonly name: string,\n readonly entry: string[] | (() => Promise<string[]>),\n readonly ssr: string | (() => Promise<string>) | undefined,\n readonly portRange: [number, number],\n private reactEnv: ReactEnv,\n readonly prerender?: ReactAppPrerenderOptions,\n readonly bundler?: Bundler,\n readonly devServer?: DevServer,\n readonly transformers: WebpackConfigTransformer[] = [],\n readonly deploy?: (context: ReactDeployContext) => Promise<void>,\n readonly favicon?: string,\n private logger?: Logger\n ) {}\n readonly applicationType = 'react-common-js';\n readonly dir = 'public';\n\n async run(context: AppContext): Promise<number> {\n const [from, to] = this.portRange;\n const port = await Port.getPort(from, to);\n\n if (this.devServer) {\n await this.devServer.listen(port);\n return port;\n }\n\n const devServerContext = await this.getDevServerContext(context);\n const devServer = this.reactEnv.getDevServer(devServerContext, [addDevServer, setOutput, ...this.transformers]);\n await devServer.listen(port);\n return port;\n }\n\n async runSsr(context: AppContext): Promise<AppResult> {\n const [from, to] = this.portRange;\n const port = await Port.getPort(from, to);\n\n // bundle client\n const clientBundle = await this.buildClient(context);\n if (clientBundle.errors.length > 0) return { errors: clientBundle.errors };\n this.logger?.info('[react.application] [ssr] client bundle - complete');\n\n // bundle server\n const serverBundle = await this.buildSsr(context);\n if (serverBundle.errors.length > 0) return { errors: serverBundle.errors };\n this.logger?.info('[react.application] [ssr] server bundle - complete');\n\n // load server-side runtime\n const app = await loadSsrApp(context.workdir, context.appName);\n this.logger?.info('[react.application] [ssr] bundle code - loaded');\n\n const expressApp = createExpressSsr({\n name: context.appName,\n workdir: context.workdir,\n port,\n app,\n assets: parseAssets(clientBundle.assets),\n logger: this.logger,\n });\n\n expressApp.listen(port);\n return { port };\n }\n\n private async buildClient(context: AppContext) {\n const htmlConfig: BundlerHtmlConfig[] = [\n {\n title: context.appName,\n templateContent: html(context.appName),\n minify: false,\n favicon: this.favicon,\n },\n ];\n\n // extend, including prototype methods\n const ctx: BundlerContext = Object.assign(Object.create(context), {\n html: htmlConfig,\n targets: [\n {\n entries: await this.getEntries(),\n components: [context.appComponent],\n outputPath: resolve(context.workdir, calcOutputPath(context.appName, 'browser')),\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n },\n ],\n\n // @ts-ignore\n capsuleNetwork: undefined,\n previousTasksResults: [],\n });\n\n const bundler = await this.reactEnv.getBundler(ctx, [\n (config) => config.merge([clientConfig()]),\n ...this.transformers,\n ]);\n\n const bundleResult = await bundler.run();\n return bundleResult[0];\n }\n\n private async buildSsr(context: AppContext) {\n // extend, including prototype methods\n const ctx: BundlerContext = Object.assign(Object.create(context), {\n ...context,\n targets: [\n {\n entries: await this.getSsrEntries(),\n components: [context.appComponent],\n outputPath: resolve(context.workdir, calcOutputPath(context.appName, 'ssr')),\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n },\n ],\n\n // @ts-ignore\n capsuleNetwork: undefined,\n previousTasksResults: [],\n });\n\n const bundler = await this.reactEnv.getBundler(ctx, [\n (config) => config.merge([ssrConfig()]),\n ...this.transformers,\n ]);\n\n const bundleResult = await bundler.run();\n return bundleResult[0];\n }\n\n async build(context: AppBuildContext): Promise<ReactAppBuildResult> {\n const htmlConfig: BundlerHtmlConfig[] = [\n {\n title: context.name,\n templateContent: html(context.name),\n minify: false,\n favicon: this.favicon,\n // filename: ''.html`,\n },\n ];\n Object.assign(context, {\n html: htmlConfig,\n });\n const bundler = await this.getBundler(context);\n const bundleResult = await bundler.run();\n\n return computeResults(bundleResult, { publicDir: `${this.getPublicDir(context.artifactsDir)}/${this.dir}` });\n }\n\n private getBundler(context: AppBuildContext) {\n if (this.bundler) return this.bundler;\n return this.getDefaultBundler(context);\n }\n private async getDefaultBundler(context: AppBuildContext) {\n const { capsule } = context;\n const reactEnv: ReactEnv = context.env as ReactEnv;\n const publicDir = this.getPublicDir(context.artifactsDir);\n const outputPath = join(capsule.path, publicDir);\n const { distDir } = reactEnv.getCompiler();\n const targetEntries = Array.isArray(this.entry) ? this.entry : await this.entry();\n const entries = targetEntries.map((entry) => require.resolve(`${capsule.path}/${distDir}/${basename(entry)}`));\n const staticDir = join(outputPath, this.dir);\n\n const bundlerContext: BundlerContext = Object.assign(context, {\n targets: [\n {\n components: [capsule?.component],\n entries,\n outputPath,\n hostRootDir: capsule?.path,\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n },\n ],\n entry: [],\n rootPath: '/',\n metaData: {\n initiator: `building app: ${context.name}`,\n envId: context.id,\n },\n });\n\n const defaultTransformer: WebpackConfigTransformer = (configMutator) => {\n const config = configMutator.addTopLevel('output', {\n path: staticDir,\n publicPath: `/`,\n filename: '[name].[chunkhash].js',\n });\n if (this.prerender) config.addPlugin(prerenderPlugin(this.prerender));\n if (config.raw.optimization?.minimizer) {\n remove(config.raw.optimization?.minimizer, (minimizer) => {\n return minimizer.constructor.name === 'TerserPlugin';\n });\n\n config.raw.optimization?.minimizer.push(this.getESBuildConfig());\n }\n\n return config;\n };\n const transformers = [defaultTransformer, ...this.transformers];\n const bundler: Bundler = await reactEnv.getBundler(bundlerContext, transformers);\n return bundler;\n }\n private getESBuildConfig = (isPrerendering = this.prerender) => {\n // We don't want to use esbuild in case of prerendering since the headless browser puppeteer doesn't support\n // the output of esbuild\n\n if (isPrerendering) {\n return new TerserPlugin({\n extractComments: false,\n terserOptions: {\n parse: {\n // We want terser to parse ecma 8 code. However, we don't want it\n // to apply any minification steps that turns valid ecma 5 code\n // into invalid ecma 5 code. This is why the 'compress' and 'output'\n // sections only apply transformations that are ecma 5 safe\n // https://github.com/facebook/create-react-app/pull/4234\n ecma: 8,\n },\n compress: {\n ecma: 5,\n warnings: false,\n // Disabled because of an issue with Uglify breaking seemingly valid code:\n // https://github.com/facebook/create-react-app/issues/2376\n // Pending further investigation:\n // https://github.com/mishoo/UglifyJS2/issues/2011\n comparisons: false,\n // Disabled because of an issue with Terser breaking valid code:\n // https://github.com/facebook/create-react-app/issues/5250\n // Pending further investigation:\n // https://github.com/terser-js/terser/issues/120\n inline: 2,\n },\n mangle: {\n safari10: true,\n },\n output: {\n ecma: 5,\n comments: false,\n // Turned on because emoji and regex is not minified properly using default\n // https://github.com/facebook/create-react-app/issues/2488\n ascii_only: true,\n },\n },\n });\n }\n return new TerserPlugin({\n minify: TerserPlugin.esbuildMinify,\n // `terserOptions` options will be passed to `esbuild`\n // Link to options - https://esbuild.github.io/api/#minify\n terserOptions: {\n minify: true,\n },\n });\n };\n\n private getPublicDir(artifactsDir: string) {\n return join(artifactsDir, this.applicationType, this.name);\n }\n\n async getEntries(): Promise<string[]> {\n if (Array.isArray(this.entry)) return this.entry;\n return this.entry();\n }\n\n async getSsrEntries(): Promise<string[]> {\n if (!this.ssr) throw new BitError('tried to build ssr without ssr entries');\n if (typeof this.ssr === 'string') return [this.ssr];\n return [await this.ssr()];\n }\n\n private async getDevServerContext(context: AppContext): Promise<DevServerContext> {\n const entries = await this.getEntries();\n return Object.assign(context, {\n entry: entries,\n rootPath: '',\n publicPath: `public/${this.name}`,\n title: this.name,\n favicon: this.favicon,\n hostDependencies: await this.getPeers(),\n aliasHostDependencies: true,\n });\n }\n\n private getPeers(): Promise<string[]> {\n return this.reactEnv.getPeerDependenciesList();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;;;;;AAEO,MAAMA,QAAN,CAAsC;EAC3CC,WAAW,CACAC,IADA,EAEAC,KAFA,EAGAC,GAHA,EAIAC,SAJA,EAKDC,QALC,EAMAC,SANA,EAOAC,OAPA,EAQAC,SARA,EASAC,YAAwC,GAAG,EAT3C,EAUAC,MAVA,EAWAC,OAXA,EAYDC,MAZC,EAaT;IAAA,KAZSX,IAYT,GAZSA,IAYT;IAAA,KAXSC,KAWT,GAXSA,KAWT;IAAA,KAVSC,GAUT,GAVSA,GAUT;IAAA,KATSC,SAST,GATSA,SAST;IAAA,KARQC,QAQR,GARQA,QAQR;IAAA,KAPSC,SAOT,GAPSA,SAOT;IAAA,KANSC,OAMT,GANSA,OAMT;IAAA,KALSC,SAKT,GALSA,SAKT;IAAA,KAJSC,YAIT,GAJSA,YAIT;IAAA,KAHSC,MAGT,GAHSA,MAGT;IAAA,KAFSC,OAET,GAFSA,OAET;IAAA,KADQC,MACR,GADQA,MACR;IAAA,yDACyB,iBADzB;IAAA,6CAEa,QAFb;IAAA,0DA4LyB,CAACC,cAAc,GAAG,KAAKP,SAAvB,KAAqC;MAC9D;MACA;MAEA,IAAIO,cAAJ,EAAoB;QAClB,OAAO,KAAIC,8BAAJ,EAAiB;UACtBC,eAAe,EAAE,KADK;UAEtBC,aAAa,EAAE;YACbC,KAAK,EAAE;cACL;cACA;cACA;cACA;cACA;cACAC,IAAI,EAAE;YAND,CADM;YASbC,QAAQ,EAAE;cACRD,IAAI,EAAE,CADE;cAERE,QAAQ,EAAE,KAFF;cAGR;cACA;cACA;cACA;cACAC,WAAW,EAAE,KAPL;cAQR;cACA;cACA;cACA;cACAC,MAAM,EAAE;YAZA,CATG;YAuBbC,MAAM,EAAE;cACNC,QAAQ,EAAE;YADJ,CAvBK;YA0BbC,MAAM,EAAE;cACNP,IAAI,EAAE,CADA;cAENQ,QAAQ,EAAE,KAFJ;cAGN;cACA;cACAC,UAAU,EAAE;YALN;UA1BK;QAFO,CAAjB,CAAP;MAqCD;;MACD,OAAO,KAAIb,8BAAJ,EAAiB;QACtBc,MAAM,EAAEd,8BAAA,CAAae,aADC;QAEtB;QACA;QACAb,aAAa,EAAE;UACbY,MAAM,EAAE;QADK;MAJO,CAAjB,CAAP;IAQD,CA/OC;EAAE;;EAIK,MAAHE,GAAG,CAACC,OAAD,EAAuC;IAC9C,MAAM,CAACC,IAAD,EAAOC,EAAP,IAAa,KAAK7B,SAAxB;IACA,MAAM8B,IAAI,GAAG,MAAMC,sBAAA,CAAKC,OAAL,CAAaJ,IAAb,EAAmBC,EAAnB,CAAnB;;IAEA,IAAI,KAAKzB,SAAT,EAAoB;MAClB,MAAM,KAAKA,SAAL,CAAe6B,MAAf,CAAsBH,IAAtB,CAAN;MACA,OAAOA,IAAP;IACD;;IAED,MAAMI,gBAAgB,GAAG,MAAM,KAAKC,mBAAL,CAAyBR,OAAzB,CAA/B;IACA,MAAMvB,SAAS,GAAG,KAAKH,QAAL,CAAcmC,YAAd,CAA2BF,gBAA3B,EAA6C,CAACG,wBAAD,EAAeC,qBAAf,EAA0B,GAAG,KAAKjC,YAAlC,CAA7C,CAAlB;IACA,MAAMD,SAAS,CAAC6B,MAAV,CAAiBH,IAAjB,CAAN;IACA,OAAOA,IAAP;EACD;;EAEW,MAANS,MAAM,CAACZ,OAAD,EAA0C;IAAA;;IACpD,MAAM,CAACC,IAAD,EAAOC,EAAP,IAAa,KAAK7B,SAAxB;IACA,MAAM8B,IAAI,GAAG,MAAMC,sBAAA,CAAKC,OAAL,CAAaJ,IAAb,EAAmBC,EAAnB,CAAnB,CAFoD,CAIpD;;IACA,MAAMW,YAAY,GAAG,MAAM,KAAKC,WAAL,CAAiBd,OAAjB,CAA3B;IACA,IAAIa,YAAY,CAACE,MAAb,CAAoBC,MAApB,GAA6B,CAAjC,EAAoC,OAAO;MAAED,MAAM,EAAEF,YAAY,CAACE;IAAvB,CAAP;IACpC,qBAAKlC,MAAL,8DAAaoC,IAAb,CAAkB,oDAAlB,EAPoD,CASpD;;IACA,MAAMC,YAAY,GAAG,MAAM,KAAKC,QAAL,CAAcnB,OAAd,CAA3B;IACA,IAAIkB,YAAY,CAACH,MAAb,CAAoBC,MAApB,GAA6B,CAAjC,EAAoC,OAAO;MAAED,MAAM,EAAEG,YAAY,CAACH;IAAvB,CAAP;IACpC,sBAAKlC,MAAL,gEAAaoC,IAAb,CAAkB,oDAAlB,EAZoD,CAcpD;;IACA,MAAMG,GAAG,GAAG,MAAM,IAAAC,wBAAA,EAAWrB,OAAO,CAACsB,OAAnB,EAA4BtB,OAAO,CAACuB,OAApC,CAAlB;IACA,sBAAK1C,MAAL,gEAAaoC,IAAb,CAAkB,gDAAlB;IAEA,MAAMO,UAAU,GAAG,IAAAC,8BAAA,EAAiB;MAClCvD,IAAI,EAAE8B,OAAO,CAACuB,OADoB;MAElCD,OAAO,EAAEtB,OAAO,CAACsB,OAFiB;MAGlCnB,IAHkC;MAIlCiB,GAJkC;MAKlCM,MAAM,EAAE,IAAAC,yBAAA,EAAYd,YAAY,CAACa,MAAzB,CAL0B;MAMlC7C,MAAM,EAAE,KAAKA;IANqB,CAAjB,CAAnB;IASA2C,UAAU,CAAClB,MAAX,CAAkBH,IAAlB;IACA,OAAO;MAAEA;IAAF,CAAP;EACD;;EAEwB,MAAXW,WAAW,CAACd,OAAD,EAAsB;IAC7C,MAAM4B,UAA+B,GAAG,CACtC;MACEC,KAAK,EAAE7B,OAAO,CAACuB,OADjB;MAEEO,eAAe,EAAE,IAAAC,eAAA,EAAK/B,OAAO,CAACuB,OAAb,CAFnB;MAGE1B,MAAM,EAAE,KAHV;MAIEjB,OAAO,EAAE,KAAKA;IAJhB,CADsC,CAAxC,CAD6C,CAU7C;;IACA,MAAMoD,GAAmB,GAAGC,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACE,MAAP,CAAcnC,OAAd,CAAd,EAAsC;MAChE+B,IAAI,EAAEH,UAD0D;MAEhEQ,OAAO,EAAE,CACP;QACEC,OAAO,EAAE,MAAM,KAAKC,UAAL,EADjB;QAEEC,UAAU,EAAE,CAACvC,OAAO,CAACwC,YAAT,CAFd;QAGEC,UAAU,EAAE,IAAAC,eAAA,EAAQ1C,OAAO,CAACsB,OAAhB,EAAyB,IAAAqB,+BAAA,EAAe3C,OAAO,CAACuB,OAAvB,EAAgC,SAAhC,CAAzB,CAHd;QAIEqB,gBAAgB,EAAE,MAAM,KAAKC,QAAL,EAJ1B;QAKEC,qBAAqB,EAAE;MALzB,CADO,CAFuD;MAYhE;MACAC,cAAc,EAAEC,SAbgD;MAchEC,oBAAoB,EAAE;IAd0C,CAAtC,CAA5B;IAiBA,MAAMzE,OAAO,GAAG,MAAM,KAAKF,QAAL,CAAc4E,UAAd,CAAyBlB,GAAzB,EAA8B,CACjDmB,MAAD,IAAYA,MAAM,CAACC,KAAP,CAAa,CAAC,IAAAC,6BAAA,GAAD,CAAb,CADsC,EAElD,GAAG,KAAK3E,YAF0C,CAA9B,CAAtB;IAKA,MAAM4E,YAAY,GAAG,MAAM9E,OAAO,CAACuB,GAAR,EAA3B;IACA,OAAOuD,YAAY,CAAC,CAAD,CAAnB;EACD;;EAEqB,MAARnC,QAAQ,CAACnB,OAAD,EAAsB;IAC1C;IACA,MAAMgC,GAAmB,GAAGC,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACE,MAAP,CAAcnC,OAAd,CAAd,kCACvBA,OADuB;MAE1BoC,OAAO,EAAE,CACP;QACEC,OAAO,EAAE,MAAM,KAAKkB,aAAL,EADjB;QAEEhB,UAAU,EAAE,CAACvC,OAAO,CAACwC,YAAT,CAFd;QAGEC,UAAU,EAAE,IAAAC,eAAA,EAAQ1C,OAAO,CAACsB,OAAhB,EAAyB,IAAAqB,+BAAA,EAAe3C,OAAO,CAACuB,OAAvB,EAAgC,KAAhC,CAAzB,CAHd;QAIEqB,gBAAgB,EAAE,MAAM,KAAKC,QAAL,EAJ1B;QAKEC,qBAAqB,EAAE;MALzB,CADO,CAFiB;MAY1B;MACAC,cAAc,EAAEC,SAbU;MAc1BC,oBAAoB,EAAE;IAdI,GAA5B;IAiBA,MAAMzE,OAAO,GAAG,MAAM,KAAKF,QAAL,CAAc4E,UAAd,CAAyBlB,GAAzB,EAA8B,CACjDmB,MAAD,IAAYA,MAAM,CAACC,KAAP,CAAa,CAAC,IAAAI,0BAAA,GAAD,CAAb,CADsC,EAElD,GAAG,KAAK9E,YAF0C,CAA9B,CAAtB;IAKA,MAAM4E,YAAY,GAAG,MAAM9E,OAAO,CAACuB,GAAR,EAA3B;IACA,OAAOuD,YAAY,CAAC,CAAD,CAAnB;EACD;;EAEU,MAALG,KAAK,CAACzD,OAAD,EAAyD;IAClE,MAAM4B,UAA+B,GAAG,CACtC;MACEC,KAAK,EAAE7B,OAAO,CAAC9B,IADjB;MAEE4D,eAAe,EAAE,IAAAC,eAAA,EAAK/B,OAAO,CAAC9B,IAAb,CAFnB;MAGE2B,MAAM,EAAE,KAHV;MAIEjB,OAAO,EAAE,KAAKA,OAJhB,CAKE;;IALF,CADsC,CAAxC;IASAqD,MAAM,CAACC,MAAP,CAAclC,OAAd,EAAuB;MACrB+B,IAAI,EAAEH;IADe,CAAvB;IAGA,MAAMpD,OAAO,GAAG,MAAM,KAAK0E,UAAL,CAAgBlD,OAAhB,CAAtB;IACA,MAAMsD,YAAY,GAAG,MAAM9E,OAAO,CAACuB,GAAR,EAA3B;IAEA,OAAO,IAAA2D,gCAAA,EAAeJ,YAAf,EAA6B;MAAEK,SAAS,EAAG,GAAE,KAAKC,YAAL,CAAkB5D,OAAO,CAAC6D,YAA1B,CAAwC,IAAG,KAAKC,GAAI;IAApE,CAA7B,CAAP;EACD;;EAEOZ,UAAU,CAAClD,OAAD,EAA2B;IAC3C,IAAI,KAAKxB,OAAT,EAAkB,OAAO,KAAKA,OAAZ;IAClB,OAAO,KAAKuF,iBAAL,CAAuB/D,OAAvB,CAAP;EACD;;EAC8B,MAAjB+D,iBAAiB,CAAC/D,OAAD,EAA2B;IACxD,MAAM;MAAEgE;IAAF,IAAchE,OAApB;IACA,MAAM1B,QAAkB,GAAG0B,OAAO,CAACiE,GAAnC;IACA,MAAMN,SAAS,GAAG,KAAKC,YAAL,CAAkB5D,OAAO,CAAC6D,YAA1B,CAAlB;IACA,MAAMpB,UAAU,GAAG,IAAAyB,YAAA,EAAKF,OAAO,CAACG,IAAb,EAAmBR,SAAnB,CAAnB;IACA,MAAM;MAAES;IAAF,IAAc9F,QAAQ,CAAC+F,WAAT,EAApB;IACA,MAAMC,aAAa,GAAGC,KAAK,CAACC,OAAN,CAAc,KAAKrG,KAAnB,IAA4B,KAAKA,KAAjC,GAAyC,MAAM,KAAKA,KAAL,EAArE;IACA,MAAMkE,OAAO,GAAGiC,aAAa,CAACG,GAAd,CAAmBtG,KAAD,IAAWuG,OAAO,CAAChC,OAAR,CAAiB,GAAEsB,OAAO,CAACG,IAAK,IAAGC,OAAQ,IAAG,IAAAO,gBAAA,EAASxG,KAAT,CAAgB,EAA9D,CAA7B,CAAhB;IACA,MAAMyG,SAAS,GAAG,IAAAV,YAAA,EAAKzB,UAAL,EAAiB,KAAKqB,GAAtB,CAAlB;IAEA,MAAMe,cAA8B,GAAG5C,MAAM,CAACC,MAAP,CAAclC,OAAd,EAAuB;MAC5DoC,OAAO,EAAE,CACP;QACEG,UAAU,EAAE,CAACyB,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEc,SAAV,CADd;QAEEzC,OAFF;QAGEI,UAHF;QAIEsC,WAAW,EAAEf,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEG,IAJxB;QAKEvB,gBAAgB,EAAE,MAAM,KAAKC,QAAL,EAL1B;QAMEC,qBAAqB,EAAE;MANzB,CADO,CADmD;MAW5D3E,KAAK,EAAE,EAXqD;MAY5D6G,QAAQ,EAAE,GAZkD;MAa5DC,QAAQ,EAAE;QACRC,SAAS,EAAG,iBAAgBlF,OAAO,CAAC9B,IAAK,EADjC;QAERiH,KAAK,EAAEnF,OAAO,CAACoF;MAFP;IAbkD,CAAvB,CAAvC;;IAmBA,MAAMC,kBAA4C,GAAIC,aAAD,IAAmB;MAAA;;MACtE,MAAMnC,MAAM,GAAGmC,aAAa,CAACC,WAAd,CAA0B,QAA1B,EAAoC;QACjDpB,IAAI,EAAES,SAD2C;QAEjDY,UAAU,EAAG,GAFoC;QAGjDC,QAAQ,EAAE;MAHuC,CAApC,CAAf;MAKA,IAAI,KAAKlH,SAAT,EAAoB4E,MAAM,CAACuC,SAAP,CAAiB,IAAAC,0BAAA,EAAgB,KAAKpH,SAArB,CAAjB;;MACpB,6BAAI4E,MAAM,CAACyC,GAAP,CAAWC,YAAf,kDAAI,sBAAyBC,SAA7B,EAAwC;QAAA;;QACtC,IAAAC,gBAAA,4BAAO5C,MAAM,CAACyC,GAAP,CAAWC,YAAlB,2DAAO,uBAAyBC,SAAhC,EAA4CA,SAAD,IAAe;UACxD,OAAOA,SAAS,CAAC7H,WAAV,CAAsBC,IAAtB,KAA+B,cAAtC;QACD,CAFD;QAIA,0BAAAiF,MAAM,CAACyC,GAAP,CAAWC,YAAX,kFAAyBC,SAAzB,CAAmCE,IAAnC,CAAwC,KAAKC,gBAAL,EAAxC;MACD;;MAED,OAAO9C,MAAP;IACD,CAhBD;;IAiBA,MAAMzE,YAAY,GAAG,CAAC2G,kBAAD,EAAqB,GAAG,KAAK3G,YAA7B,CAArB;IACA,MAAMF,OAAgB,GAAG,MAAMF,QAAQ,CAAC4E,UAAT,CAAoB2B,cAApB,EAAoCnG,YAApC,CAA/B;IACA,OAAOF,OAAP;EACD;;EAsDOoF,YAAY,CAACC,YAAD,EAAuB;IACzC,OAAO,IAAAK,YAAA,EAAKL,YAAL,EAAmB,KAAKqC,eAAxB,EAAyC,KAAKhI,IAA9C,CAAP;EACD;;EAEe,MAAVoE,UAAU,GAAsB;IACpC,IAAIiC,KAAK,CAACC,OAAN,CAAc,KAAKrG,KAAnB,CAAJ,EAA+B,OAAO,KAAKA,KAAZ;IAC/B,OAAO,KAAKA,KAAL,EAAP;EACD;;EAEkB,MAAboF,aAAa,GAAsB;IACvC,IAAI,CAAC,KAAKnF,GAAV,EAAe,MAAM,KAAI+H,oBAAJ,EAAa,wCAAb,CAAN;IACf,IAAI,OAAO,KAAK/H,GAAZ,KAAoB,QAAxB,EAAkC,OAAO,CAAC,KAAKA,GAAN,CAAP;IAClC,OAAO,CAAC,MAAM,KAAKA,GAAL,EAAP,CAAP;EACD;;EAEgC,MAAnBoC,mBAAmB,CAACR,OAAD,EAAiD;IAChF,MAAMqC,OAAO,GAAG,MAAM,KAAKC,UAAL,EAAtB;IACA,OAAOL,MAAM,CAACC,MAAP,CAAclC,OAAd,EAAuB;MAC5B7B,KAAK,EAAEkE,OADqB;MAE5B2C,QAAQ,EAAE,EAFkB;MAG5BQ,UAAU,EAAG,UAAS,KAAKtH,IAAK,EAHJ;MAI5B2D,KAAK,EAAE,KAAK3D,IAJgB;MAK5BU,OAAO,EAAE,KAAKA,OALc;MAM5BgE,gBAAgB,EAAE,MAAM,KAAKC,QAAL,EANI;MAO5BC,qBAAqB,EAAE;IAPK,CAAvB,CAAP;EASD;;EAEOD,QAAQ,GAAsB;IACpC,OAAO,KAAKvE,QAAL,CAAc8H,uBAAd,EAAP;EACD;;AA7R0C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Asset } from '@teambit/bundler';
|
|
2
|
+
import { Logger } from '@teambit/logger';
|
|
3
|
+
import type { HtmlAssets } from '@teambit/react.rendering.ssr';
|
|
4
|
+
declare type ExpressSsrOptions = {
|
|
5
|
+
name: string;
|
|
6
|
+
workdir: string;
|
|
7
|
+
port: number;
|
|
8
|
+
app: any;
|
|
9
|
+
assets: HtmlAssets;
|
|
10
|
+
logger?: Logger;
|
|
11
|
+
};
|
|
12
|
+
export declare function createExpressSsr({ name, workdir, port, app, assets, logger }: ExpressSsrOptions): import("express-serve-static-core").Express;
|
|
13
|
+
export declare function loadSsrApp(workdir: string, appName: string): Promise<any>;
|
|
14
|
+
export declare function parseAssets(assets: Asset[], publicPath?: string): HtmlAssets;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.array.iterator.js");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.promise.js");
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "__esModule", {
|
|
10
|
+
value: true
|
|
11
|
+
});
|
|
12
|
+
exports.createExpressSsr = createExpressSsr;
|
|
13
|
+
exports.loadSsrApp = loadSsrApp;
|
|
14
|
+
exports.parseAssets = parseAssets;
|
|
15
|
+
|
|
16
|
+
function _uiFoundationUiPages() {
|
|
17
|
+
const data = require("@teambit/ui-foundation.ui.pages.static-error");
|
|
18
|
+
|
|
19
|
+
_uiFoundationUiPages = function () {
|
|
20
|
+
return data;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
return data;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function _reactRendering() {
|
|
27
|
+
const data = require("@teambit/react.rendering.ssr");
|
|
28
|
+
|
|
29
|
+
_reactRendering = function () {
|
|
30
|
+
return data;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
return data;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function _express() {
|
|
37
|
+
const data = _interopRequireDefault(require("express"));
|
|
38
|
+
|
|
39
|
+
_express = function () {
|
|
40
|
+
return data;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function fs() {
|
|
47
|
+
const data = _interopRequireWildcard(require("fs-extra"));
|
|
48
|
+
|
|
49
|
+
fs = function () {
|
|
50
|
+
return data;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
return data;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function _path() {
|
|
57
|
+
const data = require("path");
|
|
58
|
+
|
|
59
|
+
_path = function () {
|
|
60
|
+
return data;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
return data;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function _urlJoin() {
|
|
67
|
+
const data = _interopRequireDefault(require("url-join"));
|
|
68
|
+
|
|
69
|
+
_urlJoin = function () {
|
|
70
|
+
return data;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
return data;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function _webpackAppSsr() {
|
|
77
|
+
const data = require("../webpack/webpack.app.ssr.config");
|
|
78
|
+
|
|
79
|
+
_webpackAppSsr = function () {
|
|
80
|
+
return data;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
return data;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
87
|
+
|
|
88
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
89
|
+
|
|
90
|
+
const MAGIC_FOLDER = 'public'; // idk where this is comping from
|
|
91
|
+
|
|
92
|
+
function createExpressSsr({
|
|
93
|
+
name,
|
|
94
|
+
workdir,
|
|
95
|
+
port,
|
|
96
|
+
app,
|
|
97
|
+
assets,
|
|
98
|
+
logger
|
|
99
|
+
}) {
|
|
100
|
+
const express = (0, _express().default)();
|
|
101
|
+
const publicFolder = (0, _path().resolve)(workdir, (0, _webpackAppSsr().calcOutputPath)(name, 'browser'), MAGIC_FOLDER);
|
|
102
|
+
express.use(_webpackAppSsr().PUBLIC_PATH, _express().default.static(publicFolder));
|
|
103
|
+
express.use((request, response, next) => {
|
|
104
|
+
if (request.query._rendering !== 'client') {
|
|
105
|
+
next();
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
response.sendFile((0, _path().resolve)(workdir, (0, _webpackAppSsr().calcOutputPath)(name, 'browser'), MAGIC_FOLDER, 'index.html'));
|
|
110
|
+
});
|
|
111
|
+
express.use(async (request, response) => {
|
|
112
|
+
logger === null || logger === void 0 ? void 0 : logger.info(`[react.application] [ssr] handling "${request.url}"`);
|
|
113
|
+
const browser = (0, _reactRendering().browserFromExpress)(request, port);
|
|
114
|
+
const session = {
|
|
115
|
+
assets,
|
|
116
|
+
browser,
|
|
117
|
+
request,
|
|
118
|
+
response
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
try {
|
|
122
|
+
// the app itself controls the response
|
|
123
|
+
await app(session);
|
|
124
|
+
logger === null || logger === void 0 ? void 0 : logger.console(`[react.application] [ssr] success "${request.url}"`);
|
|
125
|
+
} catch (error) {
|
|
126
|
+
logger === null || logger === void 0 ? void 0 : logger.consoleError(`[react.application] [ssr] error at "${request.url}"`, error);
|
|
127
|
+
response.status(500).send((0, _uiFoundationUiPages().serverError)());
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return express;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async function loadSsrApp(workdir, appName) {
|
|
134
|
+
const entryFile = (0, _path().resolve)(workdir, (0, _webpackAppSsr().calcOutputPath)(appName, 'ssr'), MAGIC_FOLDER, _webpackAppSsr().SSR_ENTRY_FILE);
|
|
135
|
+
if (!fs().existsSync(entryFile)) throw new Error(`expected ssr bundle entry file at "${entryFile}"`);
|
|
136
|
+
const entry = await Promise.resolve(`${entryFile}`).then(s => _interopRequireWildcard(require(s)));
|
|
137
|
+
const app = entry === null || entry === void 0 ? void 0 : entry.default;
|
|
138
|
+
if (!app) throw new Error(`bundle entry file has no default export (at "${entryFile}")`);
|
|
139
|
+
return app;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function parseAssets(assets, publicPath = _webpackAppSsr().PUBLIC_PATH) {
|
|
143
|
+
const deadAssets = assets.filter(x => !x.name);
|
|
144
|
+
if (deadAssets.length > 0) throw new Error('missing some build assets (maybe need to turn on cachedAssets, etc)');
|
|
145
|
+
return {
|
|
146
|
+
css: assets.map(x => x.name).filter(name => name === null || name === void 0 ? void 0 : name.endsWith('.css')).map(name => (0, _urlJoin().default)(publicPath, name)),
|
|
147
|
+
js: assets.map(x => x.name).filter(name => name === null || name === void 0 ? void 0 : name.endsWith('.js')).map(name => (0, _urlJoin().default)(publicPath, name))
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
//# sourceMappingURL=ssr-express.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MAGIC_FOLDER","createExpressSsr","name","workdir","port","app","assets","logger","express","Express","publicFolder","resolve","calcOutputPath","use","PUBLIC_PATH","static","request","response","next","query","_rendering","sendFile","info","url","browser","browserFromExpress","session","console","error","consoleError","status","send","serverError","loadSsrApp","appName","entryFile","SSR_ENTRY_FILE","fs","existsSync","Error","entry","default","parseAssets","publicPath","deadAssets","filter","x","length","css","map","endsWith","urlJoin","js"],"sources":["ssr-express.ts"],"sourcesContent":["import { Asset } from '@teambit/bundler';\nimport { Logger } from '@teambit/logger';\nimport { serverError } from '@teambit/ui-foundation.ui.pages.static-error';\nimport { browserFromExpress } from '@teambit/react.rendering.ssr';\nimport type { HtmlAssets, SsrSession } from '@teambit/react.rendering.ssr';\n\nimport Express from 'express';\nimport * as fs from 'fs-extra';\nimport { resolve } from 'path';\nimport urlJoin from 'url-join';\n\nimport { calcOutputPath, PUBLIC_PATH, SSR_ENTRY_FILE } from '../webpack/webpack.app.ssr.config';\n\nconst MAGIC_FOLDER = 'public'; // idk where this is comping from\n\ntype ExpressSsrOptions = {\n name: string;\n workdir: string;\n port: number;\n app: any;\n assets: HtmlAssets;\n logger?: Logger;\n};\n\nexport function createExpressSsr({ name, workdir, port, app, assets, logger }: ExpressSsrOptions) {\n const express = Express();\n\n const publicFolder = resolve(workdir, calcOutputPath(name, 'browser'), MAGIC_FOLDER);\n\n express.use(PUBLIC_PATH, Express.static(publicFolder));\n express.use((request, response, next) => {\n if (request.query._rendering !== 'client') {\n next();\n return;\n }\n response.sendFile(resolve(workdir, calcOutputPath(name, 'browser'), MAGIC_FOLDER, 'index.html'));\n });\n express.use(async (request, response) => {\n logger?.info(`[react.application] [ssr] handling \"${request.url}\"`);\n const browser = browserFromExpress(request, port);\n const session: SsrSession = { assets, browser, request, response };\n\n try {\n // the app itself controls the response\n await app(session);\n logger?.console(`[react.application] [ssr] success \"${request.url}\"`);\n } catch (error: any) {\n logger?.consoleError(`[react.application] [ssr] error at \"${request.url}\"`, error);\n response.status(500).send(serverError());\n }\n });\n\n return express;\n}\n\nexport async function loadSsrApp(workdir: string, appName: string) {\n const entryFile = resolve(workdir, calcOutputPath(appName, 'ssr'), MAGIC_FOLDER, SSR_ENTRY_FILE);\n if (!fs.existsSync(entryFile)) throw new Error(`expected ssr bundle entry file at \"${entryFile}\"`);\n\n const entry = await import(entryFile);\n const app = entry?.default;\n if (!app) throw new Error(`bundle entry file has no default export (at \"${entryFile}\")`);\n\n return app;\n}\n\nexport function parseAssets(assets: Asset[], publicPath = PUBLIC_PATH): HtmlAssets {\n const deadAssets = assets.filter((x) => !x.name);\n if (deadAssets.length > 0) throw new Error('missing some build assets (maybe need to turn on cachedAssets, etc)');\n\n return {\n css: assets\n .map((x) => x.name)\n .filter((name) => name?.endsWith('.css'))\n .map((name) => urlJoin(publicPath, name)),\n js: assets\n .map((x) => x.name)\n .filter((name) => name?.endsWith('.js'))\n .map((name) => urlJoin(publicPath, name)),\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.addDevServer = addDevServer;
|
|
7
|
+
exports.setOutput = setOutput;
|
|
8
|
+
|
|
9
|
+
function addDevServer(configMutator) {
|
|
10
|
+
return configMutator.addTopLevel('devServer', {
|
|
11
|
+
historyApiFallback: {
|
|
12
|
+
index: '/index.html',
|
|
13
|
+
disableDotRule: true
|
|
14
|
+
},
|
|
15
|
+
headers: {
|
|
16
|
+
'Access-Control-Allow-Origin': '*'
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function setOutput(configMutator) {
|
|
22
|
+
if (!configMutator.raw.output) configMutator.raw.output = {};
|
|
23
|
+
configMutator.raw.output.publicPath = '/';
|
|
24
|
+
return configMutator;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=mutators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["addDevServer","configMutator","addTopLevel","historyApiFallback","index","disableDotRule","headers","setOutput","raw","output","publicPath"],"sources":["mutators.ts"],"sourcesContent":["import { WebpackConfigMutator } from '@teambit/webpack';\n\nexport function addDevServer(configMutator: WebpackConfigMutator) {\n return configMutator.addTopLevel('devServer', {\n historyApiFallback: {\n index: '/index.html',\n disableDotRule: true,\n },\n headers: {\n 'Access-Control-Allow-Origin': '*',\n },\n });\n}\n\nexport function setOutput(configMutator: WebpackConfigMutator) {\n if (!configMutator.raw.output) configMutator.raw.output = {};\n configMutator.raw.output.publicPath = '/';\n\n return configMutator;\n}\n"],"mappings":";;;;;;;;AAEO,SAASA,YAAT,CAAsBC,aAAtB,EAA2D;EAChE,OAAOA,aAAa,CAACC,WAAd,CAA0B,WAA1B,EAAuC;IAC5CC,kBAAkB,EAAE;MAClBC,KAAK,EAAE,aADW;MAElBC,cAAc,EAAE;IAFE,CADwB;IAK5CC,OAAO,EAAE;MACP,+BAA+B;IADxB;EALmC,CAAvC,CAAP;AASD;;AAEM,SAASC,SAAT,CAAmBN,aAAnB,EAAwD;EAC7D,IAAI,CAACA,aAAa,CAACO,GAAd,CAAkBC,MAAvB,EAA+BR,aAAa,CAACO,GAAd,CAAkBC,MAAlB,GAA2B,EAA3B;EAC/BR,aAAa,CAACO,GAAd,CAAkBC,MAAlB,CAAyBC,UAAzB,GAAsC,GAAtC;EAEA,OAAOT,aAAP;AACD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Configuration } from 'webpack';
|
|
2
|
+
export declare const SSR_ENTRY_FILE = "index.js";
|
|
3
|
+
/** _external_ base url for static files. (is not a folder)
|
|
4
|
+
* @example
|
|
5
|
+
* "http://localhost:3000/public/main.88a88d47d86aaabc0230.js"
|
|
6
|
+
*/
|
|
7
|
+
export declare const PUBLIC_PATH = "/public";
|
|
8
|
+
declare enum Targets {
|
|
9
|
+
ssr = "ssr",
|
|
10
|
+
browser = "browser"
|
|
11
|
+
}
|
|
12
|
+
export declare function calcOutputPath(appName: string, target: Targets | keyof typeof Targets): string;
|
|
13
|
+
export declare function clientConfig(): Configuration;
|
|
14
|
+
export declare function ssrConfig(): Configuration;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SSR_ENTRY_FILE = exports.PUBLIC_PATH = void 0;
|
|
7
|
+
exports.calcOutputPath = calcOutputPath;
|
|
8
|
+
exports.clientConfig = clientConfig;
|
|
9
|
+
exports.ssrConfig = ssrConfig;
|
|
10
|
+
|
|
11
|
+
function _path() {
|
|
12
|
+
const data = require("path");
|
|
13
|
+
|
|
14
|
+
_path = function () {
|
|
15
|
+
return data;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const OUTPUT_FOLDER = 'public/bit-apps';
|
|
22
|
+
const SSR_ENTRY_FILE = 'index.js';
|
|
23
|
+
/** _external_ base url for static files. (is not a folder)
|
|
24
|
+
* @example
|
|
25
|
+
* "http://localhost:3000/public/main.88a88d47d86aaabc0230.js"
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
exports.SSR_ENTRY_FILE = SSR_ENTRY_FILE;
|
|
29
|
+
const PUBLIC_PATH = '/public';
|
|
30
|
+
exports.PUBLIC_PATH = PUBLIC_PATH;
|
|
31
|
+
var Targets;
|
|
32
|
+
|
|
33
|
+
(function (Targets) {
|
|
34
|
+
Targets["ssr"] = "ssr";
|
|
35
|
+
Targets["browser"] = "browser";
|
|
36
|
+
})(Targets || (Targets = {}));
|
|
37
|
+
|
|
38
|
+
function calcOutputPath(appName, target) {
|
|
39
|
+
return (0, _path().join)(OUTPUT_FOLDER, appName, target);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function clientConfig() {
|
|
43
|
+
return {
|
|
44
|
+
output: {
|
|
45
|
+
publicPath: PUBLIC_PATH,
|
|
46
|
+
filename: '[name].[chunkhash].js'
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function ssrConfig() {
|
|
52
|
+
return {
|
|
53
|
+
target: 'node',
|
|
54
|
+
devtool: 'eval-cheap-source-map',
|
|
55
|
+
output: {
|
|
56
|
+
libraryTarget: 'commonjs',
|
|
57
|
+
filename: SSR_ENTRY_FILE
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=webpack.app.ssr.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["OUTPUT_FOLDER","SSR_ENTRY_FILE","PUBLIC_PATH","Targets","calcOutputPath","appName","target","join","clientConfig","output","publicPath","filename","ssrConfig","devtool","libraryTarget"],"sources":["webpack.app.ssr.config.ts"],"sourcesContent":["import { join } from 'path';\nimport type { Configuration } from 'webpack';\n\nconst OUTPUT_FOLDER = 'public/bit-apps';\nexport const SSR_ENTRY_FILE = 'index.js';\n/** _external_ base url for static files. (is not a folder)\n * @example\n * \"http://localhost:3000/public/main.88a88d47d86aaabc0230.js\"\n */\nexport const PUBLIC_PATH = '/public';\n\nenum Targets {\n ssr = 'ssr',\n browser = 'browser',\n}\n\nexport function calcOutputPath(appName: string, target: Targets | keyof typeof Targets) {\n return join(OUTPUT_FOLDER, appName, target);\n}\n\nexport function clientConfig(): Configuration {\n return {\n output: { publicPath: PUBLIC_PATH, filename: '[name].[chunkhash].js' },\n };\n}\n\nexport function ssrConfig(): Configuration {\n return {\n target: 'node',\n devtool: 'eval-cheap-source-map',\n\n output: {\n libraryTarget: 'commonjs',\n filename: SSR_ENTRY_FILE,\n },\n };\n}\n"],"mappings":";;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA,MAAMA,aAAa,GAAG,iBAAtB;AACO,MAAMC,cAAc,GAAG,UAAvB;AACP;AACA;AACA;AACA;;;AACO,MAAMC,WAAW,GAAG,SAApB;;IAEFC,O;;WAAAA,O;EAAAA,O;EAAAA,O;GAAAA,O,KAAAA,O;;AAKE,SAASC,cAAT,CAAwBC,OAAxB,EAAyCC,MAAzC,EAAiF;EACtF,OAAO,IAAAC,YAAA,EAAKP,aAAL,EAAoBK,OAApB,EAA6BC,MAA7B,CAAP;AACD;;AAEM,SAASE,YAAT,GAAuC;EAC5C,OAAO;IACLC,MAAM,EAAE;MAAEC,UAAU,EAAER,WAAd;MAA2BS,QAAQ,EAAE;IAArC;EADH,CAAP;AAGD;;AAEM,SAASC,SAAT,GAAoC;EACzC,OAAO;IACLN,MAAM,EAAE,MADH;IAELO,OAAO,EAAE,uBAFJ;IAILJ,MAAM,EAAE;MACNK,aAAa,EAAE,UADT;MAENH,QAAQ,EAAEV;IAFJ;EAJH,CAAP;AASD"}
|
|
@@ -588,7 +588,7 @@ class ReactMain {
|
|
|
588
588
|
static async provider([envs, jestAspect, tsAspect, compiler, webpack, workspace, graphql, pkg, tester, eslint, prettier, application, generator, dependencyResolver, loggerMain], config) {
|
|
589
589
|
const logger = loggerMain.createLogger(_react().ReactAspect.id);
|
|
590
590
|
const reactEnv = new (_react2().ReactEnv)(jestAspect, tsAspect, compiler, webpack, workspace, pkg, tester, config, eslint, prettier, dependencyResolver, logger, _compiler().CompilerAspect.id);
|
|
591
|
-
const appType = new (_web().ReactAppType)('react-app', reactEnv);
|
|
591
|
+
const appType = new (_web().ReactAppType)('react-app', reactEnv, logger);
|
|
592
592
|
const react = new ReactMain(reactEnv, envs, application, appType);
|
|
593
593
|
graphql.register((0, _react3().reactSchema)(react));
|
|
594
594
|
envs.registerEnv(reactEnv);
|