@anansi/core 0.7.2 → 0.8.0
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/CHANGELOG.md +30 -0
- package/dist/server.js +27 -23
- package/dist/server.js.map +1 -1
- package/lib/scripts/index.d.ts +3 -0
- package/lib/scripts/index.d.ts.map +1 -0
- package/lib/scripts/index.js +15 -0
- package/lib/scripts/serve.d.ts +4 -0
- package/lib/scripts/serve.d.ts.map +1 -0
- package/lib/scripts/serve.js +162 -0
- package/lib/scripts/startDevserver.d.ts +1 -0
- package/lib/scripts/startDevserver.d.ts.map +1 -1
- package/lib/scripts/startDevserver.js +175 -161
- package/lib/spouts/DocumentComponent.d.ts +3 -1
- package/lib/spouts/DocumentComponent.d.ts.map +1 -1
- package/lib/spouts/DocumentComponent.js +10 -6
- package/lib/spouts/document.server.d.ts +2 -0
- package/lib/spouts/document.server.d.ts.map +1 -1
- package/lib/spouts/document.server.js +1 -1
- package/package.json +8 -3
- package/src/scripts/index.ts +2 -0
- package/src/scripts/serve.ts +168 -0
- package/src/scripts/startDevserver.ts +220 -195
- package/src/spouts/DocumentComponent.tsx +8 -2
- package/src/spouts/document.server.tsx +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,36 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.8.0](https://github.com/ntucker/anansi/compare/@anansi/core@0.7.4...@anansi/core@0.8.0) (2022-05-29)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### 🚀 Features
|
|
10
|
+
|
|
11
|
+
* Add anansi serve command ([#1525](https://github.com/ntucker/anansi/issues/1525)) ([ac5a396](https://github.com/ntucker/anansi/commit/ac5a396f9640ce18058813c1594d49367a8aa468))
|
|
12
|
+
* Add charSet option to documentSpout ([51d3168](https://github.com/ntucker/anansi/commit/51d31681d27144d06b8ed4c7da9aae43fd10f12b))
|
|
13
|
+
* Add production node service ([bceeb56](https://github.com/ntucker/anansi/commit/bceeb56c23c8f8c3dc4a15d35dc8877f277e3d2f))
|
|
14
|
+
* Handle devserver proxy ([e7c5b38](https://github.com/ntucker/anansi/commit/e7c5b38cdb60b236db15ffb28622889b0b771515))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### [0.7.4](https://github.com/ntucker/anansi/compare/@anansi/core@0.7.3...@anansi/core@0.7.4) (2022-05-28)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### 💅 Enhancement
|
|
22
|
+
|
|
23
|
+
* Stall SSR requests until build is ready ([fe2616a](https://github.com/ntucker/anansi/commit/fe2616ac2d957f7243310d896f4a2ad5cb7d910e))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### [0.7.3](https://github.com/ntucker/anansi/compare/@anansi/core@0.7.2...@anansi/core@0.7.3) (2022-05-28)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### 💅 Enhancement
|
|
31
|
+
|
|
32
|
+
* Require, then import fresh ([7de7d8d](https://github.com/ntucker/anansi/commit/7de7d8d73e533b69bdf78698965121a35375692c))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
6
36
|
### [0.7.2](https://github.com/ntucker/anansi/compare/@anansi/core@0.7.1...@anansi/core@0.7.2) (2022-05-28)
|
|
7
37
|
|
|
8
38
|
|
package/dist/server.js
CHANGED
|
@@ -128,51 +128,62 @@ function laySpouts(spouts, {
|
|
|
128
128
|
const external_react_namespaceObject = require("react");
|
|
129
129
|
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_namespaceObject);
|
|
130
130
|
;// CONCATENATED MODULE: ./src/spouts/DocumentComponent.tsx
|
|
131
|
-
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/DocumentComponent.tsx"
|
|
131
|
+
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/DocumentComponent.tsx",
|
|
132
|
+
_process$env$WEBPACK_;
|
|
133
|
+
|
|
132
134
|
|
|
133
135
|
function Document({
|
|
134
136
|
assets,
|
|
135
137
|
head,
|
|
136
138
|
children,
|
|
137
139
|
title,
|
|
138
|
-
rootId
|
|
140
|
+
rootId,
|
|
141
|
+
charSet
|
|
139
142
|
}) {
|
|
140
143
|
return /*#__PURE__*/external_react_default().createElement("html", {
|
|
141
144
|
__self: this,
|
|
142
145
|
__source: {
|
|
143
146
|
fileName: _jsxFileName,
|
|
144
|
-
lineNumber:
|
|
147
|
+
lineNumber: 19,
|
|
145
148
|
columnNumber: 5
|
|
146
149
|
}
|
|
147
150
|
}, /*#__PURE__*/external_react_default().createElement("head", {
|
|
148
151
|
__self: this,
|
|
149
152
|
__source: {
|
|
150
153
|
fileName: _jsxFileName,
|
|
151
|
-
lineNumber:
|
|
154
|
+
lineNumber: 20,
|
|
152
155
|
columnNumber: 7
|
|
153
156
|
}
|
|
154
|
-
},
|
|
157
|
+
}, /*#__PURE__*/external_react_default().createElement("meta", {
|
|
158
|
+
charSet: charSet,
|
|
159
|
+
__self: this,
|
|
160
|
+
__source: {
|
|
161
|
+
fileName: _jsxFileName,
|
|
162
|
+
lineNumber: 21,
|
|
163
|
+
columnNumber: 9
|
|
164
|
+
}
|
|
165
|
+
}), head, assets.map((asset, i) => /*#__PURE__*/external_react_default().createElement("link", {
|
|
155
166
|
key: i,
|
|
156
167
|
rel: "preload",
|
|
157
168
|
...asset,
|
|
158
169
|
__self: this,
|
|
159
170
|
__source: {
|
|
160
171
|
fileName: _jsxFileName,
|
|
161
|
-
lineNumber:
|
|
172
|
+
lineNumber: 24,
|
|
162
173
|
columnNumber: 11
|
|
163
174
|
}
|
|
164
175
|
})), /*#__PURE__*/external_react_default().createElement("title", {
|
|
165
176
|
__self: this,
|
|
166
177
|
__source: {
|
|
167
178
|
fileName: _jsxFileName,
|
|
168
|
-
lineNumber:
|
|
179
|
+
lineNumber: 26,
|
|
169
180
|
columnNumber: 9
|
|
170
181
|
}
|
|
171
182
|
}, title)), /*#__PURE__*/external_react_default().createElement("body", {
|
|
172
183
|
__self: this,
|
|
173
184
|
__source: {
|
|
174
185
|
fileName: _jsxFileName,
|
|
175
|
-
lineNumber:
|
|
186
|
+
lineNumber: 28,
|
|
176
187
|
columnNumber: 7
|
|
177
188
|
}
|
|
178
189
|
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
@@ -180,7 +191,7 @@ function Document({
|
|
|
180
191
|
__self: this,
|
|
181
192
|
__source: {
|
|
182
193
|
fileName: _jsxFileName,
|
|
183
|
-
lineNumber:
|
|
194
|
+
lineNumber: 29,
|
|
184
195
|
columnNumber: 9
|
|
185
196
|
}
|
|
186
197
|
}, children), /*#__PURE__*/external_react_default().createElement("script", {
|
|
@@ -190,7 +201,7 @@ function Document({
|
|
|
190
201
|
__self: this,
|
|
191
202
|
__source: {
|
|
192
203
|
fileName: _jsxFileName,
|
|
193
|
-
lineNumber:
|
|
204
|
+
lineNumber: 31,
|
|
194
205
|
columnNumber: 9
|
|
195
206
|
}
|
|
196
207
|
}), assets.filter(({
|
|
@@ -204,39 +215,32 @@ function Document({
|
|
|
204
215
|
__self: this,
|
|
205
216
|
__source: {
|
|
206
217
|
fileName: _jsxFileName,
|
|
207
|
-
lineNumber:
|
|
218
|
+
lineNumber: 39,
|
|
208
219
|
columnNumber: 13
|
|
209
220
|
}
|
|
210
221
|
}))));
|
|
211
222
|
}
|
|
212
223
|
Document.defaultProps = {
|
|
213
224
|
head: /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("meta", {
|
|
214
|
-
charSet: "utf-8",
|
|
215
|
-
__self: undefined,
|
|
216
|
-
__source: {
|
|
217
|
-
fileName: _jsxFileName,
|
|
218
|
-
lineNumber: 45,
|
|
219
|
-
columnNumber: 7
|
|
220
|
-
}
|
|
221
|
-
}), /*#__PURE__*/external_react_default().createElement("meta", {
|
|
222
225
|
name: "viewport",
|
|
223
226
|
content: "width=device-width, initial-scale=1",
|
|
224
227
|
__self: undefined,
|
|
225
228
|
__source: {
|
|
226
229
|
fileName: _jsxFileName,
|
|
227
|
-
lineNumber:
|
|
230
|
+
lineNumber: 48,
|
|
228
231
|
columnNumber: 7
|
|
229
232
|
}
|
|
230
233
|
}), /*#__PURE__*/external_react_default().createElement("link", {
|
|
231
234
|
rel: "shortcut icon",
|
|
232
|
-
href:
|
|
235
|
+
href: `${(_process$env$WEBPACK_ = process.env.WEBPACK_PUBLIC_PATH) != null ? _process$env$WEBPACK_ : '/'}favicon.ico`,
|
|
233
236
|
__self: undefined,
|
|
234
237
|
__source: {
|
|
235
238
|
fileName: _jsxFileName,
|
|
236
|
-
lineNumber:
|
|
239
|
+
lineNumber: 49,
|
|
237
240
|
columnNumber: 7
|
|
238
241
|
}
|
|
239
242
|
})),
|
|
243
|
+
charSet: 'utf-8',
|
|
240
244
|
rootId: 'anansi-root'
|
|
241
245
|
};
|
|
242
246
|
;// CONCATENATED MODULE: ./src/spouts/document.server.tsx
|
|
@@ -289,7 +293,7 @@ function DocumentSpout(options) {
|
|
|
289
293
|
__self: this,
|
|
290
294
|
__source: {
|
|
291
295
|
fileName: document_server_jsxFileName,
|
|
292
|
-
lineNumber:
|
|
296
|
+
lineNumber: 54,
|
|
293
297
|
columnNumber: 14
|
|
294
298
|
}
|
|
295
299
|
}, nextProps.app)
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","mappings":";;AAAA;AACA;AACA;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACNA;;ACAA;AAKA;AAIA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AAEA;;AAnBA;AAuBA;;AACA;AACA;;AACA;AACA;;AC3DA;;;;;ACQA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AADA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AARA;;;ACzCA;AAKA;AAOA;AAKA;AAGA;AAAA;;AACA;AAEA;AAEA;AAOA;;AACA;AACA;AAAA;;AAEA;AACA;AACA;;AACA;AAFA;AAKA;AAGA;AAAA;AAGA;;AAAA;AAGA;AAHA;;AASA;AAQA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AAGA;AACA;AACA;AAJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAHA;AAnDA;AAHA;AAqEA;;AAEA;AACA;AAEA;;AAAA;AAAA;AAGA;;AC9FA;;ACAA;;;;ACAA;AACA;AAMA;AAGA;AAAA;AAEA;AAGA;AACA;AAIA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAHA;AAKA;AACA;AACA;;AC7BA;;ACAA;;;ACAA;AACA;AACA;AAMA;AAKA;AAGA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;;AAEA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJA;AAMA;AACA;AACA;;ACvCA;AACA;AAOA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA","sources":["/home/ntucker/src/anansi/packages/core/webpack/bootstrap","/home/ntucker/src/anansi/packages/core/webpack/runtime/compat get default export","/home/ntucker/src/anansi/packages/core/webpack/runtime/define property getters","/home/ntucker/src/anansi/packages/core/webpack/runtime/hasOwnProperty shorthand","/home/ntucker/src/anansi/packages/core/webpack/runtime/make namespace object","/home/ntucker/src/anansi/packages/core/external commonjs \"react-dom/server\"","/home/ntucker/src/anansi/packages/core/src/laySpouts.tsx","/home/ntucker/src/anansi/packages/core/external commonjs \"react\"","/home/ntucker/src/anansi/packages/core/src/spouts/DocumentComponent.tsx","/home/ntucker/src/anansi/packages/core/src/spouts/document.server.tsx","/home/ntucker/src/anansi/packages/core/external commonjs \"@rest-hooks/core\"","/home/ntucker/src/anansi/packages/core/external commonjs \"@rest-hooks/ssr\"","/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.server.tsx","/home/ntucker/src/anansi/packages/core/external commonjs \"@anansi/router\"","/home/ntucker/src/anansi/packages/core/external commonjs \"history\"","/home/ntucker/src/anansi/packages/core/src/spouts/router.server.tsx","/home/ntucker/src/anansi/packages/core/src/spouts/prefetch.server.tsx","/home/ntucker/src/anansi/packages/core/src/index.server.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react-dom/server\");","import { renderToPipeableStream as reactRender } from 'react-dom/server';\n\nimport { Render } from './scripts/types';\nimport { ServerProps } from './spouts/types';\n\nexport default function laySpouts(\n spouts: (props: ServerProps) => Promise<{\n app: JSX.Element;\n }>,\n { timeoutMS = 200 }: { timeoutMS?: number } = {},\n) {\n const render: Render = async (clientManifest, req, res) => {\n const { app } = await spouts({ clientManifest, req, res });\n let didError = false;\n const { pipe, abort } = reactRender(\n app,\n /*\n This is not documented, so included the types here for reference:\ntype Options = {|\n identifierPrefix?: string,\n namespaceURI?: string,\n nonce?: string,\n bootstrapScriptContent?: string,\n bootstrapScripts?: Array<string>,\n bootstrapModules?: Array<string>,\n progressiveChunkSize?: number,\n onShellReady?: () => void,\n onShellError?: () => void,\n onAllReady?: () => void,\n onError?: (error: mixed) => void,\n|};\n */\n {\n //bootstrapScripts: assets.filter(asset => asset.endsWith('.js')),\n onShellReady() {\n //managers.forEach(manager => manager.cleanup());\n // If something errored before we started streaming, we set the error code appropriately.\n res.statusCode = didError ? 500 : 200;\n res.setHeader('Content-type', 'text/html');\n pipe(res);\n },\n onShellError() {\n didError = true;\n res.statusCode = 500;\n pipe(res);\n },\n onError(x: any) {\n didError = true;\n console.error(x);\n res.statusCode = 500;\n //pipe(res); Removing this avoids, \"React currently only supports piping to one writable stream.\"\n },\n },\n );\n // Abandon and switch to client rendering if enough time passes.\n // Try lowering this to see the client recover.\n setTimeout(abort, timeoutMS);\n };\n return render;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react\");","type Props = {\n children: React.ReactNode;\n assets: { href: string; as?: string; rel?: string }[];\n head: React.ReactNode;\n title: string;\n rootId: string;\n};\n\nexport default function Document({\n assets,\n head,\n children,\n title,\n rootId,\n}: Props) {\n return (\n <html>\n <head>\n {head}\n {assets.map((asset, i) => (\n <link key={i} rel=\"preload\" {...asset} />\n ))}\n <title>{title}</title>\n </head>\n <body>\n <div id={rootId}>{children}</div>\n {/* this ensures the client can hydrate the assets prop */}\n <script\n dangerouslySetInnerHTML={{\n __html: `assetManifest = ${JSON.stringify(assets)};`,\n }}\n />\n {assets\n .filter(({ href }) => href.endsWith('.js'))\n .map(({ href }, i) => (\n <script key={i} src={href} async />\n ))}\n </body>\n </html>\n );\n}\nDocument.defaultProps = {\n head: (\n <>\n <meta charSet=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <link rel=\"shortcut icon\" href=\"/assets/favicon.ico\" />\n </>\n ),\n rootId: 'anansi-root',\n};\n","import React from 'react';\nimport type { Route } from '@anansi/router';\nimport { StatsChunkGroup } from 'webpack';\n\nimport type { ServerProps, ResolveProps } from './types';\nimport Document from './DocumentComponent';\n\ntype NeededProps = {\n matchedRoutes: Route<any>[];\n title?: string;\n} & ResolveProps;\n\nexport default function DocumentSpout(options: {\n head?: React.ReactNode;\n title: string;\n rootId: string;\n}) {\n return function <T extends NeededProps>(\n next: (props: ServerProps) => Promise<T>,\n ) {\n return async (props: ServerProps) => {\n const nextProps = await next(props);\n\n const publicPath = props.clientManifest.publicPath;\n\n if (\n Object.keys(props.clientManifest?.entrypoints ?? {}).length < 1 ||\n publicPath === undefined\n )\n throw new Error('Manifest missing entries needed');\n\n // TODO: consider using this package for build stats in future:\n // https://github.com/facebook/react/tree/main/packages/react-server-dom-webpack\n const assetMap = (assets: { name: string; size?: number }[]) =>\n assets.map(({ name }) => `${publicPath}${name}`);\n\n const assetList: string[] = [];\n Object.values(props.clientManifest?.entrypoints ?? {}).forEach(\n entrypoint => {\n assetList.push(...assetMap(entrypoint.assets ?? []));\n },\n );\n new Set(\n assetMap(\n Object.values(props.clientManifest.namedChunkGroups ?? {})\n .filter(({ name }) =>\n nextProps.matchedRoutes.some(route => name?.includes(route.name)),\n )\n .flatMap(chunk => [\n ...(chunk.assets ?? []),\n // any chunk preloads\n ...childrenAssets(chunk),\n ]),\n ),\n ).forEach(asset => assetList.push(asset));\n\n // find additional assets to preload based on matched route\n const assets: {\n href: string;\n as?: string | undefined;\n rel?: string | undefined;\n }[] = assetList\n .filter(asset => !asset.endsWith('.hot-update.js'))\n .map(asset =>\n asset.endsWith('.css')\n ? { href: asset, rel: 'stylesheet' }\n : asset.endsWith('.js')\n ? { href: asset, as: 'script' }\n : { href: asset },\n );\n\n return {\n ...nextProps,\n app: (\n <Document\n {...options}\n title={nextProps.title ?? options.title}\n assets={assets}\n rootId={options.rootId}\n >\n {nextProps.app}\n </Document>\n ),\n };\n };\n };\n}\n\nfunction childrenAssets(chunk: StatsChunkGroup) {\n return chunk.children\n ? Object.values(chunk.children).flatMap(preload =>\n preload.flatMap(c => c.assets ?? []),\n )\n : [];\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@rest-hooks/core\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@rest-hooks/ssr\");","import { Manager, NetworkManager } from '@rest-hooks/core';\nimport { createPersistedStore } from '@rest-hooks/ssr';\n\nimport type { ResolveProps, ServerProps } from './types';\n\ntype NeededProps = ResolveProps;\n\nexport default function restHooksSpout(\n options: {\n getManagers: () => Manager[];\n } = { getManagers: () => [new NetworkManager()] },\n) {\n return function <T extends NeededProps>(\n next: (props: ServerProps) => Promise<T>,\n ) {\n return async (props: ServerProps) => {\n const [ServerCacheProvider, controller] = createPersistedStore(\n options.getManagers(),\n );\n\n const nextProps = await next(props);\n\n return {\n ...nextProps,\n controller,\n app: <ServerCacheProvider>{nextProps.app}</ServerCacheProvider>,\n };\n };\n };\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@anansi/router\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"history\");","import { Route, RouteProvider, RouteController } from '@anansi/router';\nimport React from 'react';\nimport { createMemoryHistory } from 'history';\n\nimport type { ResolveProps, ServerProps, CreateRouter } from './types';\n\ntype NeededProps = ResolveProps;\n\nexport default function routerSpout<ResolveWith>(options: {\n resolveWith?: any;\n useResolveWith: () => ResolveWith;\n createRouter: CreateRouter<ResolveWith>;\n}) {\n const createRouteComponent = (\n router: RouteController<Route<ResolveWith, any>>,\n ) =>\n function Router({ children }: { children: React.ReactNode }) {\n const resolveWith = options.useResolveWith();\n\n return (\n <RouteProvider router={router} resolveWith={resolveWith}>\n {children}\n </RouteProvider>\n );\n };\n\n return function <T extends NeededProps>(\n next: (props: ServerProps) => Promise<T>,\n ) {\n return async (props: ServerProps) => {\n const url = props.req.url || '';\n const router = options.createRouter(\n createMemoryHistory({ initialEntries: [url] }),\n );\n const matchedRoutes: Route<ResolveWith>[] = router.getMatchedRoutes(url);\n\n const nextProps = await next(props);\n\n const Router = createRouteComponent(router);\n return {\n ...nextProps,\n matchedRoutes,\n router,\n app: <Router>{nextProps.app}</Router>,\n };\n };\n };\n}\n","import { Route } from '@anansi/router';\n\nimport type { ResolveProps, ServerProps } from './types';\n\ntype NeededProps<RouteWith> = {\n matchedRoutes: Route<RouteWith>[];\n} & ResolveProps;\n\nexport default function prefetchSpout<F extends string>(field: F) {\n return function <RouteWith, T extends NeededProps<RouteWith>>(\n next: (props: ServerProps) => Promise<\n {\n [K in F]: RouteWith;\n } & T\n >,\n ) {\n return async (props: ServerProps) => {\n const nextProps = await next(props);\n\n try {\n const toFetch: Promise<unknown>[] = [];\n nextProps.matchedRoutes.forEach(route => {\n if (typeof route.resolveData === 'function') {\n toFetch.push(route.resolveData(nextProps[field], route));\n }\n });\n await Promise.all(toFetch);\n } catch (e) {\n console.error(e);\n }\n return nextProps;\n };\n };\n}\n","export { default as laySpouts } from './laySpouts';\nexport { default as documentSpout } from './spouts/document.server';\nexport { default as restHooksSpout } from './spouts/restHooks.server';\nexport { default as routerSpout } from './spouts/router.server';\nexport { default as prefetchSpout } from './spouts/prefetch.server';\n"],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"server.js","mappings":";;AAAA;AACA;AACA;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACNA;;ACAA;AAKA;AAIA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AAEA;;AAnBA;AAuBA;;AACA;AACA;;AACA;AACA;;AC3DA;;;;;;;ACSA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AADA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAXA;;;AC5CA;AAKA;AAQA;AAMA;AAGA;AAAA;;AACA;AAEA;AAEA;AAOA;;AACA;AACA;AAAA;;AAEA;AACA;AACA;;AACA;AAFA;AAKA;AAGA;AAAA;AAGA;;AAAA;AAGA;AAHA;;AASA;AAQA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAEA;AAGA;AACA;AACA;AAJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAHA;AAnDA;AAHA;AAqEA;;AAEA;AACA;AAEA;;AAAA;AAAA;AAGA;;AChGA;;ACAA;;;;ACAA;AACA;AAMA;AAGA;AAAA;AAEA;AAGA;AACA;AAIA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAHA;AAKA;AACA;AACA;;AC7BA;;ACAA;;;ACAA;AACA;AACA;AAMA;AAKA;AAGA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;;AAEA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJA;AAMA;AACA;AACA;;ACvCA;AACA;AAOA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA","sources":["/home/ntucker/src/anansi/packages/core/webpack/bootstrap","/home/ntucker/src/anansi/packages/core/webpack/runtime/compat get default export","/home/ntucker/src/anansi/packages/core/webpack/runtime/define property getters","/home/ntucker/src/anansi/packages/core/webpack/runtime/hasOwnProperty shorthand","/home/ntucker/src/anansi/packages/core/webpack/runtime/make namespace object","/home/ntucker/src/anansi/packages/core/external commonjs \"react-dom/server\"","/home/ntucker/src/anansi/packages/core/src/laySpouts.tsx","/home/ntucker/src/anansi/packages/core/external commonjs \"react\"","/home/ntucker/src/anansi/packages/core/src/spouts/DocumentComponent.tsx","/home/ntucker/src/anansi/packages/core/src/spouts/document.server.tsx","/home/ntucker/src/anansi/packages/core/external commonjs \"@rest-hooks/core\"","/home/ntucker/src/anansi/packages/core/external commonjs \"@rest-hooks/ssr\"","/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.server.tsx","/home/ntucker/src/anansi/packages/core/external commonjs \"@anansi/router\"","/home/ntucker/src/anansi/packages/core/external commonjs \"history\"","/home/ntucker/src/anansi/packages/core/src/spouts/router.server.tsx","/home/ntucker/src/anansi/packages/core/src/spouts/prefetch.server.tsx","/home/ntucker/src/anansi/packages/core/src/index.server.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react-dom/server\");","import { renderToPipeableStream as reactRender } from 'react-dom/server';\n\nimport { Render } from './scripts/types';\nimport { ServerProps } from './spouts/types';\n\nexport default function laySpouts(\n spouts: (props: ServerProps) => Promise<{\n app: JSX.Element;\n }>,\n { timeoutMS = 200 }: { timeoutMS?: number } = {},\n) {\n const render: Render = async (clientManifest, req, res) => {\n const { app } = await spouts({ clientManifest, req, res });\n let didError = false;\n const { pipe, abort } = reactRender(\n app,\n /*\n This is not documented, so included the types here for reference:\ntype Options = {|\n identifierPrefix?: string,\n namespaceURI?: string,\n nonce?: string,\n bootstrapScriptContent?: string,\n bootstrapScripts?: Array<string>,\n bootstrapModules?: Array<string>,\n progressiveChunkSize?: number,\n onShellReady?: () => void,\n onShellError?: () => void,\n onAllReady?: () => void,\n onError?: (error: mixed) => void,\n|};\n */\n {\n //bootstrapScripts: assets.filter(asset => asset.endsWith('.js')),\n onShellReady() {\n //managers.forEach(manager => manager.cleanup());\n // If something errored before we started streaming, we set the error code appropriately.\n res.statusCode = didError ? 500 : 200;\n res.setHeader('Content-type', 'text/html');\n pipe(res);\n },\n onShellError() {\n didError = true;\n res.statusCode = 500;\n pipe(res);\n },\n onError(x: any) {\n didError = true;\n console.error(x);\n res.statusCode = 500;\n //pipe(res); Removing this avoids, \"React currently only supports piping to one writable stream.\"\n },\n },\n );\n // Abandon and switch to client rendering if enough time passes.\n // Try lowering this to see the client recover.\n setTimeout(abort, timeoutMS);\n };\n return render;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react\");","type Props = {\n children: React.ReactNode;\n assets: { href: string; as?: string; rel?: string }[];\n head: React.ReactNode;\n title: string;\n rootId: string;\n charSet: string;\n};\n\nexport default function Document({\n assets,\n head,\n children,\n title,\n rootId,\n charSet,\n}: Props) {\n return (\n <html>\n <head>\n <meta charSet={charSet} />\n {head}\n {assets.map((asset, i) => (\n <link key={i} rel=\"preload\" {...asset} />\n ))}\n <title>{title}</title>\n </head>\n <body>\n <div id={rootId}>{children}</div>\n {/* this ensures the client can hydrate the assets prop */}\n <script\n dangerouslySetInnerHTML={{\n __html: `assetManifest = ${JSON.stringify(assets)};`,\n }}\n />\n {assets\n .filter(({ href }) => href.endsWith('.js'))\n .map(({ href }, i) => (\n <script key={i} src={href} async />\n ))}\n </body>\n </html>\n );\n}\nDocument.defaultProps = {\n head: (\n <>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <link\n rel=\"shortcut icon\"\n href={`${process.env.WEBPACK_PUBLIC_PATH ?? '/'}favicon.ico`}\n />\n </>\n ),\n charSet: 'utf-8',\n rootId: 'anansi-root',\n};\n","import React from 'react';\nimport type { Route } from '@anansi/router';\nimport { StatsChunkGroup } from 'webpack';\n\nimport type { ServerProps, ResolveProps } from './types';\nimport Document from './DocumentComponent';\n\ntype NeededProps = {\n matchedRoutes: Route<any>[];\n title?: string;\n charSet?: string;\n} & ResolveProps;\n\nexport default function DocumentSpout(options: {\n head?: React.ReactNode;\n title: string;\n rootId: string;\n charSet: string;\n}) {\n return function <T extends NeededProps>(\n next: (props: ServerProps) => Promise<T>,\n ) {\n return async (props: ServerProps) => {\n const nextProps = await next(props);\n\n const publicPath = props.clientManifest.publicPath;\n\n if (\n Object.keys(props.clientManifest?.entrypoints ?? {}).length < 1 ||\n publicPath === undefined\n )\n throw new Error('Manifest missing entries needed');\n\n // TODO: consider using this package for build stats in future:\n // https://github.com/facebook/react/tree/main/packages/react-server-dom-webpack\n const assetMap = (assets: { name: string; size?: number }[]) =>\n assets.map(({ name }) => `${publicPath}${name}`);\n\n const assetList: string[] = [];\n Object.values(props.clientManifest?.entrypoints ?? {}).forEach(\n entrypoint => {\n assetList.push(...assetMap(entrypoint.assets ?? []));\n },\n );\n new Set(\n assetMap(\n Object.values(props.clientManifest.namedChunkGroups ?? {})\n .filter(({ name }) =>\n nextProps.matchedRoutes.some(route => name?.includes(route.name)),\n )\n .flatMap(chunk => [\n ...(chunk.assets ?? []),\n // any chunk preloads\n ...childrenAssets(chunk),\n ]),\n ),\n ).forEach(asset => assetList.push(asset));\n\n // find additional assets to preload based on matched route\n const assets: {\n href: string;\n as?: string | undefined;\n rel?: string | undefined;\n }[] = assetList\n .filter(asset => !asset.endsWith('.hot-update.js'))\n .map(asset =>\n asset.endsWith('.css')\n ? { href: asset, rel: 'stylesheet' }\n : asset.endsWith('.js')\n ? { href: asset, as: 'script' }\n : { href: asset },\n );\n\n return {\n ...nextProps,\n app: (\n <Document\n {...options}\n title={nextProps.title ?? options.title}\n assets={assets}\n rootId={options.rootId}\n >\n {nextProps.app}\n </Document>\n ),\n };\n };\n };\n}\n\nfunction childrenAssets(chunk: StatsChunkGroup) {\n return chunk.children\n ? Object.values(chunk.children).flatMap(preload =>\n preload.flatMap(c => c.assets ?? []),\n )\n : [];\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@rest-hooks/core\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@rest-hooks/ssr\");","import { Manager, NetworkManager } from '@rest-hooks/core';\nimport { createPersistedStore } from '@rest-hooks/ssr';\n\nimport type { ResolveProps, ServerProps } from './types';\n\ntype NeededProps = ResolveProps;\n\nexport default function restHooksSpout(\n options: {\n getManagers: () => Manager[];\n } = { getManagers: () => [new NetworkManager()] },\n) {\n return function <T extends NeededProps>(\n next: (props: ServerProps) => Promise<T>,\n ) {\n return async (props: ServerProps) => {\n const [ServerCacheProvider, controller] = createPersistedStore(\n options.getManagers(),\n );\n\n const nextProps = await next(props);\n\n return {\n ...nextProps,\n controller,\n app: <ServerCacheProvider>{nextProps.app}</ServerCacheProvider>,\n };\n };\n };\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@anansi/router\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"history\");","import { Route, RouteProvider, RouteController } from '@anansi/router';\nimport React from 'react';\nimport { createMemoryHistory } from 'history';\n\nimport type { ResolveProps, ServerProps, CreateRouter } from './types';\n\ntype NeededProps = ResolveProps;\n\nexport default function routerSpout<ResolveWith>(options: {\n resolveWith?: any;\n useResolveWith: () => ResolveWith;\n createRouter: CreateRouter<ResolveWith>;\n}) {\n const createRouteComponent = (\n router: RouteController<Route<ResolveWith, any>>,\n ) =>\n function Router({ children }: { children: React.ReactNode }) {\n const resolveWith = options.useResolveWith();\n\n return (\n <RouteProvider router={router} resolveWith={resolveWith}>\n {children}\n </RouteProvider>\n );\n };\n\n return function <T extends NeededProps>(\n next: (props: ServerProps) => Promise<T>,\n ) {\n return async (props: ServerProps) => {\n const url = props.req.url || '';\n const router = options.createRouter(\n createMemoryHistory({ initialEntries: [url] }),\n );\n const matchedRoutes: Route<ResolveWith>[] = router.getMatchedRoutes(url);\n\n const nextProps = await next(props);\n\n const Router = createRouteComponent(router);\n return {\n ...nextProps,\n matchedRoutes,\n router,\n app: <Router>{nextProps.app}</Router>,\n };\n };\n };\n}\n","import { Route } from '@anansi/router';\n\nimport type { ResolveProps, ServerProps } from './types';\n\ntype NeededProps<RouteWith> = {\n matchedRoutes: Route<RouteWith>[];\n} & ResolveProps;\n\nexport default function prefetchSpout<F extends string>(field: F) {\n return function <RouteWith, T extends NeededProps<RouteWith>>(\n next: (props: ServerProps) => Promise<\n {\n [K in F]: RouteWith;\n } & T\n >,\n ) {\n return async (props: ServerProps) => {\n const nextProps = await next(props);\n\n try {\n const toFetch: Promise<unknown>[] = [];\n nextProps.matchedRoutes.forEach(route => {\n if (typeof route.resolveData === 'function') {\n toFetch.push(route.resolveData(nextProps[field], route));\n }\n });\n await Promise.all(toFetch);\n } catch (e) {\n console.error(e);\n }\n return nextProps;\n };\n };\n}\n","export { default as laySpouts } from './laySpouts';\nexport { default as documentSpout } from './spouts/document.server';\nexport { default as restHooksSpout } from './spouts/restHooks.server';\nexport { default as routerSpout } from './spouts/router.server';\nexport { default as prefetchSpout } from './spouts/prefetch.server';\n"],"names":[],"sourceRoot":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.serve = exports.devServe = void 0;
|
|
7
|
+
|
|
8
|
+
var _serve = _interopRequireDefault(require("./serve"));
|
|
9
|
+
|
|
10
|
+
exports.serve = _serve.default;
|
|
11
|
+
|
|
12
|
+
var _startDevserver = _interopRequireDefault(require("./startDevserver"));
|
|
13
|
+
|
|
14
|
+
exports.devServe = _startDevserver.default;
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBzZXJ2ZSB9IGZyb20gJy4vc2VydmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZXZTZXJ2ZSB9IGZyb20gJy4vc3RhcnREZXZzZXJ2ZXInO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFDQSJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/scripts/serve.ts"],"names":[],"mappings":";AAWA,OAAO,sBAAsB,CAAC;AAc9B,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,UAAU,EAAE,MAAM,QA0H/C"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
+
|
|
6
|
+
exports.__esModule = true;
|
|
7
|
+
exports.default = serve;
|
|
8
|
+
|
|
9
|
+
var _util = require("util");
|
|
10
|
+
|
|
11
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
12
|
+
|
|
13
|
+
var _path = _interopRequireDefault(require("path"));
|
|
14
|
+
|
|
15
|
+
var _express = _interopRequireDefault(require("express"));
|
|
16
|
+
|
|
17
|
+
var _ora = _interopRequireDefault(require("ora"));
|
|
18
|
+
|
|
19
|
+
var _compression = _interopRequireDefault(require("compression"));
|
|
20
|
+
|
|
21
|
+
require("cross-fetch/polyfill");
|
|
22
|
+
|
|
23
|
+
// run directly from node
|
|
24
|
+
if (require.main === module) {
|
|
25
|
+
const entrypoint = process.argv[2];
|
|
26
|
+
|
|
27
|
+
if (!entrypoint) {
|
|
28
|
+
console.log(`Usage: ${process.argv[0]} <server-entrypoint>`);
|
|
29
|
+
process.exit(-1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
serve(entrypoint);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function serve(entrypoint) {
|
|
36
|
+
const PORT = process.env.PORT || 8080;
|
|
37
|
+
const loader = (0, _ora.default)('Initializing').start();
|
|
38
|
+
const manifestPath = getManifestPathFromWebpackconfig();
|
|
39
|
+
const readFile = (0, _util.promisify)(_fs.default.readFile);
|
|
40
|
+
let server;
|
|
41
|
+
|
|
42
|
+
function handleErrors(fn) {
|
|
43
|
+
return async function (req, res, next) {
|
|
44
|
+
try {
|
|
45
|
+
return await fn(req, res);
|
|
46
|
+
} catch (x) {
|
|
47
|
+
next(x);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
} // Start the express server after the first compilation
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
function initializeApp(clientManifest) {
|
|
54
|
+
loader.info('Launching server');
|
|
55
|
+
|
|
56
|
+
if (!clientManifest) {
|
|
57
|
+
loader.fail('Manifest not found'); // TODO: handle more gracefully
|
|
58
|
+
|
|
59
|
+
process.exit(-1);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const wrappingApp = (0, _express.default)(); // eslint-disable-next-line
|
|
63
|
+
//@ts-ignore
|
|
64
|
+
|
|
65
|
+
wrappingApp.use((0, _compression.default)()); // ASSETS
|
|
66
|
+
|
|
67
|
+
const assetRoute = async (req, res) => {
|
|
68
|
+
var _req$url$substr, _req$url, _clientManifest$outpu;
|
|
69
|
+
|
|
70
|
+
const filename = (_req$url$substr = (_req$url = req.url) === null || _req$url === void 0 ? void 0 : _req$url.substr(process.env.WEBPACK_PUBLIC_PATH.length)) != null ? _req$url$substr : '';
|
|
71
|
+
|
|
72
|
+
const assetPath = _path.default.join((_clientManifest$outpu = clientManifest.outputPath) != null ? _clientManifest$outpu : '', filename);
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
const fileContent = (await readFile(assetPath)).toString();
|
|
76
|
+
res.contentType(filename);
|
|
77
|
+
res.send(fileContent);
|
|
78
|
+
} catch (e) {
|
|
79
|
+
res.status(404);
|
|
80
|
+
res.send(e);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
wrappingApp.get(`${process.env.WEBPACK_PUBLIC_PATH}*`, assetRoute); // SERVER SIDE RENDERING
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
87
|
+
|
|
88
|
+
const render = require(_path.default.join(process.cwd(), entrypoint)).default;
|
|
89
|
+
|
|
90
|
+
wrappingApp.get('/*', handleErrors(async function (req, res) {
|
|
91
|
+
if (req.url.endsWith('favicon.ico')) {
|
|
92
|
+
res.statusCode = 404;
|
|
93
|
+
res.setHeader('Content-type', 'text/html');
|
|
94
|
+
res.send('not found');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
res.socket.on('error', error => {
|
|
99
|
+
console.error('Fatal', error);
|
|
100
|
+
});
|
|
101
|
+
await render(clientManifest, req, res);
|
|
102
|
+
}));
|
|
103
|
+
server = wrappingApp.listen(PORT, () => {
|
|
104
|
+
loader.info(`Listening at ${PORT}...`);
|
|
105
|
+
}).on('error', function (error) {
|
|
106
|
+
if (error.syscall !== 'listen') {
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const isPipe = portOrPipe => Number.isNaN(portOrPipe);
|
|
111
|
+
|
|
112
|
+
const bind = isPipe(PORT) ? 'Pipe ' + PORT : 'Port ' + PORT;
|
|
113
|
+
|
|
114
|
+
switch (error.code) {
|
|
115
|
+
case 'EACCES':
|
|
116
|
+
loader.fail(bind + ' requires elevated privileges');
|
|
117
|
+
process.exit(1);
|
|
118
|
+
// eslint-disable-next-line no-fallthrough
|
|
119
|
+
|
|
120
|
+
case 'EADDRINUSE':
|
|
121
|
+
loader.fail(bind + ' is already in use');
|
|
122
|
+
process.exit(1);
|
|
123
|
+
// eslint-disable-next-line no-fallthrough
|
|
124
|
+
|
|
125
|
+
default:
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
} // eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
initializeApp(require(manifestPath));
|
|
133
|
+
process.on('SIGINT', () => {
|
|
134
|
+
var _server;
|
|
135
|
+
|
|
136
|
+
loader.warn('Received SIGINT, devserver shutting down');
|
|
137
|
+
if (server) console.log('Closing server');
|
|
138
|
+
(_server = server) === null || _server === void 0 ? void 0 : _server.close(() => {
|
|
139
|
+
loader.info('Server closed');
|
|
140
|
+
});
|
|
141
|
+
process.exit(-1);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function getManifestPathFromWebpackconfig() {
|
|
146
|
+
var _opts$filename, _webpackConfig$plugin, _webpackConfig$plugin2, _webpackConfig$plugin3, _webpackConfig$output, _webpackConfig$output2;
|
|
147
|
+
|
|
148
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
149
|
+
const webpackConfig = require(require.resolve( // TODO: use normal resolution algorithm to find webpack file
|
|
150
|
+
_path.default.join(process.cwd(), 'webpack.config')))({}, {
|
|
151
|
+
mode: 'production'
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
const manifestFilename = (_opts$filename = webpackConfig === null || webpackConfig === void 0 ? void 0 : (_webpackConfig$plugin = webpackConfig.plugins) === null || _webpackConfig$plugin === void 0 ? void 0 : (_webpackConfig$plugin2 = _webpackConfig$plugin.find(plugin => {
|
|
155
|
+
return plugin.constructor.name === 'StatsWriterPlugin';
|
|
156
|
+
})) === null || _webpackConfig$plugin2 === void 0 ? void 0 : (_webpackConfig$plugin3 = _webpackConfig$plugin2.opts) === null || _webpackConfig$plugin3 === void 0 ? void 0 : _webpackConfig$plugin3.filename) != null ? _opts$filename : 'manifest.json';
|
|
157
|
+
|
|
158
|
+
const manifestPath = _path.default.join((_webpackConfig$output = webpackConfig === null || webpackConfig === void 0 ? void 0 : (_webpackConfig$output2 = webpackConfig.output) === null || _webpackConfig$output2 === void 0 ? void 0 : _webpackConfig$output2.path) != null ? _webpackConfig$output : '', manifestFilename);
|
|
159
|
+
|
|
160
|
+
return manifestPath;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImNvbnNvbGUiLCJsb2ciLCJleGl0Iiwic2VydmUiLCJQT1JUIiwiZW52IiwibG9hZGVyIiwib3JhIiwic3RhcnQiLCJtYW5pZmVzdFBhdGgiLCJnZXRNYW5pZmVzdFBhdGhGcm9tV2VicGFja2NvbmZpZyIsInJlYWRGaWxlIiwicHJvbWlzaWZ5IiwiZGlza0ZzIiwic2VydmVyIiwiaGFuZGxlRXJyb3JzIiwiZm4iLCJyZXEiLCJyZXMiLCJuZXh0IiwieCIsImluaXRpYWxpemVBcHAiLCJjbGllbnRNYW5pZmVzdCIsImluZm8iLCJmYWlsIiwid3JhcHBpbmdBcHAiLCJleHByZXNzIiwidXNlIiwiY29tcHJlc3MiLCJhc3NldFJvdXRlIiwiZmlsZW5hbWUiLCJ1cmwiLCJzdWJzdHIiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwibGVuZ3RoIiwiYXNzZXRQYXRoIiwicGF0aCIsImpvaW4iLCJvdXRwdXRQYXRoIiwiZmlsZUNvbnRlbnQiLCJ0b1N0cmluZyIsImNvbnRlbnRUeXBlIiwic2VuZCIsImUiLCJzdGF0dXMiLCJnZXQiLCJyZW5kZXIiLCJjd2QiLCJkZWZhdWx0IiwiZW5kc1dpdGgiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwic29ja2V0Iiwib24iLCJlcnJvciIsImxpc3RlbiIsInN5c2NhbGwiLCJpc1BpcGUiLCJwb3J0T3JQaXBlIiwiTnVtYmVyIiwiaXNOYU4iLCJiaW5kIiwiY29kZSIsIndhcm4iLCJjbG9zZSIsIndlYnBhY2tDb25maWciLCJyZXNvbHZlIiwibW9kZSIsIm1hbmlmZXN0RmlsZW5hbWUiLCJwbHVnaW5zIiwiZmluZCIsInBsdWdpbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm9wdHMiLCJvdXRwdXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9zZXJ2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IGRpc2tGcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB3ZWJwYWNrLCB7IHdlYiB9IGZyb20gJ3dlYnBhY2snO1xuaW1wb3J0IHsgU2VydmVyLCBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgZXhwcmVzcywgeyBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCBjb21wcmVzcyBmcm9tICdjb21wcmVzc2lvbic7XG5cbmltcG9ydCAnY3Jvc3MtZmV0Y2gvcG9seWZpbGwnO1xuaW1wb3J0IHsgUmVuZGVyIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIHJ1biBkaXJlY3RseSBmcm9tIG5vZGVcbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBjb25zdCBlbnRyeXBvaW50ID0gcHJvY2Vzcy5hcmd2WzJdO1xuXG4gIGlmICghZW50cnlwb2ludCkge1xuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogJHtwcm9jZXNzLmFyZ3ZbMF19IDxzZXJ2ZXItZW50cnlwb2ludD5gKTtcbiAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICB9XG4gIHNlcnZlKGVudHJ5cG9pbnQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJ2ZShlbnRyeXBvaW50OiBzdHJpbmcpIHtcbiAgY29uc3QgUE9SVCA9IHByb2Nlc3MuZW52LlBPUlQgfHwgODA4MDtcblxuICBjb25zdCBsb2FkZXIgPSBvcmEoJ0luaXRpYWxpemluZycpLnN0YXJ0KCk7XG5cbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gZ2V0TWFuaWZlc3RQYXRoRnJvbVdlYnBhY2tjb25maWcoKTtcblxuICBjb25zdCByZWFkRmlsZSA9IHByb21pc2lmeShkaXNrRnMucmVhZEZpbGUpO1xuICBsZXQgc2VydmVyOiBTZXJ2ZXIgfCB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3JzPFxuICAgIEYgZXh0ZW5kcyAoXG4gICAgICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2UsXG4gICAgICByZXM6IFJlc3BvbnNlIHwgU2VydmVyUmVzcG9uc2UsXG4gICAgKSA9PiBQcm9taXNlPHZvaWQ+LFxuICA+KGZuOiBGKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIChcbiAgICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICAgIG5leHQ6IE5leHRGdW5jdGlvbixcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbihyZXEsIHJlcyk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIG5leHQoeCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIFN0YXJ0IHRoZSBleHByZXNzIHNlcnZlciBhZnRlciB0aGUgZmlyc3QgY29tcGlsYXRpb25cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcChjbGllbnRNYW5pZmVzdDogd2VicGFjay5TdGF0c0NvbXBpbGF0aW9uKSB7XG4gICAgbG9hZGVyLmluZm8oJ0xhdW5jaGluZyBzZXJ2ZXInKTtcbiAgICBpZiAoIWNsaWVudE1hbmlmZXN0KSB7XG4gICAgICBsb2FkZXIuZmFpbCgnTWFuaWZlc3Qgbm90IGZvdW5kJyk7XG4gICAgICAvLyBUT0RPOiBoYW5kbGUgbW9yZSBncmFjZWZ1bGx5XG4gICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgIH1cblxuICAgIGNvbnN0IHdyYXBwaW5nQXBwID0gZXhwcmVzcygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIC8vQHRzLWlnbm9yZVxuICAgIHdyYXBwaW5nQXBwLnVzZShjb21wcmVzcygpKTtcblxuICAgIC8vIEFTU0VUU1xuICAgIGNvbnN0IGFzc2V0Um91dGUgPSBhc3luYyAocmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLCByZXM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZmlsZW5hbWUgPVxuICAgICAgICByZXEudXJsPy5zdWJzdHIoKHByb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggYXMgc3RyaW5nKS5sZW5ndGgpID8/XG4gICAgICAgICcnO1xuICAgICAgY29uc3QgYXNzZXRQYXRoID0gcGF0aC5qb2luKGNsaWVudE1hbmlmZXN0Lm91dHB1dFBhdGggPz8gJycsIGZpbGVuYW1lKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSAoYXdhaXQgcmVhZEZpbGUoYXNzZXRQYXRoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgcmVzLmNvbnRlbnRUeXBlKGZpbGVuYW1lKTtcbiAgICAgICAgcmVzLnNlbmQoZmlsZUNvbnRlbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgIHJlcy5zZW5kKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfTtcbiAgICB3cmFwcGluZ0FwcC5nZXQoYCR7cHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSH0qYCwgYXNzZXRSb3V0ZSk7XG5cbiAgICAvLyBTRVJWRVIgU0lERSBSRU5ERVJJTkdcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gcmVxdWlyZShwYXRoLmpvaW4oXG4gICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgZW50cnlwb2ludCxcbiAgICApKS5kZWZhdWx0O1xuICAgIHdyYXBwaW5nQXBwLmdldChcbiAgICAgICcvKicsXG4gICAgICBoYW5kbGVFcnJvcnMoYXN5bmMgZnVuY3Rpb24gKHJlcTogYW55LCByZXM6IGFueSkge1xuICAgICAgICBpZiAocmVxLnVybC5lbmRzV2l0aCgnZmF2aWNvbi5pY28nKSkge1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICByZXMuc2VuZCgnbm90IGZvdW5kJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5zb2NrZXQub24oJ2Vycm9yJywgKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmF0YWwnLCBlcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHJlbmRlcihjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHNlcnZlciA9IHdyYXBwaW5nQXBwXG4gICAgICAubGlzdGVuKFBPUlQsICgpID0+IHtcbiAgICAgICAgbG9hZGVyLmluZm8oYExpc3RlbmluZyBhdCAke1BPUlR9Li4uYCk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XG4gICAgICAgIGlmIChlcnJvci5zeXNjYWxsICE9PSAnbGlzdGVuJykge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzUGlwZSA9IChwb3J0T3JQaXBlOiBzdHJpbmcgfCBudW1iZXIpID0+XG4gICAgICAgICAgTnVtYmVyLmlzTmFOKHBvcnRPclBpcGUpO1xuICAgICAgICBjb25zdCBiaW5kID0gaXNQaXBlKFBPUlQpID8gJ1BpcGUgJyArIFBPUlQgOiAnUG9ydCAnICsgUE9SVDtcbiAgICAgICAgc3dpdGNoIChlcnJvci5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAnRUFDQ0VTJzpcbiAgICAgICAgICAgIGxvYWRlci5mYWlsKGJpbmQgKyAnIHJlcXVpcmVzIGVsZXZhdGVkIHByaXZpbGVnZXMnKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgICAgICBjYXNlICdFQUREUklOVVNFJzpcbiAgICAgICAgICAgIGxvYWRlci5mYWlsKGJpbmQgKyAnIGlzIGFscmVhZHkgaW4gdXNlJyk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIGluaXRpYWxpemVBcHAocmVxdWlyZShtYW5pZmVzdFBhdGgpKTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgbG9hZGVyLndhcm4oJ1JlY2VpdmVkIFNJR0lOVCwgZGV2c2VydmVyIHNodXR0aW5nIGRvd24nKTtcbiAgICBpZiAoc2VydmVyKSBjb25zb2xlLmxvZygnQ2xvc2luZyBzZXJ2ZXInKTtcbiAgICBzZXJ2ZXI/LmNsb3NlKCgpID0+IHtcbiAgICAgIGxvYWRlci5pbmZvKCdTZXJ2ZXIgY2xvc2VkJyk7XG4gICAgfSk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE1hbmlmZXN0UGF0aEZyb21XZWJwYWNrY29uZmlnKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCB3ZWJwYWNrQ29uZmlnOiB3ZWJwYWNrLkNvbmZpZ3VyYXRpb24gPSByZXF1aXJlKHJlcXVpcmUucmVzb2x2ZShcbiAgICAvLyBUT0RPOiB1c2Ugbm9ybWFsIHJlc29sdXRpb24gYWxnb3JpdGhtIHRvIGZpbmQgd2VicGFjayBmaWxlXG4gICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZycpLFxuICApKSh7fSwgeyBtb2RlOiAncHJvZHVjdGlvbicgfSk7XG4gIGNvbnN0IG1hbmlmZXN0RmlsZW5hbWU6IHN0cmluZyA9XG4gICAgKFxuICAgICAgd2VicGFja0NvbmZpZz8ucGx1Z2lucz8uZmluZChwbHVnaW4gPT4ge1xuICAgICAgICByZXR1cm4gcGx1Z2luLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdTdGF0c1dyaXRlclBsdWdpbic7XG4gICAgICB9KSBhcyBhbnlcbiAgICApPy5vcHRzPy5maWxlbmFtZSA/PyAnbWFuaWZlc3QuanNvbic7XG5cbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKFxuICAgIHdlYnBhY2tDb25maWc/Lm91dHB1dD8ucGF0aCA/PyAnJyxcbiAgICBtYW5pZmVzdEZpbGVuYW1lLFxuICApO1xuICByZXR1cm4gbWFuaWZlc3RQYXRoO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFHQTtBQUNBLElBQUlBLE9BQU8sQ0FBQ0MsSUFBUixLQUFpQkMsTUFBckIsRUFBNkI7RUFDM0IsTUFBTUMsVUFBVSxHQUFHQyxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiLENBQW5COztFQUVBLElBQUksQ0FBQ0YsVUFBTCxFQUFpQjtJQUNmRyxPQUFPLENBQUNDLEdBQVIsQ0FBYSxVQUFTSCxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiLENBQWdCLHNCQUF0QztJQUNBRCxPQUFPLENBQUNJLElBQVIsQ0FBYSxDQUFDLENBQWQ7RUFDRDs7RUFDREMsS0FBSyxDQUFDTixVQUFELENBQUw7QUFDRDs7QUFFYyxTQUFTTSxLQUFULENBQWVOLFVBQWYsRUFBbUM7RUFDaEQsTUFBTU8sSUFBSSxHQUFHTixPQUFPLENBQUNPLEdBQVIsQ0FBWUQsSUFBWixJQUFv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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startDevserver.d.ts","sourceRoot":"","sources":["../../src/scripts/startDevserver.ts"],"names":[],"mappings":";AAiBA,OAAO,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"startDevserver.d.ts","sourceRoot":"","sources":["../../src/scripts/startDevserver.ts"],"names":[],"mappings":";AAiBA,OAAO,sBAAsB,CAAC;AAiB9B,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,QA0NlC"}
|