@anansi/core 0.8.0 → 0.9.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 +20 -0
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/lib/scripts/getProxyMiddlewares.d.ts +3 -0
- package/lib/scripts/getProxyMiddlewares.d.ts.map +1 -0
- package/lib/scripts/getProxyMiddlewares.js +106 -0
- package/lib/scripts/serve.d.ts +4 -1
- package/lib/scripts/serve.d.ts.map +1 -1
- package/lib/scripts/serve.js +51 -25
- package/lib/scripts/startDevserver.d.ts.map +1 -1
- package/lib/scripts/startDevserver.js +2 -12
- package/lib/spouts/document.server.d.ts +1 -2
- package/lib/spouts/document.server.d.ts.map +1 -1
- package/lib/spouts/document.server.js +1 -1
- package/package.json +5 -4
- package/src/scripts/getProxyMiddlewares.ts +129 -0
- package/src/scripts/serve.ts +66 -23
- package/src/scripts/startDevserver.ts +0 -9
- package/src/spouts/document.server.tsx +1 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
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.9.0](https://github.com/ntucker/anansi/compare/@anansi/core@0.8.0...@anansi/core@0.9.0) (2022-05-29)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### 🚀 Features
|
|
10
|
+
|
|
11
|
+
* --serveProxy: [non-dev] uses webpack proxy config ([774f826](https://github.com/ntucker/anansi/commit/774f82646542d8acfcb0ddceb6fc75fcc2851a01))
|
|
12
|
+
* Add option to serve assets with production server ([bfb20eb](https://github.com/ntucker/anansi/commit/bfb20eb1564fc2c6b72fea79d0722ac6186797fe))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### 💅 Enhancement
|
|
16
|
+
|
|
17
|
+
* Handle root asset path ([a770c77](https://github.com/ntucker/anansi/commit/a770c77c4775b09ff86f26cfd5983eab5d211f74))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### 🐛 Bug Fix
|
|
21
|
+
|
|
22
|
+
* documentSpout options type ([6707d35](https://github.com/ntucker/anansi/commit/6707d3592f7f0ab772a10d623d1d765a9301c3ae))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
## [0.8.0](https://github.com/ntucker/anansi/compare/@anansi/core@0.7.4...@anansi/core@0.8.0) (2022-05-29)
|
|
7
27
|
|
|
8
28
|
|
package/dist/server.js
CHANGED
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;;;;;;;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":""}
|
|
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;AAOA;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;;AC/FA;;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} & 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":"getProxyMiddlewares.d.ts","sourceRoot":"","sources":["../../src/scripts/getProxyMiddlewares.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAKhB,oBAAoB,EACpB,cAAc,EACf,MAAM,oBAAoB,CAAC;AAG5B,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,WAAW,EAAE,oBAAoB,GAAG,cAAc,GAAG,gBAAgB,SAmHtE"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = getProxyMiddlewares;
|
|
5
|
+
|
|
6
|
+
// Essentially taken from https://github.com/webpack/webpack-dev-server/blob/b5e5b67398f97c7a2934e12ebe34fb03cc06c473/lib/Server.js#L2123
|
|
7
|
+
function getProxyMiddlewares(proxyConfig) {
|
|
8
|
+
const middlewares = []; // eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
9
|
+
|
|
10
|
+
const {
|
|
11
|
+
createProxyMiddleware
|
|
12
|
+
} = require('http-proxy-middleware');
|
|
13
|
+
|
|
14
|
+
const proxy = !Array.isArray(proxyConfig) && typeof proxyConfig === 'object' ? Object.keys(proxyConfig).length && Object.keys(proxyConfig)[0].startsWith('/') ? Object.entries(proxyConfig).map(([path, v]) => ({
|
|
15
|
+
path,
|
|
16
|
+
...v
|
|
17
|
+
})) : [proxyConfig] : proxyConfig;
|
|
18
|
+
|
|
19
|
+
const getProxyMiddleware = proxyConfig => {
|
|
20
|
+
// It is possible to use the `bypass` method without a `target` or `router`.
|
|
21
|
+
// However, the proxy middleware has no use in this case, and will fail to instantiate.
|
|
22
|
+
if (proxyConfig.target) {
|
|
23
|
+
const context = proxyConfig.context || proxyConfig.path;
|
|
24
|
+
return createProxyMiddleware(
|
|
25
|
+
/** @type {string} */
|
|
26
|
+
context, proxyConfig);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (proxyConfig.router) {
|
|
30
|
+
return createProxyMiddleware(proxyConfig);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Assume a proxy configuration specified as:
|
|
35
|
+
* proxy: [
|
|
36
|
+
* {
|
|
37
|
+
* context: "value",
|
|
38
|
+
* ...options,
|
|
39
|
+
* },
|
|
40
|
+
* // or:
|
|
41
|
+
* function() {
|
|
42
|
+
* return {
|
|
43
|
+
* context: "context",
|
|
44
|
+
* ...options,
|
|
45
|
+
* };
|
|
46
|
+
* }
|
|
47
|
+
* ]
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
proxy.forEach(proxyConfigOrCallback => {
|
|
52
|
+
let proxyMiddleware;
|
|
53
|
+
let proxyConfig = typeof proxyConfigOrCallback === 'function' ? proxyConfigOrCallback() : proxyConfigOrCallback;
|
|
54
|
+
proxyMiddleware = getProxyMiddleware(proxyConfig);
|
|
55
|
+
/* TODO: figure out how to make this work
|
|
56
|
+
if (proxyConfig.ws) {
|
|
57
|
+
this.webSocketProxies.push(proxyMiddleware);
|
|
58
|
+
}
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
const handler = async (req, res, next) => {
|
|
62
|
+
if (typeof proxyConfigOrCallback === 'function') {
|
|
63
|
+
const newProxyConfig = proxyConfigOrCallback(req, res, next);
|
|
64
|
+
|
|
65
|
+
if (newProxyConfig !== proxyConfig) {
|
|
66
|
+
proxyConfig = newProxyConfig;
|
|
67
|
+
proxyMiddleware = getProxyMiddleware(proxyConfig);
|
|
68
|
+
}
|
|
69
|
+
} // - Check if we have a bypass function defined
|
|
70
|
+
// - In case the bypass function is defined we'll retrieve the
|
|
71
|
+
// bypassUrl from it otherwise bypassUrl would be null
|
|
72
|
+
// TODO remove in the next major in favor `context` and `router` options
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
const bypassUrl = typeof proxyConfig.bypass === 'function' ? await proxyConfig.bypass(req, res, proxyConfig) : null;
|
|
76
|
+
|
|
77
|
+
if (typeof bypassUrl === 'boolean') {
|
|
78
|
+
// skip the proxy
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
80
|
+
// @ts-ignore
|
|
81
|
+
req.url = null;
|
|
82
|
+
next();
|
|
83
|
+
} else if (typeof bypassUrl === 'string') {
|
|
84
|
+
// byPass to that url
|
|
85
|
+
req.url = bypassUrl;
|
|
86
|
+
next();
|
|
87
|
+
} else if (proxyMiddleware) {
|
|
88
|
+
return proxyMiddleware(req, res, next);
|
|
89
|
+
} else {
|
|
90
|
+
next();
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
middlewares.push({
|
|
95
|
+
name: 'http-proxy-middleware',
|
|
96
|
+
middleware: handler
|
|
97
|
+
}); // Also forward error requests to the proxy so it can handle them.
|
|
98
|
+
|
|
99
|
+
middlewares.push({
|
|
100
|
+
name: 'http-proxy-middleware-error-handler',
|
|
101
|
+
middleware: (error, req, res, next) => handler(req, res, next)
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
return middlewares;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRQcm94eU1pZGRsZXdhcmVzIiwicHJveHlDb25maWciLCJtaWRkbGV3YXJlcyIsImNyZWF0ZVByb3h5TWlkZGxld2FyZSIsInJlcXVpcmUiLCJwcm94eSIsIkFycmF5IiwiaXNBcnJheSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJzdGFydHNXaXRoIiwiZW50cmllcyIsIm1hcCIsInBhdGgiLCJ2IiwiZ2V0UHJveHlNaWRkbGV3YXJlIiwidGFyZ2V0IiwiY29udGV4dCIsInJvdXRlciIsImZvckVhY2giLCJwcm94eUNvbmZpZ09yQ2FsbGJhY2siLCJwcm94eU1pZGRsZXdhcmUiLCJoYW5kbGVyIiwicmVxIiwicmVzIiwibmV4dCIsIm5ld1Byb3h5Q29uZmlnIiwiYnlwYXNzVXJsIiwiYnlwYXNzIiwidXJsIiwicHVzaCIsIm5hbWUiLCJtaWRkbGV3YXJlIiwiZXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9nZXRQcm94eU1pZGRsZXdhcmVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJlcXVlc3RIYW5kbGVyLFxuICBQcm94eUNvbmZpZ0FycmF5LFxuICBSZXNwb25zZSxcbiAgUmVxdWVzdCxcbiAgTmV4dEZ1bmN0aW9uLFxuICBCeVBhc3MsXG4gIFByb3h5Q29uZmlnQXJyYXlJdGVtLFxuICBQcm94eUNvbmZpZ01hcCxcbn0gZnJvbSAnd2VicGFjay1kZXYtc2VydmVyJztcblxuLy8gRXNzZW50aWFsbHkgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrLWRldi1zZXJ2ZXIvYmxvYi9iNWU1YjY3Mzk4Zjk3YzdhMjkzNGUxMmViZTM0ZmIwM2NjMDZjNDczL2xpYi9TZXJ2ZXIuanMjTDIxMjNcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFByb3h5TWlkZGxld2FyZXMoXG4gIHByb3h5Q29uZmlnOiBQcm94eUNvbmZpZ0FycmF5SXRlbSB8IFByb3h5Q29uZmlnTWFwIHwgUHJveHlDb25maWdBcnJheSxcbikge1xuICBjb25zdCBtaWRkbGV3YXJlczogYW55W10gPSBbXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgY29uc3QgeyBjcmVhdGVQcm94eU1pZGRsZXdhcmUgfSA9IHJlcXVpcmUoJ2h0dHAtcHJveHktbWlkZGxld2FyZScpO1xuXG4gIGNvbnN0IHByb3h5OiBQcm94eUNvbmZpZ0FycmF5ID1cbiAgICAhQXJyYXkuaXNBcnJheShwcm94eUNvbmZpZykgJiYgdHlwZW9mIHByb3h5Q29uZmlnID09PSAnb2JqZWN0J1xuICAgICAgPyBPYmplY3Qua2V5cyhwcm94eUNvbmZpZykubGVuZ3RoICYmXG4gICAgICAgIE9iamVjdC5rZXlzKHByb3h5Q29uZmlnKVswXS5zdGFydHNXaXRoKCcvJylcbiAgICAgICAgPyBPYmplY3QuZW50cmllcyhwcm94eUNvbmZpZykubWFwKChbcGF0aCwgdl0pID0+ICh7IHBhdGgsIC4uLnYgfSkpXG4gICAgICAgIDogW3Byb3h5Q29uZmlnXVxuICAgICAgOiBwcm94eUNvbmZpZztcblxuICBjb25zdCBnZXRQcm94eU1pZGRsZXdhcmUgPSAoXG4gICAgcHJveHlDb25maWc6IFByb3h5Q29uZmlnQXJyYXlJdGVtLFxuICApOiBSZXF1ZXN0SGFuZGxlciB8IHVuZGVmaW5lZCA9PiB7XG4gICAgLy8gSXQgaXMgcG9zc2libGUgdG8gdXNlIHRoZSBgYnlwYXNzYCBtZXRob2Qgd2l0aG91dCBhIGB0YXJnZXRgIG9yIGByb3V0ZXJgLlxuICAgIC8vIEhvd2V2ZXIsIHRoZSBwcm94eSBtaWRkbGV3YXJlIGhhcyBubyB1c2UgaW4gdGhpcyBjYXNlLCBhbmQgd2lsbCBmYWlsIHRvIGluc3RhbnRpYXRlLlxuICAgIGlmIChwcm94eUNvbmZpZy50YXJnZXQpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBwcm94eUNvbmZpZy5jb250ZXh0IHx8IHByb3h5Q29uZmlnLnBhdGg7XG5cbiAgICAgIHJldHVybiBjcmVhdGVQcm94eU1pZGRsZXdhcmUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIGNvbnRleHQsIHByb3h5Q29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAocHJveHlDb25maWcucm91dGVyKSB7XG4gICAgICByZXR1cm4gY3JlYXRlUHJveHlNaWRkbGV3YXJlKHByb3h5Q29uZmlnKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFzc3VtZSBhIHByb3h5IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGFzOlxuICAgKiBwcm94eTogW1xuICAgKiAgIHtcbiAgICogICAgIGNvbnRleHQ6IFwidmFsdWVcIixcbiAgICogICAgIC4uLm9wdGlvbnMsXG4gICAqICAgfSxcbiAgICogICAvLyBvcjpcbiAgICogICBmdW5jdGlvbigpIHtcbiAgICogICAgIHJldHVybiB7XG4gICAqICAgICAgIGNvbnRleHQ6IFwiY29udGV4dFwiLFxuICAgKiAgICAgICAuLi5vcHRpb25zLFxuICAgKiAgICAgfTtcbiAgICogICB9XG4gICAqIF1cbiAgICovXG4gIHByb3h5LmZvckVhY2gocHJveHlDb25maWdPckNhbGxiYWNrID0+IHtcbiAgICBsZXQgcHJveHlNaWRkbGV3YXJlOiBSZXF1ZXN0SGFuZGxlciB8IHVuZGVmaW5lZDtcblxuICAgIGxldCBwcm94eUNvbmZpZyA9XG4gICAgICB0eXBlb2YgcHJveHlDb25maWdPckNhbGxiYWNrID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gcHJveHlDb25maWdPckNhbGxiYWNrKClcbiAgICAgICAgOiBwcm94eUNvbmZpZ09yQ2FsbGJhY2s7XG5cbiAgICBwcm94eU1pZGRsZXdhcmUgPSBnZXRQcm94eU1pZGRsZXdhcmUocHJveHlDb25maWcpO1xuXG4gICAgLyogVE9ETzogZmlndXJlIG91dCBob3cgdG8gbWFrZSB0aGlzIHdvcmtcbiAgICBpZiAocHJveHlDb25maWcud3MpIHtcbiAgICAgIHRoaXMud2ViU29ja2V0UHJveGllcy5wdXNoKHByb3h5TWlkZGxld2FyZSk7XG4gICAgfVxuICAgICovXG5cbiAgICBjb25zdCBoYW5kbGVyID0gYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHByb3h5Q29uZmlnT3JDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBuZXdQcm94eUNvbmZpZyA9IHByb3h5Q29uZmlnT3JDYWxsYmFjayhyZXEsIHJlcywgbmV4dCk7XG5cbiAgICAgICAgaWYgKG5ld1Byb3h5Q29uZmlnICE9PSBwcm94eUNvbmZpZykge1xuICAgICAgICAgIHByb3h5Q29uZmlnID0gbmV3UHJveHlDb25maWc7XG4gICAgICAgICAgcHJveHlNaWRkbGV3YXJlID0gZ2V0UHJveHlNaWRkbGV3YXJlKHByb3h5Q29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAtIENoZWNrIGlmIHdlIGhhdmUgYSBieXBhc3MgZnVuY3Rpb24gZGVmaW5lZFxuICAgICAgLy8gLSBJbiBjYXNlIHRoZSBieXBhc3MgZnVuY3Rpb24gaXMgZGVmaW5lZCB3ZSdsbCByZXRyaWV2ZSB0aGVcbiAgICAgIC8vIGJ5cGFzc1VybCBmcm9tIGl0IG90aGVyd2lzZSBieXBhc3NVcmwgd291bGQgYmUgbnVsbFxuICAgICAgLy8gVE9ETyByZW1vdmUgaW4gdGhlIG5leHQgbWFqb3IgaW4gZmF2b3IgYGNvbnRleHRgIGFuZCBgcm91dGVyYCBvcHRpb25zXG4gICAgICBjb25zdCBieXBhc3NVcmw6IEJ5UGFzcyB8IG51bGwgPVxuICAgICAgICB0eXBlb2YgcHJveHlDb25maWcuYnlwYXNzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBhd2FpdCBwcm94eUNvbmZpZy5ieXBhc3MocmVxLCByZXMsIHByb3h5Q29uZmlnKVxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBieXBhc3NVcmwgPT09ICdib29sZWFuJykge1xuICAgICAgICAvLyBza2lwIHRoZSBwcm94eVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmVxLnVybCA9IG51bGw7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJ5cGFzc1VybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gYnlQYXNzIHRvIHRoYXQgdXJsXG4gICAgICAgIHJlcS51cmwgPSBieXBhc3NVcmw7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSBpZiAocHJveHlNaWRkbGV3YXJlKSB7XG4gICAgICAgIHJldHVybiBwcm94eU1pZGRsZXdhcmUocmVxLCByZXMsIG5leHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBtaWRkbGV3YXJlcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdodHRwLXByb3h5LW1pZGRsZXdhcmUnLFxuICAgICAgbWlkZGxld2FyZTogaGFuZGxlcixcbiAgICB9KTtcbiAgICAvLyBBbHNvIGZvcndhcmQgZXJyb3IgcmVxdWVzdHMgdG8gdGhlIHByb3h5IHNvIGl0IGNhbiBoYW5kbGUgdGhlbS5cbiAgICBtaWRkbGV3YXJlcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdodHRwLXByb3h5LW1pZGRsZXdhcmUtZXJyb3ItaGFuZGxlcicsXG4gICAgICBtaWRkbGV3YXJlOiAoXG4gICAgICAgIGVycm9yOiBFcnJvcixcbiAgICAgICAgcmVxOiBSZXF1ZXN0LFxuICAgICAgICByZXM6IFJlc3BvbnNlLFxuICAgICAgICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4gICAgICApID0+IGhhbmRsZXIocmVxLCByZXMsIG5leHQpLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gbWlkZGxld2FyZXM7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FB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
|
package/lib/scripts/serve.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import 'cross-fetch/polyfill';
|
|
3
|
-
export default function serve(entrypoint: string
|
|
3
|
+
export default function serve(entrypoint: string, options?: {
|
|
4
|
+
serveAssets?: boolean;
|
|
5
|
+
serveProxy?: boolean;
|
|
6
|
+
}): void;
|
|
4
7
|
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/scripts/serve.ts"],"names":[],"mappings":";AAWA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/scripts/serve.ts"],"names":[],"mappings":";AAWA,OAAO,sBAAsB,CAAC;AAe9B,MAAM,CAAC,OAAO,UAAU,KAAK,CAC3B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,QAqK9D"}
|
package/lib/scripts/serve.js
CHANGED
|
@@ -20,6 +20,8 @@ var _compression = _interopRequireDefault(require("compression"));
|
|
|
20
20
|
|
|
21
21
|
require("cross-fetch/polyfill");
|
|
22
22
|
|
|
23
|
+
var _getProxyMiddlewares = _interopRequireDefault(require("./getProxyMiddlewares"));
|
|
24
|
+
|
|
23
25
|
// run directly from node
|
|
24
26
|
if (require.main === module) {
|
|
25
27
|
const entrypoint = process.argv[2];
|
|
@@ -32,10 +34,16 @@ if (require.main === module) {
|
|
|
32
34
|
serve(entrypoint);
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
function serve(entrypoint) {
|
|
37
|
+
function serve(entrypoint, options = {}) {
|
|
36
38
|
const PORT = process.env.PORT || 8080;
|
|
37
39
|
const loader = (0, _ora.default)('Initializing').start();
|
|
38
|
-
|
|
40
|
+
|
|
41
|
+
const webpackConfig = require(require.resolve( // TODO: use normal resolution algorithm to find webpack file
|
|
42
|
+
_path.default.join(process.cwd(), 'webpack.config')));
|
|
43
|
+
|
|
44
|
+
const manifestPath = getManifestPathFromWebpackconfig(webpackConfig({}, {
|
|
45
|
+
mode: 'production'
|
|
46
|
+
}));
|
|
39
47
|
const readFile = (0, _util.promisify)(_fs.default.readFile);
|
|
40
48
|
let server;
|
|
41
49
|
|
|
@@ -64,27 +72,51 @@ function serve(entrypoint) {
|
|
|
64
72
|
|
|
65
73
|
wrappingApp.use((0, _compression.default)()); // ASSETS
|
|
66
74
|
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
if (options.serveAssets) {
|
|
76
|
+
wrappingApp.use(async (req, res, next) => {
|
|
77
|
+
var _req$url$substr, _req$url, _clientManifest$outpu;
|
|
78
|
+
|
|
79
|
+
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 : '';
|
|
80
|
+
|
|
81
|
+
const assetPath = _path.default.join((_clientManifest$outpu = clientManifest.outputPath) != null ? _clientManifest$outpu : '', filename);
|
|
82
|
+
|
|
83
|
+
if (_fs.default.existsSync(assetPath) && !_fs.default.lstatSync(assetPath).isDirectory()) {
|
|
84
|
+
try {
|
|
85
|
+
const fileContent = (await readFile(assetPath)).toString();
|
|
86
|
+
res.contentType(filename);
|
|
87
|
+
res.send(fileContent);
|
|
88
|
+
} catch (e) {
|
|
89
|
+
return next();
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
next();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
} // PROXIES
|
|
69
96
|
|
|
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
97
|
|
|
72
|
-
|
|
98
|
+
if (options.serveProxy) {
|
|
99
|
+
var _devConfig$devServer;
|
|
73
100
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
};
|
|
101
|
+
const devConfig = webpackConfig({}, {
|
|
102
|
+
mode: 'development'
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
if ((_devConfig$devServer = devConfig.devServer) !== null && _devConfig$devServer !== void 0 && _devConfig$devServer.proxy) {
|
|
106
|
+
var _devConfig$devServer2;
|
|
107
|
+
|
|
108
|
+
const middlewares = (0, _getProxyMiddlewares.default)((_devConfig$devServer2 = devConfig.devServer) === null || _devConfig$devServer2 === void 0 ? void 0 : _devConfig$devServer2.proxy);
|
|
84
109
|
|
|
85
|
-
|
|
110
|
+
if (middlewares) {
|
|
111
|
+
wrappingApp.use(...middlewares.map(({
|
|
112
|
+
middleware
|
|
113
|
+
}) => middleware));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
} // SERVER SIDE RENDERING
|
|
86
117
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
87
118
|
|
|
119
|
+
|
|
88
120
|
const render = require(_path.default.join(process.cwd(), entrypoint)).default;
|
|
89
121
|
|
|
90
122
|
wrappingApp.get('/*', handleErrors(async function (req, res) {
|
|
@@ -142,15 +174,9 @@ function serve(entrypoint) {
|
|
|
142
174
|
});
|
|
143
175
|
}
|
|
144
176
|
|
|
145
|
-
function getManifestPathFromWebpackconfig() {
|
|
177
|
+
function getManifestPathFromWebpackconfig(webpackConfig) {
|
|
146
178
|
var _opts$filename, _webpackConfig$plugin, _webpackConfig$plugin2, _webpackConfig$plugin3, _webpackConfig$output, _webpackConfig$output2;
|
|
147
179
|
|
|
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
180
|
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
181
|
return plugin.constructor.name === 'StatsWriterPlugin';
|
|
156
182
|
})) === 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';
|
|
@@ -159,4 +185,4 @@ function getManifestPathFromWebpackconfig() {
|
|
|
159
185
|
|
|
160
186
|
return manifestPath;
|
|
161
187
|
}
|
|
162
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImNvbnNvbGUiLCJsb2ciLCJleGl0Iiwic2VydmUiLCJQT1JUIiwiZW52IiwibG9hZGVyIiwib3JhIiwic3RhcnQiLCJtYW5pZmVzdFBhdGgiLCJnZXRNYW5pZmVzdFBhdGhGcm9tV2VicGFja2NvbmZpZyIsInJlYWRGaWxlIiwicHJvbWlzaWZ5IiwiZGlza0ZzIiwic2VydmVyIiwiaGFuZGxlRXJyb3JzIiwiZm4iLCJyZXEiLCJyZXMiLCJuZXh0IiwieCIsImluaXRpYWxpemVBcHAiLCJjbGllbnRNYW5pZmVzdCIsImluZm8iLCJmYWlsIiwid3JhcHBpbmdBcHAiLCJleHByZXNzIiwidXNlIiwiY29tcHJlc3MiLCJhc3NldFJvdXRlIiwiZmlsZW5hbWUiLCJ1cmwiLCJzdWJzdHIiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwibGVuZ3RoIiwiYXNzZXRQYXRoIiwicGF0aCIsImpvaW4iLCJvdXRwdXRQYXRoIiwiZmlsZUNvbnRlbnQiLCJ0b1N0cmluZyIsImNvbnRlbnRUeXBlIiwic2VuZCIsImUiLCJzdGF0dXMiLCJnZXQiLCJyZW5kZXIiLCJjd2QiLCJkZWZhdWx0IiwiZW5kc1dpdGgiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwic29ja2V0Iiwib24iLCJlcnJvciIsImxpc3RlbiIsInN5c2NhbGwiLCJpc1BpcGUiLCJwb3J0T3JQaXBlIiwiTnVtYmVyIiwiaXNOYU4iLCJiaW5kIiwiY29kZSIsIndhcm4iLCJjbG9zZSIsIndlYnBhY2tDb25maWciLCJyZXNvbHZlIiwibW9kZSIsIm1hbmlmZXN0RmlsZW5hbWUiLCJwbHVnaW5zIiwiZmluZCIsInBsdWdpbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm9wdHMiLCJvdXRwdXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9zZXJ2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IGRpc2tGcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB3ZWJwYWNrLCB7IHdlYiB9IGZyb20gJ3dlYnBhY2snO1xuaW1wb3J0IHsgU2VydmVyLCBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgZXhwcmVzcywgeyBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCBjb21wcmVzcyBmcm9tICdjb21wcmVzc2lvbic7XG5cbmltcG9ydCAnY3Jvc3MtZmV0Y2gvcG9seWZpbGwnO1xuaW1wb3J0IHsgUmVuZGVyIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIHJ1biBkaXJlY3RseSBmcm9tIG5vZGVcbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBjb25zdCBlbnRyeXBvaW50ID0gcHJvY2Vzcy5hcmd2WzJdO1xuXG4gIGlmICghZW50cnlwb2ludCkge1xuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogJHtwcm9jZXNzLmFyZ3ZbMF19IDxzZXJ2ZXItZW50cnlwb2ludD5gKTtcbiAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICB9XG4gIHNlcnZlKGVudHJ5cG9pbnQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJ2ZShlbnRyeXBvaW50OiBzdHJpbmcpIHtcbiAgY29uc3QgUE9SVCA9IHByb2Nlc3MuZW52LlBPUlQgfHwgODA4MDtcblxuICBjb25zdCBsb2FkZXIgPSBvcmEoJ0luaXRpYWxpemluZycpLnN0YXJ0KCk7XG5cbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gZ2V0TWFuaWZlc3RQYXRoRnJvbVdlYnBhY2tjb25maWcoKTtcblxuICBjb25zdCByZWFkRmlsZSA9IHByb21pc2lmeShkaXNrRnMucmVhZEZpbGUpO1xuICBsZXQgc2VydmVyOiBTZXJ2ZXIgfCB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3JzPFxuICAgIEYgZXh0ZW5kcyAoXG4gICAgICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2UsXG4gICAgICByZXM6IFJlc3BvbnNlIHwgU2VydmVyUmVzcG9uc2UsXG4gICAgKSA9PiBQcm9taXNlPHZvaWQ+LFxuICA+KGZuOiBGKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIChcbiAgICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICAgIG5leHQ6IE5leHRGdW5jdGlvbixcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbihyZXEsIHJlcyk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIG5leHQoeCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIFN0YXJ0IHRoZSBleHByZXNzIHNlcnZlciBhZnRlciB0aGUgZmlyc3QgY29tcGlsYXRpb25cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcChjbGllbnRNYW5pZmVzdDogd2VicGFjay5TdGF0c0NvbXBpbGF0aW9uKSB7XG4gICAgbG9hZGVyLmluZm8oJ0xhdW5jaGluZyBzZXJ2ZXInKTtcbiAgICBpZiAoIWNsaWVudE1hbmlmZXN0KSB7XG4gICAgICBsb2FkZXIuZmFpbCgnTWFuaWZlc3Qgbm90IGZvdW5kJyk7XG4gICAgICAvLyBUT0RPOiBoYW5kbGUgbW9yZSBncmFjZWZ1bGx5XG4gICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgIH1cblxuICAgIGNvbnN0IHdyYXBwaW5nQXBwID0gZXhwcmVzcygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIC8vQHRzLWlnbm9yZVxuICAgIHdyYXBwaW5nQXBwLnVzZShjb21wcmVzcygpKTtcblxuICAgIC8vIEFTU0VUU1xuICAgIGNvbnN0IGFzc2V0Um91dGUgPSBhc3luYyAocmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLCByZXM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZmlsZW5hbWUgPVxuICAgICAgICByZXEudXJsPy5zdWJzdHIoKHByb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggYXMgc3RyaW5nKS5sZW5ndGgpID8/XG4gICAgICAgICcnO1xuICAgICAgY29uc3QgYXNzZXRQYXRoID0gcGF0aC5qb2luKGNsaWVudE1hbmlmZXN0Lm91dHB1dFBhdGggPz8gJycsIGZpbGVuYW1lKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSAoYXdhaXQgcmVhZEZpbGUoYXNzZXRQYXRoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgcmVzLmNvbnRlbnRUeXBlKGZpbGVuYW1lKTtcbiAgICAgICAgcmVzLnNlbmQoZmlsZUNvbnRlbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgIHJlcy5zZW5kKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfTtcbiAgICB3cmFwcGluZ0FwcC5nZXQoYCR7cHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSH0qYCwgYXNzZXRSb3V0ZSk7XG5cbiAgICAvLyBTRVJWRVIgU0lERSBSRU5ERVJJTkdcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gcmVxdWlyZShwYXRoLmpvaW4oXG4gICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgZW50cnlwb2ludCxcbiAgICApKS5kZWZhdWx0O1xuICAgIHdyYXBwaW5nQXBwLmdldChcbiAgICAgICcvKicsXG4gICAgICBoYW5kbGVFcnJvcnMoYXN5bmMgZnVuY3Rpb24gKHJlcTogYW55LCByZXM6IGFueSkge1xuICAgICAgICBpZiAocmVxLnVybC5lbmRzV2l0aCgnZmF2aWNvbi5pY28nKSkge1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICByZXMuc2VuZCgnbm90IGZvdW5kJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5zb2NrZXQub24oJ2Vycm9yJywgKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmF0YWwnLCBlcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHJlbmRlcihjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHNlcnZlciA9IHdyYXBwaW5nQXBwXG4gICAgICAubGlzdGVuKFBPUlQsICgpID0+IHtcbiAgICAgICAgbG9hZGVyLmluZm8oYExpc3RlbmluZyBhdCAke1BPUlR9Li4uYCk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XG4gICAgICAgIGlmIChlcnJvci5zeXNjYWxsICE9PSAnbGlzdGVuJykge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzUGlwZSA9IChwb3J0T3JQaXBlOiBzdHJpbmcgfCBudW1iZXIpID0+XG4gICAgICAgICAgTnVtYmVyLmlzTmFOKHBvcnRPclBpcGUpO1xuICAgICAgICBjb25zdCBiaW5kID0gaXNQaXBlKFBPUlQpID8gJ1BpcGUgJyArIFBPUlQgOiAnUG9ydCAnICsgUE9SVDtcbiAgICAgICAgc3dpdGNoIChlcnJvci5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAnRUFDQ0VTJzpcbiAgICAgICAgICAgIGxvYWRlci5mYWlsKGJpbmQgKyAnIHJlcXVpcmVzIGVsZXZhdGVkIHByaXZpbGVnZXMnKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgICAgICBjYXNlICdFQUREUklOVVNFJzpcbiAgICAgICAgICAgIGxvYWRlci5mYWlsKGJpbmQgKyAnIGlzIGFscmVhZHkgaW4gdXNlJyk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIGluaXRpYWxpemVBcHAocmVxdWlyZShtYW5pZmVzdFBhdGgpKTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgbG9hZGVyLndhcm4oJ1JlY2VpdmVkIFNJR0lOVCwgZGV2c2VydmVyIHNodXR0aW5nIGRvd24nKTtcbiAgICBpZiAoc2VydmVyKSBjb25zb2xlLmxvZygnQ2xvc2luZyBzZXJ2ZXInKTtcbiAgICBzZXJ2ZXI/LmNsb3NlKCgpID0+IHtcbiAgICAgIGxvYWRlci5pbmZvKCdTZXJ2ZXIgY2xvc2VkJyk7XG4gICAgfSk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE1hbmlmZXN0UGF0aEZyb21XZWJwYWNrY29uZmlnKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCB3ZWJwYWNrQ29uZmlnOiB3ZWJwYWNrLkNvbmZpZ3VyYXRpb24gPSByZXF1aXJlKHJlcXVpcmUucmVzb2x2ZShcbiAgICAvLyBUT0RPOiB1c2Ugbm9ybWFsIHJlc29sdXRpb24gYWxnb3JpdGhtIHRvIGZpbmQgd2VicGFjayBmaWxlXG4gICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZycpLFxuICApKSh7fSwgeyBtb2RlOiAncHJvZHVjdGlvbicgfSk7XG4gIGNvbnN0IG1hbmlmZXN0RmlsZW5hbWU6IHN0cmluZyA9XG4gICAgKFxuICAgICAgd2VicGFja0NvbmZpZz8ucGx1Z2lucz8uZmluZChwbHVnaW4gPT4ge1xuICAgICAgICByZXR1cm4gcGx1Z2luLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdTdGF0c1dyaXRlclBsdWdpbic7XG4gICAgICB9KSBhcyBhbnlcbiAgICApPy5vcHRzPy5maWxlbmFtZSA/PyAnbWFuaWZlc3QuanNvbic7XG5cbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKFxuICAgIHdlYnBhY2tDb25maWc/Lm91dHB1dD8ucGF0aCA/PyAnJyxcbiAgICBtYW5pZmVzdEZpbGVuYW1lLFxuICApO1xuICByZXR1cm4gbWFuaWZlc3RQYXRoO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFHQTtBQUNBLElBQUlBLE9BQU8sQ0FBQ0MsSUFBUixLQUFpQkMsTUFBckIsRUFBNkI7RUFDM0IsTUFBTUMsVUFBVSxHQUFHQyxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiLENBQW5COztFQUVBLElBQUksQ0FBQ0YsVUFBTCxFQUFpQjtJQUNmRyxPQUFPLENBQUNDLEdBQVIsQ0FBYSxVQUFTSCxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiLENBQWdCLHNCQUF0QztJQUNBRCxPQUFPLENBQUNJLElBQVIsQ0FBYSxDQUFDLENBQWQ7RUFDRDs7RUFDREMsS0FBSyxDQUFDTixVQUFELENBQUw7QUFDRDs7QUFFYyxTQUFTTSxLQUFULENBQWVOLFVBQWYsRUFBbUM7RUFDaEQsTUFBTU8sSUFBSSxHQUFHTixPQUFPLENBQUNPLEdBQVIsQ0FBWUQsSUFBWixJQUFv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
|
|
188
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImNvbnNvbGUiLCJsb2ciLCJleGl0Iiwic2VydmUiLCJvcHRpb25zIiwiUE9SVCIsImVudiIsImxvYWRlciIsIm9yYSIsInN0YXJ0Iiwid2VicGFja0NvbmZpZyIsInJlc29sdmUiLCJwYXRoIiwiam9pbiIsImN3ZCIsIm1hbmlmZXN0UGF0aCIsImdldE1hbmlmZXN0UGF0aEZyb21XZWJwYWNrY29uZmlnIiwibW9kZSIsInJlYWRGaWxlIiwicHJvbWlzaWZ5IiwiZGlza0ZzIiwic2VydmVyIiwiaGFuZGxlRXJyb3JzIiwiZm4iLCJyZXEiLCJyZXMiLCJuZXh0IiwieCIsImluaXRpYWxpemVBcHAiLCJjbGllbnRNYW5pZmVzdCIsImluZm8iLCJmYWlsIiwid3JhcHBpbmdBcHAiLCJleHByZXNzIiwidXNlIiwiY29tcHJlc3MiLCJzZXJ2ZUFzc2V0cyIsImZpbGVuYW1lIiwidXJsIiwic3Vic3RyIiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsImxlbmd0aCIsImFzc2V0UGF0aCIsIm91dHB1dFBhdGgiLCJleGlzdHNTeW5jIiwibHN0YXRTeW5jIiwiaXNEaXJlY3RvcnkiLCJmaWxlQ29udGVudCIsInRvU3RyaW5nIiwiY29udGVudFR5cGUiLCJzZW5kIiwiZSIsInNlcnZlUHJveHkiLCJkZXZDb25maWciLCJkZXZTZXJ2ZXIiLCJwcm94eSIsIm1pZGRsZXdhcmVzIiwiZ2V0UHJveHlNaWRkbGV3YXJlcyIsIm1hcCIsIm1pZGRsZXdhcmUiLCJyZW5kZXIiLCJkZWZhdWx0IiwiZ2V0IiwiZW5kc1dpdGgiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwic29ja2V0Iiwib24iLCJlcnJvciIsImxpc3RlbiIsInN5c2NhbGwiLCJpc1BpcGUiLCJwb3J0T3JQaXBlIiwiTnVtYmVyIiwiaXNOYU4iLCJiaW5kIiwiY29kZSIsIndhcm4iLCJjbG9zZSIsIm1hbmlmZXN0RmlsZW5hbWUiLCJwbHVnaW5zIiwiZmluZCIsInBsdWdpbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm9wdHMiLCJvdXRwdXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9zZXJ2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IGRpc2tGcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB3ZWJwYWNrLCB7IHdlYiB9IGZyb20gJ3dlYnBhY2snO1xuaW1wb3J0IHsgU2VydmVyLCBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgZXhwcmVzcywgeyBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCBjb21wcmVzcyBmcm9tICdjb21wcmVzc2lvbic7XG5cbmltcG9ydCAnY3Jvc3MtZmV0Y2gvcG9seWZpbGwnO1xuaW1wb3J0IHsgUmVuZGVyIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgZ2V0UHJveHlNaWRkbGV3YXJlcyBmcm9tICcuL2dldFByb3h5TWlkZGxld2FyZXMnO1xuXG4vLyBydW4gZGlyZWN0bHkgZnJvbSBub2RlXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgY29uc3QgZW50cnlwb2ludCA9IHByb2Nlc3MuYXJndlsyXTtcblxuICBpZiAoIWVudHJ5cG9pbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgVXNhZ2U6ICR7cHJvY2Vzcy5hcmd2WzBdfSA8c2VydmVyLWVudHJ5cG9pbnQ+YCk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfVxuICBzZXJ2ZShlbnRyeXBvaW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VydmUoXG4gIGVudHJ5cG9pbnQ6IHN0cmluZyxcbiAgb3B0aW9uczogeyBzZXJ2ZUFzc2V0cz86IGJvb2xlYW47IHNlcnZlUHJveHk/OiBib29sZWFuIH0gPSB7fSxcbikge1xuICBjb25zdCBQT1JUID0gcHJvY2Vzcy5lbnYuUE9SVCB8fCA4MDgwO1xuXG4gIGNvbnN0IGxvYWRlciA9IG9yYSgnSW5pdGlhbGl6aW5nJykuc3RhcnQoKTtcblxuICBjb25zdCB3ZWJwYWNrQ29uZmlnOiAoXG4gICAgZW52OiBhbnksXG4gICAgYXJndjogYW55LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICkgPT4gd2VicGFjay5Db25maWd1cmF0aW9uID0gcmVxdWlyZShyZXF1aXJlLnJlc29sdmUoXG4gICAgLy8gVE9ETzogdXNlIG5vcm1hbCByZXNvbHV0aW9uIGFsZ29yaXRobSB0byBmaW5kIHdlYnBhY2sgZmlsZVxuICAgIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcnKSxcbiAgKSk7XG5cbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gZ2V0TWFuaWZlc3RQYXRoRnJvbVdlYnBhY2tjb25maWcoXG4gICAgd2VicGFja0NvbmZpZyh7fSwgeyBtb2RlOiAncHJvZHVjdGlvbicgfSksXG4gICk7XG5cbiAgY29uc3QgcmVhZEZpbGUgPSBwcm9taXNpZnkoZGlza0ZzLnJlYWRGaWxlKTtcbiAgbGV0IHNlcnZlcjogU2VydmVyIHwgdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUVycm9yczxcbiAgICBGIGV4dGVuZHMgKFxuICAgICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgICAgcmVzOiBSZXNwb25zZSB8IFNlcnZlclJlc3BvbnNlLFxuICAgICkgPT4gUHJvbWlzZTx2b2lkPixcbiAgPihmbjogRikge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiAoXG4gICAgICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2UsXG4gICAgICByZXM6IFJlc3BvbnNlIHwgU2VydmVyUmVzcG9uc2UsXG4gICAgICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZm4ocmVxLCByZXMpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBuZXh0KHgpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBTdGFydCB0aGUgZXhwcmVzcyBzZXJ2ZXIgYWZ0ZXIgdGhlIGZpcnN0IGNvbXBpbGF0aW9uXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVBcHAoY2xpZW50TWFuaWZlc3Q6IHdlYnBhY2suU3RhdHNDb21waWxhdGlvbikge1xuICAgIGxvYWRlci5pbmZvKCdMYXVuY2hpbmcgc2VydmVyJyk7XG4gICAgaWYgKCFjbGllbnRNYW5pZmVzdCkge1xuICAgICAgbG9hZGVyLmZhaWwoJ01hbmlmZXN0IG5vdCBmb3VuZCcpO1xuICAgICAgLy8gVE9ETzogaGFuZGxlIG1vcmUgZ3JhY2VmdWxseVxuICAgICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGluZ0FwcCA9IGV4cHJlc3MoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAvL0B0cy1pZ25vcmVcbiAgICB3cmFwcGluZ0FwcC51c2UoY29tcHJlc3MoKSk7XG5cbiAgICAvLyBBU1NFVFNcbiAgICBpZiAob3B0aW9ucy5zZXJ2ZUFzc2V0cykge1xuICAgICAgd3JhcHBpbmdBcHAudXNlKFxuICAgICAgICBhc3luYyAoXG4gICAgICAgICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgICAgICAgIHJlczogYW55LFxuICAgICAgICAgIG5leHQ6IE5leHRGdW5jdGlvbixcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZW5hbWUgPVxuICAgICAgICAgICAgcmVxLnVybD8uc3Vic3RyKFxuICAgICAgICAgICAgICAocHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCBhcyBzdHJpbmcpLmxlbmd0aCxcbiAgICAgICAgICAgICkgPz8gJyc7XG4gICAgICAgICAgY29uc3QgYXNzZXRQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgY2xpZW50TWFuaWZlc3Qub3V0cHV0UGF0aCA/PyAnJyxcbiAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkaXNrRnMuZXhpc3RzU3luYyhhc3NldFBhdGgpICYmXG4gICAgICAgICAgICAhZGlza0ZzLmxzdGF0U3luYyhhc3NldFBhdGgpLmlzRGlyZWN0b3J5KClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gKGF3YWl0IHJlYWRGaWxlKGFzc2V0UGF0aCkpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIHJlcy5jb250ZW50VHlwZShmaWxlbmFtZSk7XG4gICAgICAgICAgICAgIHJlcy5zZW5kKGZpbGVDb250ZW50KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUFJPWElFU1xuICAgIGlmIChvcHRpb25zLnNlcnZlUHJveHkpIHtcbiAgICAgIGNvbnN0IGRldkNvbmZpZzogd2VicGFjay5Db25maWd1cmF0aW9uID0gd2VicGFja0NvbmZpZyhcbiAgICAgICAge30sXG4gICAgICAgIHsgbW9kZTogJ2RldmVsb3BtZW50JyB9LFxuICAgICAgKTtcbiAgICAgIGlmIChkZXZDb25maWcuZGV2U2VydmVyPy5wcm94eSkge1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGdldFByb3h5TWlkZGxld2FyZXMoZGV2Q29uZmlnLmRldlNlcnZlcj8ucHJveHkpO1xuICAgICAgICBpZiAobWlkZGxld2FyZXMpIHtcbiAgICAgICAgICB3cmFwcGluZ0FwcC51c2UoLi4ubWlkZGxld2FyZXMubWFwKCh7IG1pZGRsZXdhcmUgfSkgPT4gbWlkZGxld2FyZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU0VSVkVSIFNJREUgUkVOREVSSU5HXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICBjb25zdCByZW5kZXI6IFJlbmRlciA9IHJlcXVpcmUocGF0aC5qb2luKFxuICAgICAgcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGVudHJ5cG9pbnQsXG4gICAgKSkuZGVmYXVsdDtcblxuICAgIHdyYXBwaW5nQXBwLmdldChcbiAgICAgICcvKicsXG4gICAgICBoYW5kbGVFcnJvcnMoYXN5bmMgZnVuY3Rpb24gKHJlcTogYW55LCByZXM6IGFueSkge1xuICAgICAgICBpZiAocmVxLnVybC5lbmRzV2l0aCgnZmF2aWNvbi5pY28nKSkge1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICByZXMuc2VuZCgnbm90IGZvdW5kJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5zb2NrZXQub24oJ2Vycm9yJywgKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmF0YWwnLCBlcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHJlbmRlcihjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHNlcnZlciA9IHdyYXBwaW5nQXBwXG4gICAgICAubGlzdGVuKFBPUlQsICgpID0+IHtcbiAgICAgICAgbG9hZGVyLmluZm8oYExpc3RlbmluZyBhdCAke1BPUlR9Li4uYCk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XG4gICAgICAgIGlmIChlcnJvci5zeXNjYWxsICE9PSAnbGlzdGVuJykge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzUGlwZSA9IChwb3J0T3JQaXBlOiBzdHJpbmcgfCBudW1iZXIpID0+XG4gICAgICAgICAgTnVtYmVyLmlzTmFOKHBvcnRPclBpcGUpO1xuICAgICAgICBjb25zdCBiaW5kID0gaXNQaXBlKFBPUlQpID8gJ1BpcGUgJyArIFBPUlQgOiAnUG9ydCAnICsgUE9SVDtcbiAgICAgICAgc3dpdGNoIChlcnJvci5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAnRUFDQ0VTJzpcbiAgICAgICAgICAgIGxvYWRlci5mYWlsKGJpbmQgKyAnIHJlcXVpcmVzIGVsZXZhdGVkIHByaXZpbGVnZXMnKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgICAgICBjYXNlICdFQUREUklOVVNFJzpcbiAgICAgICAgICAgIGxvYWRlci5mYWlsKGJpbmQgKyAnIGlzIGFscmVhZHkgaW4gdXNlJyk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIGluaXRpYWxpemVBcHAocmVxdWlyZShtYW5pZmVzdFBhdGgpKTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgbG9hZGVyLndhcm4oJ1JlY2VpdmVkIFNJR0lOVCwgZGV2c2VydmVyIHNodXR0aW5nIGRvd24nKTtcbiAgICBpZiAoc2VydmVyKSBjb25zb2xlLmxvZygnQ2xvc2luZyBzZXJ2ZXInKTtcbiAgICBzZXJ2ZXI/LmNsb3NlKCgpID0+IHtcbiAgICAgIGxvYWRlci5pbmZvKCdTZXJ2ZXIgY2xvc2VkJyk7XG4gICAgfSk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE1hbmlmZXN0UGF0aEZyb21XZWJwYWNrY29uZmlnKFxuICB3ZWJwYWNrQ29uZmlnOiB3ZWJwYWNrLkNvbmZpZ3VyYXRpb24sXG4pIHtcbiAgY29uc3QgbWFuaWZlc3RGaWxlbmFtZTogc3RyaW5nID1cbiAgICAoXG4gICAgICB3ZWJwYWNrQ29uZmlnPy5wbHVnaW5zPy5maW5kKHBsdWdpbiA9PiB7XG4gICAgICAgIHJldHVybiBwbHVnaW4uY29uc3RydWN0b3IubmFtZSA9PT0gJ1N0YXRzV3JpdGVyUGx1Z2luJztcbiAgICAgIH0pIGFzIGFueVxuICAgICk/Lm9wdHM/LmZpbGVuYW1lID8/ICdtYW5pZmVzdC5qc29uJztcblxuICBjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLmpvaW4oXG4gICAgd2VicGFja0NvbmZpZz8ub3V0cHV0Py5wYXRoID8/ICcnLFxuICAgIG1hbmlmZXN0RmlsZW5hbWUsXG4gICk7XG4gIHJldHVybiBtYW5pZmVzdFBhdGg7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsSUFBSUEsT0FBTyxDQUFDQyxJQUFSLEtBQWlCQyxNQUFyQixFQUE2QjtFQUMzQixNQUFNQyxVQUFVLEdBQUdDLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENBQWIsQ0FBbkI7O0VBRUEsSUFBSSxDQUFDRixVQUFMLEVBQWlCO0lBQ2ZH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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;AAe9B,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,QAmNlC"}
|
|
@@ -34,9 +34,7 @@ require("cross-fetch/polyfill");
|
|
|
34
34
|
|
|
35
35
|
// run directly from node
|
|
36
36
|
if (require.main === module) {
|
|
37
|
-
const entrypoint = process.argv[2];
|
|
38
|
-
|
|
39
|
-
process.env.WEBPACK_PUBLIC_PATH = '/assets/';
|
|
37
|
+
const entrypoint = process.argv[2];
|
|
40
38
|
|
|
41
39
|
if (!entrypoint) {
|
|
42
40
|
console.log(`Usage: start-anansi <entrypoint-file>`);
|
|
@@ -165,14 +163,6 @@ function startDevServer(entrypoint, env = {}) {
|
|
|
165
163
|
|
|
166
164
|
const devServer = new _webpackDevServer.default( // write to memory filesystem so we can import
|
|
167
165
|
{ ...webpackConfigs[0].devServer,
|
|
168
|
-
|
|
169
|
-
/*client: {
|
|
170
|
-
...webpackConfigs[0].devServer?.client,
|
|
171
|
-
webSocketURL: {
|
|
172
|
-
...webpackConfigs[0].devServer?.client.webSocketURL,
|
|
173
|
-
port: 8080,
|
|
174
|
-
},
|
|
175
|
-
},*/
|
|
176
166
|
devMiddleware: { ...((_webpackConfigs$ = webpackConfigs[0]) === null || _webpackConfigs$ === void 0 ? void 0 : (_webpackConfigs$$devS = _webpackConfigs$.devServer) === null || _webpackConfigs$$devS === void 0 ? void 0 : _webpackConfigs$$devS.devMiddleware),
|
|
177
167
|
outputFileSystem: { ...fs,
|
|
178
168
|
join: _path.default.join
|
|
@@ -240,4 +230,4 @@ function startDevServer(entrypoint, env = {}) {
|
|
|
240
230
|
});
|
|
241
231
|
runServer();
|
|
242
232
|
}
|
|
243
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImVudiIsIldFQlBBQ0tfUFVCTElDX1BBVEgiLCJjb25zb2xlIiwibG9nIiwiZXhpdCIsInN0YXJ0RGV2U2VydmVyIiwid2VicGFja0NvbmZpZyIsInJlc29sdmUiLCJwYXRoIiwiam9pbiIsImN3ZCIsImxvZ2dpbmciLCJnZXRMb2dnZXIiLCJ2b2x1bWUiLCJWb2x1bWUiLCJmcyIsImNyZWF0ZUZzRnJvbVZvbHVtZSIsInVmcyIsInVzZSIsImRpc2tGcyIsInBhdGNoUmVxdWlyZSIsInJlYWRGaWxlIiwicHJvbWlzaWZ5Iiwic2VydmVyIiwiaG90RW50cnkiLCJlbnRyeVBhdGgiLCJnZW5lcmF0ZWRFbnRyeXBvaW50IiwidG1wIiwiZmlsZVN5bmMiLCJwb3N0Zml4Iiwid3JpdGVTeW5jIiwiZmQiLCJ3ZWJwYWNrQ29uZmlncyIsImVudHJ5cGF0aCIsIm5hbWUiLCJtb2RlIiwicmVwbGFjZSIsIkJST1dTRVJTTElTVF9FTlYiLCJ0YXJnZXQiLCJwbHVnaW5zIiwicHVzaCIsIndlYnBhY2siLCJvcHRpbWl6ZSIsIkxpbWl0Q2h1bmtDb3VudFBsdWdpbiIsIm1heENodW5rcyIsImNvbXBpbGVyIiwic291cmNlTWFwU3VwcG9ydCIsImluc3RhbGwiLCJob29rUmVxdWlyZSIsImdldFNlcnZlckJ1bmRsZSIsInNlcnZlclN0YXRzIiwic2VydmVySnNvbiIsInRvSnNvbiIsImFzc2V0cyIsIm91dHB1dFBhdGgiLCJoYW5kbGVFcnJvcnMiLCJmbiIsInJlcSIsInJlcyIsIm5leHQiLCJ4IiwiaW5pdFJlbmRlciIsInJlbmRlciIsImFyZ3MiLCJQcm9taXNlIiwiaW1wb3J0UmVuZGVyIiwic3RhdHMiLCJjbGllbnRTdGF0cyIsImNvbXBpbGF0aW9uIiwiZXJyb3JzIiwibGVuZ3RoIiwiZXJyb3IiLCJpbmZvIiwiY2xpZW50TWFuaWZlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJkZWZhdWx0IiwiYmluZCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJpbml0IiwidGhlbiIsImltcG9ydEZyZXNoIiwiZGV2U2VydmVyIiwiV2VicGFja0RldlNlcnZlciIsImRldk1pZGRsZXdhcmUiLCJvdXRwdXRGaWxlU3lzdGVtIiwic2V0dXBNaWRkbGV3YXJlcyIsIm1pZGRsZXdhcmVzIiwiRXJyb3IiLCJvdGhlclJvdXRlcyIsIk9iamVjdCIsImtleXMiLCJwcm94eSIsImFwcCIsImdldCIsIlJlZ0V4cCIsInVybCIsImVuZHNXaXRoIiwic3RhdHVzQ29kZSIsInNldEhlYWRlciIsInNlbmQiLCJzb2NrZXQiLCJvbiIsInJ1blNlcnZlciIsInN0YXJ0IiwiaG9va3MiLCJkb25lIiwidGFwIiwibXVsdGlTdGF0cyIsImhhc093biIsImUiLCJzdG9wU2VydmVyIiwic3RvcCIsIndhcm4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9zdGFydERldnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IGRpc2tGcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB3ZWJwYWNrLCB7IE11bHRpQ29tcGlsZXIgfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCB7IGNyZWF0ZUZzRnJvbVZvbHVtZSwgVm9sdW1lIH0gZnJvbSAnbWVtZnMnO1xuaW1wb3J0IHsgU2VydmVyLCBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgdHlwZSB7IE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgcGF0Y2hSZXF1aXJlIH0gZnJvbSAnZnMtbW9ua2V5JztcbmltcG9ydCB0bXAgZnJvbSAndG1wJztcbmltcG9ydCBzb3VyY2VNYXBTdXBwb3J0IGZyb20gJ3NvdXJjZS1tYXAtc3VwcG9ydCc7XG5pbXBvcnQgeyB1ZnMgfSBmcm9tICd1bmlvbmZzJztcbmltcG9ydCBXZWJwYWNrRGV2U2VydmVyIGZyb20gJ3dlYnBhY2stZGV2LXNlcnZlcic7XG5pbXBvcnQgaW1wb3J0RnJlc2ggZnJvbSAnaW1wb3J0LWZyZXNoJztcbmltcG9ydCBsb2dnaW5nIGZyb20gJ3dlYnBhY2svbGliL2xvZ2dpbmcvcnVudGltZSc7XG5cbmltcG9ydCAnY3Jvc3MtZmV0Y2gvcG9seWZpbGwnO1xuaW1wb3J0IHsgQm91bmRSZW5kZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gcnVuIGRpcmVjdGx5IGZyb20gbm9kZVxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGNvbnN0IGVudHJ5cG9pbnQgPSBwcm9jZXNzLmFyZ3ZbMl07XG4gIC8vcHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfSE9TVCA9IGBodHRwOi8vbG9jYWxob3N0OiR7UE9SVH1gOyB0aGlzIGJyZWFrcyBjb21wYXRpYmlsaXR5IHdpdGggc3RhY2tibGl0elxuICBwcm9jZXNzLmVudi5XRUJQQUNLX1BVQkxJQ19QQVRIID0gJy9hc3NldHMvJztcblxuICBpZiAoIWVudHJ5cG9pbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgVXNhZ2U6IHN0YXJ0LWFuYW5zaSA8ZW50cnlwb2ludC1maWxlPmApO1xuICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gIH1cblxuICBzdGFydERldlNlcnZlcihlbnRyeXBvaW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnREZXZTZXJ2ZXIoXG4gIGVudHJ5cG9pbnQ6IHN0cmluZyxcbiAgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9LFxuKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIGNvbnN0IHdlYnBhY2tDb25maWcgPSByZXF1aXJlKHJlcXVpcmUucmVzb2x2ZShcbiAgICAvLyBUT0RPOiB1c2Ugbm9ybWFsIHJlc29sdXRpb24gYWxnb3JpdGhtIHRvIGZpbmQgd2VicGFjayBmaWxlXG4gICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZycpLFxuICApKTtcblxuICBjb25zdCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignYW5hbnNpLWRldnNlcnZlcicpO1xuXG4gIC8vIFNldCB1cCBpbiBtZW1vcnkgZmlsZXN5c3RlbVxuICBjb25zdCB2b2x1bWUgPSBuZXcgVm9sdW1lKCk7XG4gIGNvbnN0IGZzID0gY3JlYXRlRnNGcm9tVm9sdW1lKHZvbHVtZSk7XG4gIHVmcy51c2UoZGlza0ZzKS51c2UoZnMgYXMgYW55KTtcblxuICBwYXRjaFJlcXVpcmUodWZzKTtcbiAgY29uc3QgcmVhZEZpbGUgPSBwcm9taXNpZnkodWZzLnJlYWRGaWxlKTtcbiAgbGV0IHNlcnZlcjogU2VydmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8vIEdlbmVyYXRlIGEgdGVtcG9yYXJ5IGZpbGUgc28gd2UgY2FuIGhvdCByZWxvYWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgYXBwbGljYXRpb25cbiAgZnVuY3Rpb24gaG90RW50cnkoZW50cnlQYXRoOiBzdHJpbmcpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAvLyBAdHMtaWdub3JlIGZvciBzb21lIHJlYXNvbiBpdCdzIG5vdCBwaWNraW5nIHVwIHRoYXQgb3RoZXIgb3B0aW9ucyBhcmUgb3B0aW9uYWxcbiAgICBjb25zdCBnZW5lcmF0ZWRFbnRyeXBvaW50ID0gdG1wLmZpbGVTeW5jKHsgcG9zdGZpeDogJy5qcycgfSk7XG4gICAgZGlza0ZzLndyaXRlU3luYyhcbiAgICAgIGdlbmVyYXRlZEVudHJ5cG9pbnQuZmQsXG4gICAgICBgXG4gIGltcG9ydCBlbnRyeSBmcm9tIFwiJHtwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZW50cnlQYXRoKX1cIjtcblxuICBpZiAobW9kdWxlLmhvdCkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KCk7XG4gIH1cblxuICBleHBvcnQgZGVmYXVsdCBlbnRyeTtcbiAgICBgLFxuICAgICk7XG4gICAgcmV0dXJuIGdlbmVyYXRlZEVudHJ5cG9pbnQ7XG4gIH1cblxuICBjb25zdCB3ZWJwYWNrQ29uZmlncyA9IFtcbiAgICB3ZWJwYWNrQ29uZmlnKFxuICAgICAge1xuICAgICAgICAuLi5lbnYsXG4gICAgICAgIGVudHJ5cGF0aDogaG90RW50cnkoZW50cnlwb2ludCkubmFtZSxcbiAgICAgICAgbmFtZTogJ2NsaWVudCcsXG4gICAgICB9LFxuICAgICAgeyBtb2RlOiAnZGV2ZWxvcG1lbnQnIH0sXG4gICAgKSxcbiAgICB3ZWJwYWNrQ29uZmlnKFxuICAgICAge1xuICAgICAgICAuLi5lbnYsXG4gICAgICAgIGVudHJ5cGF0aDogZW50cnlwb2ludC5yZXBsYWNlKCcudHN4JywgJy5zZXJ2ZXIudHN4JyksXG4gICAgICAgIG5hbWU6ICdzZXJ2ZXInLFxuICAgICAgICBCUk9XU0VSU0xJU1RfRU5WOiAnY3VycmVudCBub2RlJyxcbiAgICAgIH0sXG4gICAgICB7IG1vZGU6ICdkZXZlbG9wbWVudCcsIHRhcmdldDogJ25vZGUnIH0sXG4gICAgKSxcbiAgXSBhcyBjb25zdDtcbiAgLy8gb25seSBoYXZlIG9uZSBvdXRwdXQgZm9yIHNlcnZlciBzbyB3ZSBjYW4gYXZvaWQgY2FjaGVkIG1vZHVsZXNcbiAgd2VicGFja0NvbmZpZ3NbMV0ucGx1Z2lucy5wdXNoKFxuICAgIG5ldyB3ZWJwYWNrLm9wdGltaXplLkxpbWl0Q2h1bmtDb3VudFBsdWdpbih7IG1heENodW5rczogMSB9KSxcbiAgKTtcbiAgLy8gaW5pdGlhbGl6ZSB0aGUgd2VicGFjayBjb21waWxlclxuICBjb25zdCBjb21waWxlcjogTXVsdGlDb21waWxlciA9IHdlYnBhY2sod2VicGFja0NvbmZpZ3MpO1xuXG4gIHNvdXJjZU1hcFN1cHBvcnQuaW5zdGFsbCh7IGhvb2tSZXF1aXJlOiB0cnVlIH0pO1xuXG4gIGZ1bmN0aW9uIGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0czogd2VicGFjay5TdGF0cykge1xuICAgIGNvbnN0IHNlcnZlckpzb24gPSBzZXJ2ZXJTdGF0cy50b0pzb24oeyBhc3NldHM6IHRydWUgfSk7XG4gICAgcmV0dXJuIHBhdGguam9pbihzZXJ2ZXJKc29uLm91dHB1dFBhdGggPz8gJycsICdzZXJ2ZXIuanMnKTtcbiAgfVxuICBmdW5jdGlvbiBoYW5kbGVFcnJvcnM8XG4gICAgRiBleHRlbmRzIChcbiAgICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICApID0+IFByb21pc2U8dm9pZD4sXG4gID4oZm46IEYpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgICAgcmVzOiBSZXNwb25zZSB8IFNlcnZlclJlc3BvbnNlLFxuICAgICAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKHJlcSwgcmVzKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgbmV4dCh4KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgaW5pdFJlbmRlcjpcbiAgICB8IHsgYXJnczogUGFyYW1ldGVyczxCb3VuZFJlbmRlcj47IHJlc29sdmU6ICgpID0+IHZvaWQgfVtdXG4gICAgfCB1bmRlZmluZWQgPSBbXTtcbiAgbGV0IHJlbmRlcjogQm91bmRSZW5kZXIgPSAoLi4uYXJncykgPT5cbiAgICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGluaXRSZW5kZXIucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSk7XG4gICAgfSk7XG5cbiAgZnVuY3Rpb24gaW1wb3J0UmVuZGVyKHN0YXRzOiB3ZWJwYWNrLlN0YXRzW10pIHtcbiAgICBjb25zdCBbY2xpZW50U3RhdHMsIHNlcnZlclN0YXRzXSA9IHN0YXRzO1xuICAgIGlmIChcbiAgICAgIGNsaWVudFN0YXRzPy5jb21waWxhdGlvbj8uZXJyb3JzPy5sZW5ndGggfHxcbiAgICAgIHNlcnZlclN0YXRzPy5jb21waWxhdGlvbj8uZXJyb3JzPy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZy5lcnJvcignRXJyb3JzIGZvciBjbGllbnQgYnVpbGQ6ICcgKyBjbGllbnRTdGF0cy5jb21waWxhdGlvbi5lcnJvcnMpO1xuICAgICAgbG9nLmVycm9yKCdFcnJvcnMgZm9yIHNlcnZlciBidWlsZDogJyArIHNlcnZlclN0YXRzLmNvbXBpbGF0aW9uLmVycm9ycyk7XG4gICAgICAvLyBUT0RPOiBoYW5kbGUgbW9yZSBncmFjZWZ1bGx5XG4gICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbygnTGF1bmNoaW5nIFNTUicpO1xuICAgIH1cblxuICAgIC8vIEFTU0VUU1xuICAgIGNvbnN0IGNsaWVudE1hbmlmZXN0ID0gY2xpZW50U3RhdHMudG9Kc29uKCk7XG5cbiAgICAvLyBTRVJWRVIgU0lERSBFTlRSWVBPSU5UXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdFJlbmRlcikpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgICByZW5kZXIgPSAocmVxdWlyZShnZXRTZXJ2ZXJCdW5kbGUoc2VydmVyU3RhdHMpKSBhcyBhbnkpLmRlZmF1bHQuYmluZChcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBjbGllbnRNYW5pZmVzdCxcbiAgICAgICk7XG4gICAgICBpbml0UmVuZGVyLmZvckVhY2goaW5pdCA9PiByZW5kZXIoLi4uaW5pdC5hcmdzKS50aGVuKGluaXQucmVzb2x2ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW5kZXIgPSAoaW1wb3J0RnJlc2goZ2V0U2VydmVyQnVuZGxlKHNlcnZlclN0YXRzKSkgYXMgYW55KS5kZWZhdWx0LmJpbmQoXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgY2xpZW50TWFuaWZlc3QsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRldlNlcnZlciA9IG5ldyBXZWJwYWNrRGV2U2VydmVyKFxuICAgIC8vIHdyaXRlIHRvIG1lbW9yeSBmaWxlc3lzdGVtIHNvIHdlIGNhbiBpbXBvcnRcbiAgICB7XG4gICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXIsXG4gICAgICAvKmNsaWVudDoge1xuICAgICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXI/LmNsaWVudCxcbiAgICAgICAgd2ViU29ja2V0VVJMOiB7XG4gICAgICAgICAgLi4ud2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyPy5jbGllbnQud2ViU29ja2V0VVJMLFxuICAgICAgICAgIHBvcnQ6IDgwODAsXG4gICAgICAgIH0sXG4gICAgICB9LCovXG4gICAgICBkZXZNaWRkbGV3YXJlOiB7XG4gICAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdPy5kZXZTZXJ2ZXI/LmRldk1pZGRsZXdhcmUsXG4gICAgICAgIG91dHB1dEZpbGVTeXN0ZW06IHtcbiAgICAgICAgICAuLi5mcyxcbiAgICAgICAgICBqb2luOiBwYXRoLmpvaW4gYXMgYW55LFxuICAgICAgICB9IGFzIGFueSBhcyB0eXBlb2YgZnMsXG4gICAgICB9LFxuICAgICAgc2V0dXBNaWRkbGV3YXJlczogKG1pZGRsZXdhcmVzLCBkZXZTZXJ2ZXIpID0+IHtcbiAgICAgICAgaWYgKCFkZXZTZXJ2ZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dlYnBhY2stZGV2LXNlcnZlciBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3RoZXJSb3V0ZXMgPSBbXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCxcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyh3ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXI/LnByb3h5ID8/IHt9KSxcbiAgICAgICAgXTtcbiAgICAgICAgLy8gc2VydmUgU1NSIGZvciBub24tV0VCUEFDS19QVUJMSUNfUEFUSFxuICAgICAgICBkZXZTZXJ2ZXIuYXBwPy5nZXQoXG4gICAgICAgICAgbmV3IFJlZ0V4cChgXig/ISR7b3RoZXJSb3V0ZXMuam9pbignfCcpfSlgKSxcbiAgICAgICAgICBoYW5kbGVFcnJvcnMoYXN5bmMgZnVuY3Rpb24gKHJlcTogYW55LCByZXM6IGFueSkge1xuICAgICAgICAgICAgaWYgKHJlcS51cmwuZW5kc1dpdGgoJ2Zhdmljb24uaWNvJykpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XG4gICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICAgICAgcmVzLnNlbmQoJ25vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMuc29ja2V0Lm9uKCdlcnJvcicsIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCcsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCByZW5kZXIocmVxLCByZXMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlcztcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21waWxlcixcbiAgKTtcbiAgY29uc3QgcnVuU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRldlNlcnZlci5zdGFydCgpO1xuICAgIGRldlNlcnZlci5jb21waWxlci5ob29rcy5kb25lLnRhcChcbiAgICAgICdBbmFuc2kgU2VydmVyJyxcbiAgICAgIChtdWx0aVN0YXRzOiB3ZWJwYWNrLk11bHRpU3RhdHMgfCB3ZWJwYWNrLlN0YXRzKSA9PiB7XG4gICAgICAgIGlmICghbXVsdGlTdGF0cykge1xuICAgICAgICAgIGxvZy5lcnJvcignc3RhdHMgbm90IHNlbmQnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duKG11bHRpU3RhdHMsICdzdGF0cycpKSByZXR1cm47XG4gICAgICAgIGlmICgobXVsdGlTdGF0cyBhcyB3ZWJwYWNrLk11bHRpU3RhdHMpLnN0YXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW1wb3J0UmVuZGVyKChtdWx0aVN0YXRzIGFzIHdlYnBhY2suTXVsdGlTdGF0cykuc3RhdHMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBzZXJ2ZSBlbnRyeXBvaW50Jyk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2cuZXJyb3IoJ09ubHkgY29tcGlsZXIgb25lIHN0YXQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9O1xuICBjb25zdCBzdG9wU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgIGxvZy5pbmZvKCdTdG9wcGluZyBzZXJ2ZXIuLi4nKTtcbiAgICBhd2FpdCBkZXZTZXJ2ZXIuc3RvcCgpO1xuICAgIGxvZy5pbmZvKCdTZXJ2ZXIgY2xvc2VkJyk7XG4gIH07XG5cbiAgcHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGxvZy53YXJuKCdSZWNlaXZlZCBTSUdJTlQsIGRldnNlcnZlciBzaHV0dGluZyBkb3duJyk7XG4gICAgc3RvcFNlcnZlcigpO1xuICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gIH0pO1xuXG4gIHJ1blNlcnZlcigpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFB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
|
|
233
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImNvbnNvbGUiLCJsb2ciLCJleGl0Iiwic3RhcnREZXZTZXJ2ZXIiLCJlbnYiLCJ3ZWJwYWNrQ29uZmlnIiwicmVzb2x2ZSIsInBhdGgiLCJqb2luIiwiY3dkIiwibG9nZ2luZyIsImdldExvZ2dlciIsInZvbHVtZSIsIlZvbHVtZSIsImZzIiwiY3JlYXRlRnNGcm9tVm9sdW1lIiwidWZzIiwidXNlIiwiZGlza0ZzIiwicGF0Y2hSZXF1aXJlIiwicmVhZEZpbGUiLCJwcm9taXNpZnkiLCJzZXJ2ZXIiLCJob3RFbnRyeSIsImVudHJ5UGF0aCIsImdlbmVyYXRlZEVudHJ5cG9pbnQiLCJ0bXAiLCJmaWxlU3luYyIsInBvc3RmaXgiLCJ3cml0ZVN5bmMiLCJmZCIsIndlYnBhY2tDb25maWdzIiwiZW50cnlwYXRoIiwibmFtZSIsIm1vZGUiLCJyZXBsYWNlIiwiQlJPV1NFUlNMSVNUX0VOViIsInRhcmdldCIsInBsdWdpbnMiLCJwdXNoIiwid2VicGFjayIsIm9wdGltaXplIiwiTGltaXRDaHVua0NvdW50UGx1Z2luIiwibWF4Q2h1bmtzIiwiY29tcGlsZXIiLCJzb3VyY2VNYXBTdXBwb3J0IiwiaW5zdGFsbCIsImhvb2tSZXF1aXJlIiwiZ2V0U2VydmVyQnVuZGxlIiwic2VydmVyU3RhdHMiLCJzZXJ2ZXJKc29uIiwidG9Kc29uIiwiYXNzZXRzIiwib3V0cHV0UGF0aCIsImhhbmRsZUVycm9ycyIsImZuIiwicmVxIiwicmVzIiwibmV4dCIsIngiLCJpbml0UmVuZGVyIiwicmVuZGVyIiwiYXJncyIsIlByb21pc2UiLCJpbXBvcnRSZW5kZXIiLCJzdGF0cyIsImNsaWVudFN0YXRzIiwiY29tcGlsYXRpb24iLCJlcnJvcnMiLCJsZW5ndGgiLCJlcnJvciIsImluZm8iLCJjbGllbnRNYW5pZmVzdCIsIkFycmF5IiwiaXNBcnJheSIsImRlZmF1bHQiLCJiaW5kIiwidW5kZWZpbmVkIiwiZm9yRWFjaCIsImluaXQiLCJ0aGVuIiwiaW1wb3J0RnJlc2giLCJkZXZTZXJ2ZXIiLCJXZWJwYWNrRGV2U2VydmVyIiwiZGV2TWlkZGxld2FyZSIsIm91dHB1dEZpbGVTeXN0ZW0iLCJzZXR1cE1pZGRsZXdhcmVzIiwibWlkZGxld2FyZXMiLCJFcnJvciIsIm90aGVyUm91dGVzIiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsIk9iamVjdCIsImtleXMiLCJwcm94eSIsImFwcCIsImdldCIsIlJlZ0V4cCIsInVybCIsImVuZHNXaXRoIiwic3RhdHVzQ29kZSIsInNldEhlYWRlciIsInNlbmQiLCJzb2NrZXQiLCJvbiIsInJ1blNlcnZlciIsInN0YXJ0IiwiaG9va3MiLCJkb25lIiwidGFwIiwibXVsdGlTdGF0cyIsImhhc093biIsImUiLCJzdG9wU2VydmVyIiwic3RvcCIsIndhcm4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9zdGFydERldnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IGRpc2tGcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB3ZWJwYWNrLCB7IE11bHRpQ29tcGlsZXIgfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCB7IGNyZWF0ZUZzRnJvbVZvbHVtZSwgVm9sdW1lIH0gZnJvbSAnbWVtZnMnO1xuaW1wb3J0IHsgU2VydmVyLCBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgdHlwZSB7IE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgcGF0Y2hSZXF1aXJlIH0gZnJvbSAnZnMtbW9ua2V5JztcbmltcG9ydCB0bXAgZnJvbSAndG1wJztcbmltcG9ydCBzb3VyY2VNYXBTdXBwb3J0IGZyb20gJ3NvdXJjZS1tYXAtc3VwcG9ydCc7XG5pbXBvcnQgeyB1ZnMgfSBmcm9tICd1bmlvbmZzJztcbmltcG9ydCBXZWJwYWNrRGV2U2VydmVyIGZyb20gJ3dlYnBhY2stZGV2LXNlcnZlcic7XG5pbXBvcnQgaW1wb3J0RnJlc2ggZnJvbSAnaW1wb3J0LWZyZXNoJztcbmltcG9ydCBsb2dnaW5nIGZyb20gJ3dlYnBhY2svbGliL2xvZ2dpbmcvcnVudGltZSc7XG5cbmltcG9ydCAnY3Jvc3MtZmV0Y2gvcG9seWZpbGwnO1xuaW1wb3J0IHsgQm91bmRSZW5kZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gcnVuIGRpcmVjdGx5IGZyb20gbm9kZVxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGNvbnN0IGVudHJ5cG9pbnQgPSBwcm9jZXNzLmFyZ3ZbMl07XG5cbiAgaWYgKCFlbnRyeXBvaW50KSB7XG4gICAgY29uc29sZS5sb2coYFVzYWdlOiBzdGFydC1hbmFuc2kgPGVudHJ5cG9pbnQtZmlsZT5gKTtcbiAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICB9XG5cbiAgc3RhcnREZXZTZXJ2ZXIoZW50cnlwb2ludCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0RGV2U2VydmVyKFxuICBlbnRyeXBvaW50OiBzdHJpbmcsXG4gIGVudjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCB3ZWJwYWNrQ29uZmlnID0gcmVxdWlyZShyZXF1aXJlLnJlc29sdmUoXG4gICAgLy8gVE9ETzogdXNlIG5vcm1hbCByZXNvbHV0aW9uIGFsZ29yaXRobSB0byBmaW5kIHdlYnBhY2sgZmlsZVxuICAgIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcnKSxcbiAgKSk7XG5cbiAgY29uc3QgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2FuYW5zaS1kZXZzZXJ2ZXInKTtcblxuICAvLyBTZXQgdXAgaW4gbWVtb3J5IGZpbGVzeXN0ZW1cbiAgY29uc3Qgdm9sdW1lID0gbmV3IFZvbHVtZSgpO1xuICBjb25zdCBmcyA9IGNyZWF0ZUZzRnJvbVZvbHVtZSh2b2x1bWUpO1xuICB1ZnMudXNlKGRpc2tGcykudXNlKGZzIGFzIGFueSk7XG5cbiAgcGF0Y2hSZXF1aXJlKHVmcyk7XG4gIGNvbnN0IHJlYWRGaWxlID0gcHJvbWlzaWZ5KHVmcy5yZWFkRmlsZSk7XG4gIGxldCBzZXJ2ZXI6IFNlcnZlciB8IHVuZGVmaW5lZDtcblxuICAvLyBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBmaWxlIHNvIHdlIGNhbiBob3QgcmVsb2FkIGZyb20gdGhlIHJvb3Qgb2YgdGhlIGFwcGxpY2F0aW9uXG4gIGZ1bmN0aW9uIGhvdEVudHJ5KGVudHJ5UGF0aDogc3RyaW5nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgLy8gQHRzLWlnbm9yZSBmb3Igc29tZSByZWFzb24gaXQncyBub3QgcGlja2luZyB1cCB0aGF0IG90aGVyIG9wdGlvbnMgYXJlIG9wdGlvbmFsXG4gICAgY29uc3QgZ2VuZXJhdGVkRW50cnlwb2ludCA9IHRtcC5maWxlU3luYyh7IHBvc3RmaXg6ICcuanMnIH0pO1xuICAgIGRpc2tGcy53cml0ZVN5bmMoXG4gICAgICBnZW5lcmF0ZWRFbnRyeXBvaW50LmZkLFxuICAgICAgYFxuICBpbXBvcnQgZW50cnkgZnJvbSBcIiR7cGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGVudHJ5UGF0aCl9XCI7XG5cbiAgaWYgKG1vZHVsZS5ob3QpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpO1xuICB9XG5cbiAgZXhwb3J0IGRlZmF1bHQgZW50cnk7XG4gICAgYCxcbiAgICApO1xuICAgIHJldHVybiBnZW5lcmF0ZWRFbnRyeXBvaW50O1xuICB9XG5cbiAgY29uc3Qgd2VicGFja0NvbmZpZ3MgPSBbXG4gICAgd2VicGFja0NvbmZpZyhcbiAgICAgIHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICBlbnRyeXBhdGg6IGhvdEVudHJ5KGVudHJ5cG9pbnQpLm5hbWUsXG4gICAgICAgIG5hbWU6ICdjbGllbnQnLFxuICAgICAgfSxcbiAgICAgIHsgbW9kZTogJ2RldmVsb3BtZW50JyB9LFxuICAgICksXG4gICAgd2VicGFja0NvbmZpZyhcbiAgICAgIHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICBlbnRyeXBhdGg6IGVudHJ5cG9pbnQucmVwbGFjZSgnLnRzeCcsICcuc2VydmVyLnRzeCcpLFxuICAgICAgICBuYW1lOiAnc2VydmVyJyxcbiAgICAgICAgQlJPV1NFUlNMSVNUX0VOVjogJ2N1cnJlbnQgbm9kZScsXG4gICAgICB9LFxuICAgICAgeyBtb2RlOiAnZGV2ZWxvcG1lbnQnLCB0YXJnZXQ6ICdub2RlJyB9LFxuICAgICksXG4gIF0gYXMgY29uc3Q7XG4gIC8vIG9ubHkgaGF2ZSBvbmUgb3V0cHV0IGZvciBzZXJ2ZXIgc28gd2UgY2FuIGF2b2lkIGNhY2hlZCBtb2R1bGVzXG4gIHdlYnBhY2tDb25maWdzWzFdLnBsdWdpbnMucHVzaChcbiAgICBuZXcgd2VicGFjay5vcHRpbWl6ZS5MaW1pdENodW5rQ291bnRQbHVnaW4oeyBtYXhDaHVua3M6IDEgfSksXG4gICk7XG4gIC8vIGluaXRpYWxpemUgdGhlIHdlYnBhY2sgY29tcGlsZXJcbiAgY29uc3QgY29tcGlsZXI6IE11bHRpQ29tcGlsZXIgPSB3ZWJwYWNrKHdlYnBhY2tDb25maWdzKTtcblxuICBzb3VyY2VNYXBTdXBwb3J0Lmluc3RhbGwoeyBob29rUmVxdWlyZTogdHJ1ZSB9KTtcblxuICBmdW5jdGlvbiBnZXRTZXJ2ZXJCdW5kbGUoc2VydmVyU3RhdHM6IHdlYnBhY2suU3RhdHMpIHtcbiAgICBjb25zdCBzZXJ2ZXJKc29uID0gc2VydmVyU3RhdHMudG9Kc29uKHsgYXNzZXRzOiB0cnVlIH0pO1xuICAgIHJldHVybiBwYXRoLmpvaW4oc2VydmVySnNvbi5vdXRwdXRQYXRoID8/ICcnLCAnc2VydmVyLmpzJyk7XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3JzPFxuICAgIEYgZXh0ZW5kcyAoXG4gICAgICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2UsXG4gICAgICByZXM6IFJlc3BvbnNlIHwgU2VydmVyUmVzcG9uc2UsXG4gICAgKSA9PiBQcm9taXNlPHZvaWQ+LFxuICA+KGZuOiBGKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIChcbiAgICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICAgIG5leHQ6IE5leHRGdW5jdGlvbixcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbihyZXEsIHJlcyk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIG5leHQoeCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGluaXRSZW5kZXI6XG4gICAgfCB7IGFyZ3M6IFBhcmFtZXRlcnM8Qm91bmRSZW5kZXI+OyByZXNvbHZlOiAoKSA9PiB2b2lkIH1bXVxuICAgIHwgdW5kZWZpbmVkID0gW107XG4gIGxldCByZW5kZXI6IEJvdW5kUmVuZGVyID0gKC4uLmFyZ3MpID0+XG4gICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpbml0UmVuZGVyLnB1c2goeyBhcmdzLCByZXNvbHZlIH0pO1xuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIGltcG9ydFJlbmRlcihzdGF0czogd2VicGFjay5TdGF0c1tdKSB7XG4gICAgY29uc3QgW2NsaWVudFN0YXRzLCBzZXJ2ZXJTdGF0c10gPSBzdGF0cztcbiAgICBpZiAoXG4gICAgICBjbGllbnRTdGF0cz8uY29tcGlsYXRpb24/LmVycm9ycz8ubGVuZ3RoIHx8XG4gICAgICBzZXJ2ZXJTdGF0cz8uY29tcGlsYXRpb24/LmVycm9ycz8ubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2cuZXJyb3IoJ0Vycm9ycyBmb3IgY2xpZW50IGJ1aWxkOiAnICsgY2xpZW50U3RhdHMuY29tcGlsYXRpb24uZXJyb3JzKTtcbiAgICAgIGxvZy5lcnJvcignRXJyb3JzIGZvciBzZXJ2ZXIgYnVpbGQ6ICcgKyBzZXJ2ZXJTdGF0cy5jb21waWxhdGlvbi5lcnJvcnMpO1xuICAgICAgLy8gVE9ETzogaGFuZGxlIG1vcmUgZ3JhY2VmdWxseVxuICAgICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oJ0xhdW5jaGluZyBTU1InKTtcbiAgICB9XG5cbiAgICAvLyBBU1NFVFNcbiAgICBjb25zdCBjbGllbnRNYW5pZmVzdCA9IGNsaWVudFN0YXRzLnRvSnNvbigpO1xuXG4gICAgLy8gU0VSVkVSIFNJREUgRU5UUllQT0lOVFxuICAgIGlmIChBcnJheS5pc0FycmF5KGluaXRSZW5kZXIpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgICAgcmVuZGVyID0gKHJlcXVpcmUoZ2V0U2VydmVyQnVuZGxlKHNlcnZlclN0YXRzKSkgYXMgYW55KS5kZWZhdWx0LmJpbmQoXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgY2xpZW50TWFuaWZlc3QsXG4gICAgICApO1xuICAgICAgaW5pdFJlbmRlci5mb3JFYWNoKGluaXQgPT4gcmVuZGVyKC4uLmluaXQuYXJncykudGhlbihpbml0LnJlc29sdmUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyID0gKGltcG9ydEZyZXNoKGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0cykpIGFzIGFueSkuZGVmYXVsdC5iaW5kKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGNsaWVudE1hbmlmZXN0LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkZXZTZXJ2ZXIgPSBuZXcgV2VicGFja0RldlNlcnZlcihcbiAgICAvLyB3cml0ZSB0byBtZW1vcnkgZmlsZXN5c3RlbSBzbyB3ZSBjYW4gaW1wb3J0XG4gICAge1xuICAgICAgLi4ud2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyLFxuICAgICAgZGV2TWlkZGxld2FyZToge1xuICAgICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXT8uZGV2U2VydmVyPy5kZXZNaWRkbGV3YXJlLFxuICAgICAgICBvdXRwdXRGaWxlU3lzdGVtOiB7XG4gICAgICAgICAgLi4uZnMsXG4gICAgICAgICAgam9pbjogcGF0aC5qb2luIGFzIGFueSxcbiAgICAgICAgfSBhcyBhbnkgYXMgdHlwZW9mIGZzLFxuICAgICAgfSxcbiAgICAgIHNldHVwTWlkZGxld2FyZXM6IChtaWRkbGV3YXJlcywgZGV2U2VydmVyKSA9PiB7XG4gICAgICAgIGlmICghZGV2U2VydmVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3ZWJwYWNrLWRldi1zZXJ2ZXIgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG90aGVyUm91dGVzID0gW1xuICAgICAgICAgIHByb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEgsXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMod2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyPy5wcm94eSA/PyB7fSksXG4gICAgICAgIF07XG4gICAgICAgIC8vIHNlcnZlIFNTUiBmb3Igbm9uLVdFQlBBQ0tfUFVCTElDX1BBVEhcbiAgICAgICAgZGV2U2VydmVyLmFwcD8uZ2V0KFxuICAgICAgICAgIG5ldyBSZWdFeHAoYF4oPyEke290aGVyUm91dGVzLmpvaW4oJ3wnKX0pYCksXG4gICAgICAgICAgaGFuZGxlRXJyb3JzKGFzeW5jIGZ1bmN0aW9uIChyZXE6IGFueSwgcmVzOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChyZXEudXJsLmVuZHNXaXRoKCdmYXZpY29uLmljbycpKSB7XG4gICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgICAgICAgIHJlcy5zZW5kKCdub3QgZm91bmQnKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLnNvY2tldC5vbignZXJyb3InLCAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmF0YWwnLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgcmVuZGVyKHJlcSwgcmVzKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbWlkZGxld2FyZXM7XG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcGlsZXIsXG4gICk7XG4gIGNvbnN0IHJ1blNlcnZlciA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBkZXZTZXJ2ZXIuc3RhcnQoKTtcbiAgICBkZXZTZXJ2ZXIuY29tcGlsZXIuaG9va3MuZG9uZS50YXAoXG4gICAgICAnQW5hbnNpIFNlcnZlcicsXG4gICAgICAobXVsdGlTdGF0czogd2VicGFjay5NdWx0aVN0YXRzIHwgd2VicGFjay5TdGF0cykgPT4ge1xuICAgICAgICBpZiAoIW11bHRpU3RhdHMpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoJ3N0YXRzIG5vdCBzZW5kJyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093bihtdWx0aVN0YXRzLCAnc3RhdHMnKSkgcmV0dXJuO1xuICAgICAgICBpZiAoKG11bHRpU3RhdHMgYXMgd2VicGFjay5NdWx0aVN0YXRzKS5zdGF0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGltcG9ydFJlbmRlcigobXVsdGlTdGF0cyBhcyB3ZWJwYWNrLk11bHRpU3RhdHMpLnN0YXRzKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VydmUgZW50cnlwb2ludCcpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nLmVycm9yKCdPbmx5IGNvbXBpbGVyIG9uZSBzdGF0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcbiAgY29uc3Qgc3RvcFNlcnZlciA9IGFzeW5jICgpID0+IHtcbiAgICBsb2cuaW5mbygnU3RvcHBpbmcgc2VydmVyLi4uJyk7XG4gICAgYXdhaXQgZGV2U2VydmVyLnN0b3AoKTtcbiAgICBsb2cuaW5mbygnU2VydmVyIGNsb3NlZCcpO1xuICB9O1xuXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBsb2cud2FybignUmVjZWl2ZWQgU0lHSU5ULCBkZXZzZXJ2ZXIgc2h1dHRpbmcgZG93bicpO1xuICAgIHN0b3BTZXJ2ZXIoKTtcbiAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICB9KTtcblxuICBydW5TZXJ2ZXIoKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBR0E7QUFDQSxJQUFJQSxPQUFPLENBQUNDLElBQVIsS0FBaUJDLE1BQXJCLEVBQTZCO0VBQzNCLE1BQU1DLFVBQVUsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWEsQ0FBYixDQUFuQjs7RUFFQSxJQUFJLENBQUNGLFVBQUwsRUFBaUI7SUFDZkcsT0FBTyxDQUFDQyxHQUFSLENBQWEsdUNBQWI7SUFDQUgsT0FBTyxDQUFDSSxJQUFSLENBQWEsQ0FBQyxDQUFkO0VBQ0Q7O0VBRURDLGNBQWMsQ0FBQ04sVUFBRCxDQUFkO0FBQ0Q7O0FBRWMsU0FBU00sY0FBVCxDQUNiTixVQURhLEVBRWJPLEdBQTRCLEdBQUcsRUFGbEIsRUFHYjtFQUFBOztFQUNBO0VBQ0EsTUFBTUMsYUFBYSxHQUFHWCxPQUFPLENBQUNBLE9BQU8sQ0FBQ1ksT0FBUixFQUM1QjtFQUNBQyxhQUFBLENBQUtDLElBQUwsQ0FBVVYsT0FBTyxDQUFDVyxHQUFSLEVBQVYsRUFBeUIsZ0JBQXpCLENBRjRCLENBQUQsQ0FBN0I7O0VBS0EsTUFBTVIsR0FBRyxHQUFHUyxnQkFBQSxDQUFRQyxTQUFSLENBQWtCLGtCQUFsQixDQUFaLENBUEEsQ0FTQTs7O0VBQ0EsTUFBTUMsTUFBTSxHQUFHLElBQUlDLGFBQUosRUFBZjtFQUNBLE1BQU1DLEVBQUUsR0FBRyxJQUFBQyx5QkFBQSxFQUFtQkgsTUFBbkIsQ0FBWDs7RUFDQUksWUFBQSxDQUFJQyxHQUFKLENBQVFDLFdBQVIsRUFBZ0JELEdBQWhCLENBQW9CSCxFQUFwQjs7RUFFQSxJQUFBSyxzQkFBQSxFQUFhSCxZQUFiO0VBQ0EsTUFBTUksUUFBUSxHQUFHLElBQUFDLGVBQUEsRUFBVUwsWUFBQSxDQUFJSSxRQUFkLENBQWpCO0VBQ0EsSUFBSUUsTUFBSixDQWhCQSxDQWtCQTs7RUFDQSxTQUFTQyxRQUFULENBQWtCQyxTQUFsQixFQUFxQztJQUNuQztJQUNBO0lBQ0EsTUFBTUMsbUJBQW1CLEdBQUdDLFlBQUEsQ0FBSUMsUUFBSixDQUFhO01BQUVDLE9BQU8sRUFBRTtJQUFYLENBQWIsQ0FBNUI7O0lBQ0FWLFdBQUEsQ0FBT1csU0FBUCxDQUNFSixtQkFBbUIsQ0FBQ0ssRUFEdEIsRUFFRztBQUNQLHVCQUF1QnZCLGFBQUEsQ0FBS0QsT0FBTCxDQUFhUixPQUFPLENBQUNXLEdBQVIsRUFBYixFQUE0QmUsU0FBNUIsQ0FBdUM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FWSTs7SUFZQSxPQUFPQyxtQkFBUDtFQUNEOztFQUVELE1BQU1NLGNBQWMsR0FBRyxDQUNyQjFCLGFBQWEsQ0FDWCxFQUNFLEdBQUdELEdBREw7SUFFRTRCLFNBQVMsRUFBRVQsUUFBUSxDQUFDMUIsVUFBRCxDQUFSLENBQXFCb0MsSUFGbEM7SUFHRUEsSUFBSSxFQUFFO0VBSFIsQ0FEVyxFQU1YO0lBQUVDLElBQUksRUFBRTtFQUFSLENBTlcsQ0FEUSxFQVNyQjdCLGFBQWEsQ0FDWCxFQUNFLEdBQUdELEdBREw7SUFFRTRCLFNBQVMsRUFBRW5DLFVBQVUsQ0FBQ3NDLE9BQVgsQ0FBbUIsTUFBbkIsRUFBMkIsYUFBM0IsQ0FGYjtJQUdFRixJQUFJLEVBQUUsUUFIUjtJQUlFRyxnQkFBZ0IsRUFBRTtFQUpwQixDQURXLEVBT1g7SUFBRUYsSUFBSSxFQUFFLGFBQVI7SUFBdUJHLE1BQU0sRUFBRTtFQUEvQixDQVBXLENBVFEsQ0FBdkIsQ0F0Q0EsQ0F5REE7O0VBQ0FOLGNBQWMsQ0FBQyxDQUFELENBQWQsQ0FBa0JPLE9BQWxCLENBQTBCQyxJQUExQixDQUNFLElBQUlDLGdCQUFBLENBQVFDLFFBQVIsQ0FBaUJDLHFCQUFyQixDQUEyQztJQUFFQyxTQUFTLEVBQUU7RUFBYixDQUEzQyxDQURGLEVBMURBLENBNkRBOztFQUNBLE1BQU1DLFFBQXVCLEdBQUcsSUFBQUosZ0JBQUEsRUFBUVQsY0FBUixDQUFoQzs7RUFFQWMseUJBQUEsQ0FBaUJDLE9BQWpCLENBQXlCO0lBQUVDLFdBQVcsRUFBRTtFQUFmLENBQXpCOztFQUVBLFNBQVNDLGVBQVQsQ0FBeUJDLFdBQXpCLEVBQXFEO0lBQUE7O0lBQ25ELE1BQU1DLFVBQVUsR0FBR0QsV0FBVyxDQUFDRSxNQUFaLENBQW1CO01BQUVDLE1BQU0sRUFBRTtJQUFWLENBQW5CLENBQW5CO0lBQ0EsT0FBTzdDLGFBQUEsQ0FBS0MsSUFBTCwwQkFBVTBDLFVBQVUsQ0FBQ0csVUFBckIsb0NBQW1DLEVBQW5DLEVBQXVDLFdBQXZDLENBQVA7RUFDRDs7RUFDRCxTQUFTQyxZQUFULENBS0VDLEVBTEYsRUFLUztJQUNQLE9BQU8sZ0JBQ0xDLEdBREssRUFFTEMsR0FGSyxFQUdMQyxJQUhLLEVBSUw7TUFDQSxJQUFJO1FBQ0YsT0FBTyxNQUFNSCxFQUFFLENBQUNDLEdBQUQsRUFBTUMsR0FBTixDQUFmO01BQ0QsQ0FGRCxDQUVFLE9BQU9FLENBQVAsRUFBVTtRQUNWRCxJQUFJLENBQUNDLENBQUQsQ0FBSjtNQUNEO0lBQ0YsQ0FWRDtFQVdEOztFQUVELE1BQU1DLFVBRU8sR0FBRyxFQUZoQjs7RUFHQSxJQUFJQyxNQUFtQixHQUFHLENBQUMsR0FBR0MsSUFBSixLQUN4QixJQUFJQyxPQUFKLENBQVl6RCxPQUFPLElBQUk7SUFDckJzRCxVQUFVLENBQUNyQixJQUFYLENBQWdCO01BQUV1QixJQUFGO01BQVF4RDtJQUFSLENBQWhCO0VBQ0QsQ0FGRCxDQURGOztFQUtBLFNBQVMwRCxZQUFULENBQXNCQyxLQUF0QixFQUE4QztJQUFBOztJQUM1QyxNQUFNLENBQUNDLFdBQUQsRUFBY2pCLFdBQWQsSUFBNkJnQixLQUFuQzs7SUFDQSxJQUNFQyxXQUFXLFNBQVgsSUFBQUEsV0FBVyxXQUFYLDZCQUFBQSxXQUFXLENBQUVDLFdBQWIsa0dBQTBCQyxNQUExQiwwRUFBa0NDLE1BQWxDLElBQ0FwQixXQURBLGFBQ0FBLFdBREEsd0NBQ0FBLFdBQVcsQ0FBRWtCLFdBRGIsNEVBQ0Esc0JBQTBCQyxNQUQxQixtREFDQSx1QkFBa0NDLE1BRnBDLEVBR0U7TUFDQXBFLEdBQUcsQ0FBQ3FFLEtBQUosQ0FBVSw4QkFBOEJKLFdBQVcsQ0FBQ0MsV0FBWixDQUF3QkMsTUFBaEU7TUFDQW5FLEdBQUcsQ0FBQ3FFLEtBQUosQ0FBVSw4QkFBOEJyQixXQUFXLENBQUNrQixXQUFaLENBQXdCQyxNQUFoRSxFQUZBLENBR0E7O01BQ0F0RSxPQUFPLENBQUNJLElBQVIsQ0FBYSxDQUFDLENBQWQ7SUFDRCxDQVJELE1BUU87TUFDTEQsR0FBRyxDQUFDc0UsSUFBSixDQUFTLGVBQVQ7SUFDRCxDQVoyQyxDQWM1Qzs7O0lBQ0EsTUFBTUMsY0FBYyxHQUFHTixXQUFXLENBQUNmLE1BQVosRUFBdkIsQ0FmNEMsQ0FpQjVDOztJQUNBLElBQUlzQixLQUFLLENBQUNDLE9BQU4sQ0FBY2QsVUFBZCxDQUFKLEVBQStCO01BQzdCO01BQ0FDLE1BQU0sR0FBSW5FLE9BQU8sQ0FBQ3NELGVBQWUsQ0FBQ0MsV0FBRCxDQUFoQixDQUFSLENBQStDMEIsT0FBL0MsQ0FBdURDLElBQXZELENBQ1BDLFNBRE8sRUFFUEwsY0FGTyxDQUFUO01BSUFaLFVBQVUsQ0FBQ2tCLE9BQVgsQ0FBbUJDLElBQUksSUFBSWxCLE1BQU0sQ0FBQyxHQUFHa0IsSUFBSSxDQUFDakIsSUFBVCxDQUFOLENBQXFCa0IsSUFBckIsQ0FBMEJELElBQUksQ0FBQ3pFLE9BQS9CLENBQTNCO0lBQ0QsQ0FQRCxNQU9PO01BQ0x1RCxNQUFNLEdBQUksSUFBQW9CLG9CQUFBLEVBQVlqQyxlQUFlLENBQUNDLFdBQUQsQ0FBM0IsQ0FBRCxDQUFtRDBCLE9BQW5ELENBQTJEQyxJQUEzRCxDQUNQQyxTQURPLEVBRVBMLGNBRk8sQ0FBVDtJQUlEO0VBQ0Y7O0VBRUQsTUFBTVUsU0FBUyxHQUFHLElBQUlDLHlCQUFKLEVBQ2hCO0VBQ0EsRUFDRSxHQUFHcEQsY0FBYyxDQUFDLENBQUQsQ0FBZCxDQUFrQm1ELFNBRHZCO0lBRUVFLGFBQWEsRUFBRSxFQUNiLHdCQUFHckQsY0FBYyxDQUFDLENBQUQsQ0FBakIsOEVBQUcsaUJBQW1CbUQsU0FBdEIsMERBQUcsc0JBQThCRSxhQUFqQyxDQURhO01BRWJDLGdCQUFnQixFQUFFLEVBQ2hCLEdBQUd2RSxFQURhO1FBRWhCTixJQUFJLEVBQUVELGFBQUEsQ0FBS0M7TUFGSztJQUZMLENBRmpCO0lBU0U4RSxnQkFBZ0IsRUFBRSxDQUFDQyxXQUFELEVBQWNMLFNBQWQsS0FBNEI7TUFBQTs7TUFDNUMsSUFBSSxDQUFDQSxTQUFMLEVBQWdCO1FBQ2QsTUFBTSxJQUFJTSxLQUFKLENBQVUsbUNBQVYsQ0FBTjtNQUNEOztNQUVELE1BQU1DLFdBQVcsR0FBRyxDQUNsQjNGLE9BQU8sQ0FBQ00sR0FBUixDQUFZc0YsbUJBRE0sRUFFbEIsR0FBR0MsTUFBTSxDQUFDQyxJQUFQLG9EQUFZN0QsY0FBYyxDQUFDLENBQUQsQ0FBZCxDQUFrQm1ELFNBQTlCLDJEQUFZLHVCQUE2QlcsS0FBekMsb0NBQWtELEVBQWxELENBRmUsQ0FBcEIsQ0FMNEMsQ0FTNUM7O01BQ0Esa0JBQUFYLFNBQVMsQ0FBQ1ksR0FBVixrRUFBZUMsR0FBZixDQUNFLElBQUlDLE1BQUosQ0FBWSxPQUFNUCxXQUFXLENBQUNqRixJQUFaLENBQWlCLEdBQWpCLENBQXNCLEdBQXhDLENBREYsRUFFRThDLFlBQVksQ0FBQyxnQkFBZ0JFLEdBQWhCLEVBQTBCQyxHQUExQixFQUFvQztRQUMvQyxJQUFJRCxHQUFHLENBQUN5QyxHQUFKLENBQVFDLFFBQVIsQ0FBaUIsYUFBakIsQ0FBSixFQUFxQztVQUNuQ3pDLEdBQUcsQ0FBQzBDLFVBQUosR0FBaUIsR0FBakI7VUFDQTFDLEdBQUcsQ0FBQzJDLFNBQUosQ0FBYyxjQUFkLEVBQThCLFdBQTlCO1VBQ0EzQyxHQUFHLENBQUM0QyxJQUFKLENBQVMsV0FBVDtVQUNBO1FBQ0Q7O1FBQ0Q1QyxHQUFHLENBQUM2QyxNQUFKLENBQVdDLEVBQVgsQ0FBYyxPQUFkLEVBQXdCakMsS0FBRCxJQUFvQjtVQUN6Q3RFLE9BQU8sQ0FBQ3NFLEtBQVIsQ0FBYyxPQUFkLEVBQXVCQSxLQUF2QjtRQUNELENBRkQ7UUFJQSxNQUFNVCxNQUFNLENBQUNMLEdBQUQsRUFBTUMsR0FBTixDQUFaO01BQ0QsQ0FaVyxDQUZkO01BaUJBLE9BQU84QixXQUFQO0lBQ0Q7RUFyQ0gsQ0FGZ0IsRUF5Q2hCM0MsUUF6Q2dCLENBQWxCOztFQTJDQSxNQUFNNEQsU0FBUyxHQUFHLFlBQVk7SUFDNUIsTUFBTXRCLFNBQVMsQ0FBQ3VCLEtBQVYsRUFBTjtJQUNBdkIsU0FBUyxDQUFDdEMsUUFBVixDQUFtQjhELEtBQW5CLENBQXlCQyxJQUF6QixDQUE4QkMsR0FBOUIsQ0FDRSxlQURGLEVBRUdDLFVBQUQsSUFBb0Q7TUFDbEQsSUFBSSxDQUFDQSxVQUFMLEVBQWlCO1FBQ2Y1RyxHQUFHLENBQUNxRSxLQUFKLENBQVUsZ0JBQVY7UUFDQXhFLE9BQU8sQ0FBQ0ksSUFBUixDQUFhLENBQUMsQ0FBZDtNQUNEOztNQUVELElBQUksQ0FBQ3lGLE1BQU0sQ0FBQ21CLE1BQVAsQ0FBY0QsVUFBZCxFQUEwQixPQUExQixDQUFMLEVBQXlDOztNQUN6QyxJQUFLQSxVQUFELENBQW1DNUMsS0FBbkMsQ0FBeUNJLE1BQXpDLEdBQWtELENBQXRELEVBQXlEO1FBQ3ZELElBQUk7VUFDRkwsWUFBWSxDQUFFNkMsVUFBRCxDQUFtQzVDLEtBQXBDLENBQVo7UUFDRCxDQUZELENBRUUsT0FBTzhDLENBQVAsRUFBZTtVQUNmOUcsR0FBRyxDQUFDcUUsS0FBSixDQUFVLGlDQUFWO1VBQ0EsTUFBTXlDLENBQU47UUFDRDtNQUNGLENBUEQsTUFPTztRQUNMOUcsR0FBRyxDQUFDcUUsS0FBSixDQUFVLHdCQUFWO01BQ0Q7SUFDRixDQW5CSDtFQXFCRCxDQXZCRDs7RUF3QkEsTUFBTTBDLFVBQVUsR0FBRyxZQUFZO0lBQzdCL0csR0FBRyxDQUFDc0UsSUFBSixDQUFTLG9CQUFUO0lBQ0EsTUFBTVcsU0FBUyxDQUFDK0IsSUFBVixFQUFOO0lBQ0FoSCxHQUFHLENBQUNzRSxJQUFKLENBQVMsZUFBVDtFQUNELENBSkQ7O0VBTUF6RSxPQUFPLENBQUN5RyxFQUFSLENBQVcsUUFBWCxFQUFxQixNQUFNO0lBQ3pCdEcsR0FBRyxDQUFDaUgsSUFBSixDQUFTLDBDQUFUO0lBQ0FGLFVBQVU7SUFDVmxILE9BQU8sQ0FBQ0ksSUFBUixDQUFhLENBQUMsQ0FBZDtFQUNELENBSkQ7RUFNQXNHLFNBQVM7QUFDViJ9
|
|
@@ -4,13 +4,12 @@ import type { ServerProps, ResolveProps } from './types';
|
|
|
4
4
|
declare type NeededProps = {
|
|
5
5
|
matchedRoutes: Route<any>[];
|
|
6
6
|
title?: string;
|
|
7
|
-
charSet?: string;
|
|
8
7
|
} & ResolveProps;
|
|
9
8
|
export default function DocumentSpout(options: {
|
|
10
9
|
head?: React.ReactNode;
|
|
11
10
|
title: string;
|
|
12
11
|
rootId: string;
|
|
13
|
-
charSet
|
|
12
|
+
charSet?: string;
|
|
14
13
|
}): <T extends NeededProps>(next: (props: ServerProps) => Promise<T>) => (props: ServerProps) => Promise<T & {
|
|
15
14
|
app: JSX.Element;
|
|
16
15
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.server.d.ts","sourceRoot":"","sources":["../../src/spouts/document.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGzD,aAAK,WAAW,GAAG;IACjB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"document.server.d.ts","sourceRoot":"","sources":["../../src/spouts/document.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGzD,aAAK,WAAW,GAAG;IACjB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,YAAY,CAAC;AAEjB,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE;IAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,yCAEiB,WAAW,4BAEJ,WAAW;;GAkEnC"}
|
|
@@ -65,4 +65,4 @@ function childrenAssets(chunk) {
|
|
|
65
65
|
return (_c$assets = c.assets) != null ? _c$assets : [];
|
|
66
66
|
})) : [];
|
|
67
67
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudFNwb3V0Iiwib3B0aW9ucyIsIm5leHQiLCJwcm9wcyIsIm5leHRQcm9wcyIsInB1YmxpY1BhdGgiLCJjbGllbnRNYW5pZmVzdCIsIk9iamVjdCIsImtleXMiLCJlbnRyeXBvaW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXNzZXRNYXAiLCJhc3NldHMiLCJtYXAiLCJuYW1lIiwiYXNzZXRMaXN0IiwidmFsdWVzIiwiZm9yRWFjaCIsImVudHJ5cG9pbnQiLCJwdXNoIiwiU2V0IiwibmFtZWRDaHVua0dyb3VwcyIsImZpbHRlciIsIm1hdGNoZWRSb3V0ZXMiLCJzb21lIiwicm91dGUiLCJpbmNsdWRlcyIsImZsYXRNYXAiLCJjaHVuayIsImNoaWxkcmVuQXNzZXRzIiwiYXNzZXQiLCJlbmRzV2l0aCIsImhyZWYiLCJyZWwiLCJhcyIsImFwcCIsInRpdGxlIiwicm9vdElkIiwiY2hpbGRyZW4iLCJwcmVsb2FkIiwiYyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvZG9jdW1lbnQuc2VydmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gJ0BhbmFuc2kvcm91dGVyJztcbmltcG9ydCB7IFN0YXRzQ2h1bmtHcm91cCB9IGZyb20gJ3dlYnBhY2snO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclByb3BzLCBSZXNvbHZlUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCBEb2N1bWVudCBmcm9tICcuL0RvY3VtZW50Q29tcG9uZW50JztcblxudHlwZSBOZWVkZWRQcm9wcyA9IHtcbiAgbWF0Y2hlZFJvdXRlczogUm91dGU8YW55PltdO1xuICB0aXRsZT86IHN0cmluZztcbn0gJiBSZXNvbHZlUHJvcHM7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50U3BvdXQob3B0aW9uczoge1xuICBoZWFkPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xuICByb290SWQ6IHN0cmluZztcbiAgY2hhclNldD86IHN0cmluZztcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgTmVlZGVkUHJvcHM+KFxuICAgIG5leHQ6IChwcm9wczogU2VydmVyUHJvcHMpID0+IFByb21pc2U8VD4sXG4gICkge1xuICAgIHJldHVybiBhc3luYyAocHJvcHM6IFNlcnZlclByb3BzKSA9PiB7XG4gICAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgICAgY29uc3QgcHVibGljUGF0aCA9IHByb3BzLmNsaWVudE1hbmlmZXN0LnB1YmxpY1BhdGg7XG5cbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5sZW5ndGggPCAxIHx8XG4gICAgICAgIHB1YmxpY1BhdGggPT09IHVuZGVmaW5lZFxuICAgICAgKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbmlmZXN0IG1pc3NpbmcgZW50cmllcyBuZWVkZWQnKTtcblxuICAgICAgLy8gVE9ETzogY29uc2lkZXIgdXNpbmcgdGhpcyBwYWNrYWdlIGZvciBidWlsZCBzdGF0cyBpbiBmdXR1cmU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvdHJlZS9tYWluL3BhY2thZ2VzL3JlYWN0LXNlcnZlci1kb20td2VicGFja1xuICAgICAgY29uc3QgYXNzZXRNYXAgPSAoYXNzZXRzOiB7IG5hbWU6IHN0cmluZzsgc2l6ZT86IG51bWJlciB9W10pID0+XG4gICAgICAgIGFzc2V0cy5tYXAoKHsgbmFtZSB9KSA9PiBgJHtwdWJsaWNQYXRofSR7bmFtZX1gKTtcblxuICAgICAgY29uc3QgYXNzZXRMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdD8uZW50cnlwb2ludHMgPz8ge30pLmZvckVhY2goXG4gICAgICAgIGVudHJ5cG9pbnQgPT4ge1xuICAgICAgICAgIGFzc2V0TGlzdC5wdXNoKC4uLmFzc2V0TWFwKGVudHJ5cG9pbnQuYXNzZXRzID8/IFtdKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgbmV3IFNldChcbiAgICAgICAgYXNzZXRNYXAoXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdC5uYW1lZENodW5rR3JvdXBzID8/IHt9KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+XG4gICAgICAgICAgICAgIG5leHRQcm9wcy5tYXRjaGVkUm91dGVzLnNvbWUocm91dGUgPT4gbmFtZT8uaW5jbHVkZXMocm91dGUubmFtZSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmZsYXRNYXAoY2h1bmsgPT4gW1xuICAgICAgICAgICAgICAuLi4oY2h1bmsuYXNzZXRzID8/IFtdKSxcbiAgICAgICAgICAgICAgLy8gYW55IGNodW5rIHByZWxvYWRzXG4gICAgICAgICAgICAgIC4uLmNoaWxkcmVuQXNzZXRzKGNodW5rKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApLFxuICAgICAgKS5mb3JFYWNoKGFzc2V0ID0+IGFzc2V0TGlzdC5wdXNoKGFzc2V0KSk7XG5cbiAgICAgIC8vIGZpbmQgYWRkaXRpb25hbCBhc3NldHMgdG8gcHJlbG9hZCBiYXNlZCBvbiBtYXRjaGVkIHJvdXRlXG4gICAgICBjb25zdCBhc3NldHM6IHtcbiAgICAgICAgaHJlZjogc3RyaW5nO1xuICAgICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgfVtdID0gYXNzZXRMaXN0XG4gICAgICAgIC5maWx0ZXIoYXNzZXQgPT4gIWFzc2V0LmVuZHNXaXRoKCcuaG90LXVwZGF0ZS5qcycpKVxuICAgICAgICAubWFwKGFzc2V0ID0+XG4gICAgICAgICAgYXNzZXQuZW5kc1dpdGgoJy5jc3MnKVxuICAgICAgICAgICAgPyB7IGhyZWY6IGFzc2V0LCByZWw6ICdzdHlsZXNoZWV0JyB9XG4gICAgICAgICAgICA6IGFzc2V0LmVuZHNXaXRoKCcuanMnKVxuICAgICAgICAgICAgPyB7IGhyZWY6IGFzc2V0LCBhczogJ3NjcmlwdCcgfVxuICAgICAgICAgICAgOiB7IGhyZWY6IGFzc2V0IH0sXG4gICAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgICAgYXBwOiAoXG4gICAgICAgICAgPERvY3VtZW50XG4gICAgICAgICAgICB7Li4ub3B0aW9uc31cbiAgICAgICAgICAgIHRpdGxlPXtuZXh0UHJvcHMudGl0bGUgPz8gb3B0aW9ucy50aXRsZX1cbiAgICAgICAgICAgIGFzc2V0cz17YXNzZXRzfVxuICAgICAgICAgICAgcm9vdElkPXtvcHRpb25zLnJvb3RJZH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bmV4dFByb3BzLmFwcH1cbiAgICAgICAgICA8L0RvY3VtZW50PlxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbkFzc2V0cyhjaHVuazogU3RhdHNDaHVua0dyb3VwKSB7XG4gIHJldHVybiBjaHVuay5jaGlsZHJlblxuICAgID8gT2JqZWN0LnZhbHVlcyhjaHVuay5jaGlsZHJlbikuZmxhdE1hcChwcmVsb2FkID0+XG4gICAgICAgIHByZWxvYWQuZmxhdE1hcChjID0+IGMuYXNzZXRzID8/IFtdKSxcbiAgICAgIClcbiAgICA6IFtdO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBS0E7O0FBT2UsU0FBU0EsYUFBVCxDQUF1QkMsT0FBdkIsRUFLWjtFQUNELE9BQU8sVUFDTEMsSUFESyxFQUVMO0lBQ0EsT0FBTyxNQUFPQyxLQUFQLElBQThCO01BQUE7O01BQ25DLE1BQU1DLFNBQVMsR0FBRyxNQUFNRixJQUFJLENBQUNDLEtB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anansi/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "React 18 Framework",
|
|
5
5
|
"homepage": "https://github.com/ntucker/anansi/tree/master/packages/core#readme",
|
|
6
6
|
"repository": {
|
|
@@ -65,9 +65,9 @@
|
|
|
65
65
|
"browser"
|
|
66
66
|
],
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@anansi/babel-preset": "^3.2.
|
|
68
|
+
"@anansi/babel-preset": "^3.2.3",
|
|
69
69
|
"@anansi/browserslist-config": "1.3.3",
|
|
70
|
-
"@anansi/webpack-config": "^11.6.
|
|
70
|
+
"@anansi/webpack-config": "^11.6.3",
|
|
71
71
|
"@babel/cli": "7.17.10",
|
|
72
72
|
"@babel/core": "7.18.2",
|
|
73
73
|
"@types/source-map-support": "^0.5.4",
|
|
@@ -79,13 +79,14 @@
|
|
|
79
79
|
"webpack-cli": "^4.9.2"
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
|
-
"@anansi/router": "^0.5.
|
|
82
|
+
"@anansi/router": "^0.5.8",
|
|
83
83
|
"@babel/runtime": "^7.10.5",
|
|
84
84
|
"@rest-hooks/ssr": "^0.1.3",
|
|
85
85
|
"chalk": "^4.0.0",
|
|
86
86
|
"cross-fetch": "^3.1.5",
|
|
87
87
|
"fs-monkey": "^1.0.3",
|
|
88
88
|
"history": "^5.3.0",
|
|
89
|
+
"http-proxy-middleware": "^2.0.6",
|
|
89
90
|
"import-fresh": "^3.3.0",
|
|
90
91
|
"memfs": "^3.4.1",
|
|
91
92
|
"ora": "^5.0.0",
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RequestHandler,
|
|
3
|
+
ProxyConfigArray,
|
|
4
|
+
Response,
|
|
5
|
+
Request,
|
|
6
|
+
NextFunction,
|
|
7
|
+
ByPass,
|
|
8
|
+
ProxyConfigArrayItem,
|
|
9
|
+
ProxyConfigMap,
|
|
10
|
+
} from 'webpack-dev-server';
|
|
11
|
+
|
|
12
|
+
// Essentially taken from https://github.com/webpack/webpack-dev-server/blob/b5e5b67398f97c7a2934e12ebe34fb03cc06c473/lib/Server.js#L2123
|
|
13
|
+
export default function getProxyMiddlewares(
|
|
14
|
+
proxyConfig: ProxyConfigArrayItem | ProxyConfigMap | ProxyConfigArray,
|
|
15
|
+
) {
|
|
16
|
+
const middlewares: any[] = [];
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
18
|
+
const { createProxyMiddleware } = require('http-proxy-middleware');
|
|
19
|
+
|
|
20
|
+
const proxy: ProxyConfigArray =
|
|
21
|
+
!Array.isArray(proxyConfig) && typeof proxyConfig === 'object'
|
|
22
|
+
? Object.keys(proxyConfig).length &&
|
|
23
|
+
Object.keys(proxyConfig)[0].startsWith('/')
|
|
24
|
+
? Object.entries(proxyConfig).map(([path, v]) => ({ path, ...v }))
|
|
25
|
+
: [proxyConfig]
|
|
26
|
+
: proxyConfig;
|
|
27
|
+
|
|
28
|
+
const getProxyMiddleware = (
|
|
29
|
+
proxyConfig: ProxyConfigArrayItem,
|
|
30
|
+
): RequestHandler | undefined => {
|
|
31
|
+
// It is possible to use the `bypass` method without a `target` or `router`.
|
|
32
|
+
// However, the proxy middleware has no use in this case, and will fail to instantiate.
|
|
33
|
+
if (proxyConfig.target) {
|
|
34
|
+
const context = proxyConfig.context || proxyConfig.path;
|
|
35
|
+
|
|
36
|
+
return createProxyMiddleware(/** @type {string} */ context, proxyConfig);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (proxyConfig.router) {
|
|
40
|
+
return createProxyMiddleware(proxyConfig);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Assume a proxy configuration specified as:
|
|
46
|
+
* proxy: [
|
|
47
|
+
* {
|
|
48
|
+
* context: "value",
|
|
49
|
+
* ...options,
|
|
50
|
+
* },
|
|
51
|
+
* // or:
|
|
52
|
+
* function() {
|
|
53
|
+
* return {
|
|
54
|
+
* context: "context",
|
|
55
|
+
* ...options,
|
|
56
|
+
* };
|
|
57
|
+
* }
|
|
58
|
+
* ]
|
|
59
|
+
*/
|
|
60
|
+
proxy.forEach(proxyConfigOrCallback => {
|
|
61
|
+
let proxyMiddleware: RequestHandler | undefined;
|
|
62
|
+
|
|
63
|
+
let proxyConfig =
|
|
64
|
+
typeof proxyConfigOrCallback === 'function'
|
|
65
|
+
? proxyConfigOrCallback()
|
|
66
|
+
: proxyConfigOrCallback;
|
|
67
|
+
|
|
68
|
+
proxyMiddleware = getProxyMiddleware(proxyConfig);
|
|
69
|
+
|
|
70
|
+
/* TODO: figure out how to make this work
|
|
71
|
+
if (proxyConfig.ws) {
|
|
72
|
+
this.webSocketProxies.push(proxyMiddleware);
|
|
73
|
+
}
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
const handler = async (req: Request, res: Response, next: NextFunction) => {
|
|
77
|
+
if (typeof proxyConfigOrCallback === 'function') {
|
|
78
|
+
const newProxyConfig = proxyConfigOrCallback(req, res, next);
|
|
79
|
+
|
|
80
|
+
if (newProxyConfig !== proxyConfig) {
|
|
81
|
+
proxyConfig = newProxyConfig;
|
|
82
|
+
proxyMiddleware = getProxyMiddleware(proxyConfig);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// - Check if we have a bypass function defined
|
|
87
|
+
// - In case the bypass function is defined we'll retrieve the
|
|
88
|
+
// bypassUrl from it otherwise bypassUrl would be null
|
|
89
|
+
// TODO remove in the next major in favor `context` and `router` options
|
|
90
|
+
const bypassUrl: ByPass | null =
|
|
91
|
+
typeof proxyConfig.bypass === 'function'
|
|
92
|
+
? await proxyConfig.bypass(req, res, proxyConfig)
|
|
93
|
+
: null;
|
|
94
|
+
|
|
95
|
+
if (typeof bypassUrl === 'boolean') {
|
|
96
|
+
// skip the proxy
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
98
|
+
// @ts-ignore
|
|
99
|
+
req.url = null;
|
|
100
|
+
next();
|
|
101
|
+
} else if (typeof bypassUrl === 'string') {
|
|
102
|
+
// byPass to that url
|
|
103
|
+
req.url = bypassUrl;
|
|
104
|
+
next();
|
|
105
|
+
} else if (proxyMiddleware) {
|
|
106
|
+
return proxyMiddleware(req, res, next);
|
|
107
|
+
} else {
|
|
108
|
+
next();
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
middlewares.push({
|
|
113
|
+
name: 'http-proxy-middleware',
|
|
114
|
+
middleware: handler,
|
|
115
|
+
});
|
|
116
|
+
// Also forward error requests to the proxy so it can handle them.
|
|
117
|
+
middlewares.push({
|
|
118
|
+
name: 'http-proxy-middleware-error-handler',
|
|
119
|
+
middleware: (
|
|
120
|
+
error: Error,
|
|
121
|
+
req: Request,
|
|
122
|
+
res: Response,
|
|
123
|
+
next: NextFunction,
|
|
124
|
+
) => handler(req, res, next),
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
return middlewares;
|
|
129
|
+
}
|
package/src/scripts/serve.ts
CHANGED
|
@@ -11,6 +11,7 @@ import compress from 'compression';
|
|
|
11
11
|
|
|
12
12
|
import 'cross-fetch/polyfill';
|
|
13
13
|
import { Render } from './types';
|
|
14
|
+
import getProxyMiddlewares from './getProxyMiddlewares';
|
|
14
15
|
|
|
15
16
|
// run directly from node
|
|
16
17
|
if (require.main === module) {
|
|
@@ -23,12 +24,26 @@ if (require.main === module) {
|
|
|
23
24
|
serve(entrypoint);
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
export default function serve(
|
|
27
|
+
export default function serve(
|
|
28
|
+
entrypoint: string,
|
|
29
|
+
options: { serveAssets?: boolean; serveProxy?: boolean } = {},
|
|
30
|
+
) {
|
|
27
31
|
const PORT = process.env.PORT || 8080;
|
|
28
32
|
|
|
29
33
|
const loader = ora('Initializing').start();
|
|
30
34
|
|
|
31
|
-
const
|
|
35
|
+
const webpackConfig: (
|
|
36
|
+
env: any,
|
|
37
|
+
argv: any,
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
39
|
+
) => webpack.Configuration = require(require.resolve(
|
|
40
|
+
// TODO: use normal resolution algorithm to find webpack file
|
|
41
|
+
path.join(process.cwd(), 'webpack.config'),
|
|
42
|
+
));
|
|
43
|
+
|
|
44
|
+
const manifestPath = getManifestPathFromWebpackconfig(
|
|
45
|
+
webpackConfig({}, { mode: 'production' }),
|
|
46
|
+
);
|
|
32
47
|
|
|
33
48
|
const readFile = promisify(diskFs.readFile);
|
|
34
49
|
let server: Server | undefined;
|
|
@@ -67,23 +82,53 @@ export default function serve(entrypoint: string) {
|
|
|
67
82
|
wrappingApp.use(compress());
|
|
68
83
|
|
|
69
84
|
// ASSETS
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
85
|
+
if (options.serveAssets) {
|
|
86
|
+
wrappingApp.use(
|
|
87
|
+
async (
|
|
88
|
+
req: Request | IncomingMessage,
|
|
89
|
+
res: any,
|
|
90
|
+
next: NextFunction,
|
|
91
|
+
) => {
|
|
92
|
+
const filename =
|
|
93
|
+
req.url?.substr(
|
|
94
|
+
(process.env.WEBPACK_PUBLIC_PATH as string).length,
|
|
95
|
+
) ?? '';
|
|
96
|
+
const assetPath = path.join(
|
|
97
|
+
clientManifest.outputPath ?? '',
|
|
98
|
+
filename,
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
if (
|
|
102
|
+
diskFs.existsSync(assetPath) &&
|
|
103
|
+
!diskFs.lstatSync(assetPath).isDirectory()
|
|
104
|
+
) {
|
|
105
|
+
try {
|
|
106
|
+
const fileContent = (await readFile(assetPath)).toString();
|
|
107
|
+
res.contentType(filename);
|
|
108
|
+
res.send(fileContent);
|
|
109
|
+
} catch (e) {
|
|
110
|
+
return next();
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
next();
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
);
|
|
117
|
+
}
|
|
75
118
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
119
|
+
// PROXIES
|
|
120
|
+
if (options.serveProxy) {
|
|
121
|
+
const devConfig: webpack.Configuration = webpackConfig(
|
|
122
|
+
{},
|
|
123
|
+
{ mode: 'development' },
|
|
124
|
+
);
|
|
125
|
+
if (devConfig.devServer?.proxy) {
|
|
126
|
+
const middlewares = getProxyMiddlewares(devConfig.devServer?.proxy);
|
|
127
|
+
if (middlewares) {
|
|
128
|
+
wrappingApp.use(...middlewares.map(({ middleware }) => middleware));
|
|
129
|
+
}
|
|
84
130
|
}
|
|
85
|
-
}
|
|
86
|
-
wrappingApp.get(`${process.env.WEBPACK_PUBLIC_PATH}*`, assetRoute);
|
|
131
|
+
}
|
|
87
132
|
|
|
88
133
|
// SERVER SIDE RENDERING
|
|
89
134
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
@@ -91,6 +136,7 @@ export default function serve(entrypoint: string) {
|
|
|
91
136
|
process.cwd(),
|
|
92
137
|
entrypoint,
|
|
93
138
|
)).default;
|
|
139
|
+
|
|
94
140
|
wrappingApp.get(
|
|
95
141
|
'/*',
|
|
96
142
|
handleErrors(async function (req: any, res: any) {
|
|
@@ -147,12 +193,9 @@ export default function serve(entrypoint: string) {
|
|
|
147
193
|
});
|
|
148
194
|
}
|
|
149
195
|
|
|
150
|
-
function getManifestPathFromWebpackconfig(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
// TODO: use normal resolution algorithm to find webpack file
|
|
154
|
-
path.join(process.cwd(), 'webpack.config'),
|
|
155
|
-
))({}, { mode: 'production' });
|
|
196
|
+
function getManifestPathFromWebpackconfig(
|
|
197
|
+
webpackConfig: webpack.Configuration,
|
|
198
|
+
) {
|
|
156
199
|
const manifestFilename: string =
|
|
157
200
|
(
|
|
158
201
|
webpackConfig?.plugins?.find(plugin => {
|
|
@@ -21,8 +21,6 @@ import { BoundRender } from './types';
|
|
|
21
21
|
// run directly from node
|
|
22
22
|
if (require.main === module) {
|
|
23
23
|
const entrypoint = process.argv[2];
|
|
24
|
-
//process.env.WEBPACK_PUBLIC_HOST = `http://localhost:${PORT}`; this breaks compatibility with stackblitz
|
|
25
|
-
process.env.WEBPACK_PUBLIC_PATH = '/assets/';
|
|
26
24
|
|
|
27
25
|
if (!entrypoint) {
|
|
28
26
|
console.log(`Usage: start-anansi <entrypoint-file>`);
|
|
@@ -169,13 +167,6 @@ export default function startDevServer(
|
|
|
169
167
|
// write to memory filesystem so we can import
|
|
170
168
|
{
|
|
171
169
|
...webpackConfigs[0].devServer,
|
|
172
|
-
/*client: {
|
|
173
|
-
...webpackConfigs[0].devServer?.client,
|
|
174
|
-
webSocketURL: {
|
|
175
|
-
...webpackConfigs[0].devServer?.client.webSocketURL,
|
|
176
|
-
port: 8080,
|
|
177
|
-
},
|
|
178
|
-
},*/
|
|
179
170
|
devMiddleware: {
|
|
180
171
|
...webpackConfigs[0]?.devServer?.devMiddleware,
|
|
181
172
|
outputFileSystem: {
|
|
@@ -8,14 +8,13 @@ import Document from './DocumentComponent';
|
|
|
8
8
|
type NeededProps = {
|
|
9
9
|
matchedRoutes: Route<any>[];
|
|
10
10
|
title?: string;
|
|
11
|
-
charSet?: string;
|
|
12
11
|
} & ResolveProps;
|
|
13
12
|
|
|
14
13
|
export default function DocumentSpout(options: {
|
|
15
14
|
head?: React.ReactNode;
|
|
16
15
|
title: string;
|
|
17
16
|
rootId: string;
|
|
18
|
-
charSet
|
|
17
|
+
charSet?: string;
|
|
19
18
|
}) {
|
|
20
19
|
return function <T extends NeededProps>(
|
|
21
20
|
next: (props: ServerProps) => Promise<T>,
|