@anansi/core 0.10.0 → 0.11.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/client.js +29 -21
  3. package/dist/client.js.map +1 -1
  4. package/dist/server.js +205 -30
  5. package/dist/server.js.map +1 -1
  6. package/lib/index.d.ts +1 -0
  7. package/lib/index.d.ts.map +1 -1
  8. package/lib/index.js +6 -2
  9. package/lib/index.server.d.ts +1 -0
  10. package/lib/index.server.d.ts.map +1 -1
  11. package/lib/index.server.js +6 -2
  12. package/lib/laySpouts.d.ts.map +1 -1
  13. package/lib/laySpouts.js +11 -2
  14. package/lib/scripts/startDevserver.d.ts.map +1 -1
  15. package/lib/scripts/startDevserver.js +5 -8
  16. package/lib/spouts/DocumentComponent.d.ts +6 -1
  17. package/lib/spouts/DocumentComponent.d.ts.map +1 -1
  18. package/lib/spouts/DocumentComponent.js +32 -9
  19. package/lib/spouts/csp.d.ts +5 -0
  20. package/lib/spouts/csp.d.ts.map +1 -0
  21. package/lib/spouts/csp.js +20 -0
  22. package/lib/spouts/document.d.ts +1 -1
  23. package/lib/spouts/document.d.ts.map +1 -1
  24. package/lib/spouts/document.js +3 -3
  25. package/lib/spouts/document.server.d.ts +3 -0
  26. package/lib/spouts/document.server.d.ts.map +1 -1
  27. package/lib/spouts/document.server.js +5 -2
  28. package/lib/spouts/json.d.ts +5 -0
  29. package/lib/spouts/json.d.ts.map +1 -0
  30. package/lib/spouts/json.js +22 -0
  31. package/lib/spouts/json.server.d.ts +13 -0
  32. package/lib/spouts/json.server.d.ts.map +1 -0
  33. package/lib/spouts/json.server.js +74 -0
  34. package/lib/spouts/restHooks.d.ts +1 -1
  35. package/lib/spouts/restHooks.d.ts.map +1 -1
  36. package/lib/spouts/restHooks.js +5 -9
  37. package/lib/spouts/restHooks.server.d.ts +41 -1
  38. package/lib/spouts/restHooks.server.d.ts.map +1 -1
  39. package/lib/spouts/restHooks.server.js +6 -3
  40. package/lib/spouts/rhHelp.d.ts +40 -0
  41. package/lib/spouts/rhHelp.d.ts.map +1 -0
  42. package/lib/spouts/rhHelp.js +47 -0
  43. package/lib/spouts/router.d.ts +1 -1
  44. package/lib/spouts/router.d.ts.map +1 -1
  45. package/lib/spouts/router.js +3 -3
  46. package/lib/spouts/types.d.ts +1 -0
  47. package/lib/spouts/types.d.ts.map +1 -1
  48. package/lib/spouts/types.js +1 -1
  49. package/package.json +2 -2
  50. package/src/index.server.ts +1 -0
  51. package/src/index.ts +1 -0
  52. package/src/laySpouts.tsx +5 -1
  53. package/src/scripts/startDevserver.ts +4 -6
  54. package/src/spouts/DocumentComponent.tsx +29 -6
  55. package/src/spouts/csp.ts +25 -0
  56. package/src/spouts/document.server.tsx +6 -0
  57. package/src/spouts/document.tsx +5 -3
  58. package/src/spouts/json.server.tsx +77 -0
  59. package/src/spouts/json.tsx +25 -0
  60. package/src/spouts/restHooks.server.tsx +7 -3
  61. package/src/spouts/restHooks.tsx +12 -7
  62. package/src/spouts/rhHelp.tsx +37 -0
  63. package/src/spouts/router.tsx +5 -3
  64. package/src/spouts/types.ts +1 -0
@@ -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;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":""}
1
+ {"version":3,"file":"server.js","mappings":"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","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/external node-commonjs \"crypto\"","/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/csp.ts","/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\"","/home/ntucker/src/anansi/packages/core/external commonjs \"redux\"","/home/ntucker/src/anansi/packages/core/src/spouts/rhHelp.tsx","/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/spouts/json.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\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"crypto\");","import { renderToPipeableStream as reactRender } from 'react-dom/server';\nimport crypto from 'crypto';\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 nonce = crypto.randomBytes(16).toString('base64');\n\n const { app } = await spouts({ clientManifest, req, res, nonce });\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 nonce,\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\");","export interface Policy {\n [directive: string]: string | string[];\n}\n\n// TODO: memoize this\nexport function buildPolicy(policyObj: Policy) {\n return Object.keys(policyObj)\n .map(key => {\n const val = Array.isArray(policyObj[key])\n ? [...new Set(policyObj[key]).values()].filter(v => v).join(' ')\n : policyObj[key];\n\n // move strict dynamic to the end of the policy if it exists to be backwards compatible with csp2\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic\n if (typeof val === 'string' && val.includes(\"'strict-dynamic'\")) {\n const newVal = `${val\n .replace(/\\s?'strict-dynamic'\\s?/gi, ' ')\n .trim()} 'strict-dynamic'`;\n return `${key} ${newVal}`;\n }\n\n return `${key} ${val}`;\n })\n .join('; ');\n}\n","import type { Policy } from './csp';\nimport { buildPolicy } from './csp';\n\ntype Props = {\n children: React.ReactNode;\n assets: { href: string; as?: string; rel?: string }[];\n head: React.ReactNode;\n scripts: React.ReactNode;\n title: string;\n rootId: string;\n charSet: string;\n csPolicy?: Policy;\n nonce?: string | undefined;\n};\n\nexport default function Document({\n assets,\n head,\n children,\n title,\n rootId,\n charSet,\n csPolicy,\n nonce,\n scripts,\n}: Props) {\n let cspMeta: null | React.ReactNode = null;\n if (csPolicy) {\n // add nonce to policy\n const policy = {\n ...csPolicy,\n };\n if (nonce) {\n if (typeof policy['script-src'] === 'string') {\n policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];\n } else {\n policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];\n }\n }\n cspMeta = (\n <meta httpEquiv=\"Content-Security-Policy\" content={buildPolicy(policy)} />\n );\n }\n return (\n <html>\n <head>\n <meta charSet={charSet} />\n {cspMeta}\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 {scripts}\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 scripts: null,\n};\n","import React from 'react';\nimport type { Route } from '@anansi/router';\nimport { StatsChunkGroup } from 'webpack';\n\nimport type { ServerProps, ResolveProps } from './types';\nimport type { Policy } from './csp';\nimport Document from './DocumentComponent';\n\ntype NeededProps = {\n matchedRoutes: Route<any>[];\n title?: string;\n scripts?: React.ReactNode[];\n} & ResolveProps;\n\nexport default function DocumentSpout(options: {\n head?: React.ReactNode;\n title: string;\n rootId?: string;\n charSet?: string;\n csPolicy?: Policy;\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 nonce={props.nonce}\n csPolicy={options.csPolicy}\n scripts={nextProps.scripts}\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\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"redux\");","import { ExternalCacheProvider, PromiseifyMiddleware } from 'rest-hooks';\nimport {\n Controller,\n createReducer,\n initialState,\n Manager,\n applyManager,\n NetworkManager,\n} from '@rest-hooks/core';\nimport { createStore, applyMiddleware } from 'redux';\n\n// TODO: Rework this and upstream to rest hooks\nexport function createPersistedStore(managers?: Manager[]) {\n const controller = new Controller();\n managers = managers ?? [new NetworkManager()];\n const reducer = createReducer(controller);\n const enhancer = applyMiddleware(\n ...applyManager(managers, controller),\n PromiseifyMiddleware as any,\n );\n const store = createStore(reducer, initialState as any, enhancer);\n managers.forEach(manager => manager.init?.(store.getState()));\n\n const selector = (state: any) => state;\n function ServerCacheProvider({ children }: { children: React.ReactNode }) {\n return (\n <ExternalCacheProvider\n store={store}\n selector={selector}\n controller={controller}\n >\n {children}\n </ExternalCacheProvider>\n );\n }\n return [ServerCacheProvider, controller, store] as const;\n}\n","import { Manager, NetworkManager } from '@rest-hooks/core';\n\nimport { createPersistedStore } from './rhHelp';\nimport type { ResolveProps, ServerProps } from './types';\n\ntype NeededProps = { initData?: Record<string, () => unknown> } & 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, store] = createPersistedStore(\n options.getManagers(),\n );\n\n const nextProps = await next(props);\n\n return {\n ...nextProps,\n controller,\n initData: {\n ...nextProps.initData,\n resthooks: () => store.getState(),\n },\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","import React from 'react';\nimport type { Route } from '@anansi/router';\nimport { StatsChunkGroup } from 'webpack';\n\nimport type { ServerProps, ResolveProps } from './types';\nimport type { Policy } from './csp';\nimport Document from './DocumentComponent';\n\ntype NeededProps = {\n initData?: Record<string, () => unknown>;\n scripts?: React.ReactNode[];\n} & ResolveProps;\n\nexport default function JSONSpout({\n id = 'anansi-json',\n}: { id?: string } = {}) {\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 scripts: React.ReactNode[] = nextProps.scripts ?? [];\n /*\n Object.entries(nextProps.initData ?? {}).forEach(([key, data]) => {\n try {\n const encoded = JSON.stringify(data);\n scripts.push(\n <script\n key={key}\n id={`${id}-${key}`}\n type=\"application/json\"\n dangerouslySetInnerHTML={{\n __html: encoded,\n }}\n nonce={props.nonce}\n />,\n );\n } catch (e) {\n // TODO: Use unified logging\n console.error(e);\n }\n });*/\n const Script = () => {\n try {\n const data: any = {};\n Object.entries(nextProps.initData ?? {}).forEach(([key, getData]) => {\n data[key] = getData();\n });\n const encoded = JSON.stringify(data);\n return (\n <script\n key={id}\n id={id}\n type=\"application/json\"\n dangerouslySetInnerHTML={{\n __html: encoded,\n }}\n nonce={props.nonce}\n />\n );\n } catch (e) {\n // TODO: Use unified logging\n console.error('Error serializing json');\n console.error(e);\n return null;\n }\n };\n scripts.push(<Script />);\n\n return {\n ...nextProps,\n scripts,\n };\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';\nexport { default as JSONSpout } from './spouts/json.server';\n"],"names":[],"sourceRoot":""}
package/lib/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export { default as floodSpouts } from './floodSpouts';
2
2
  export { default as documentSpout } from './spouts/document';
3
3
  export { default as restHooksSpout } from './spouts/restHooks';
4
4
  export { default as routerSpout } from './spouts/router';
5
+ export { default as JSONSpout } from './spouts/json';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,eAAe,CAAC"}
package/lib/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  exports.__esModule = true;
6
- exports.routerSpout = exports.restHooksSpout = exports.floodSpouts = exports.documentSpout = void 0;
6
+ exports.routerSpout = exports.restHooksSpout = exports.floodSpouts = exports.documentSpout = exports.JSONSpout = void 0;
7
7
 
8
8
  var _floodSpouts = _interopRequireDefault(require("./floodSpouts"));
9
9
 
@@ -20,4 +20,8 @@ exports.restHooksSpout = _restHooks.default;
20
20
  var _router = _interopRequireDefault(require("./spouts/router"));
21
21
 
22
22
  exports.routerSpout = _router.default;
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgZmxvb2RTcG91dHMgfSBmcm9tICcuL2Zsb29kU3BvdXRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVzdEhvb2tzU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9yZXN0SG9va3MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByb3V0ZXJTcG91dCB9IGZyb20gJy4vc3BvdXRzL3JvdXRlcic7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQSJ9
23
+
24
+ var _json = _interopRequireDefault(require("./spouts/json"));
25
+
26
+ exports.JSONSpout = _json.default;
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgZmxvb2RTcG91dHMgfSBmcm9tICcuL2Zsb29kU3BvdXRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVzdEhvb2tzU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9yZXN0SG9va3MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByb3V0ZXJTcG91dCB9IGZyb20gJy4vc3BvdXRzL3JvdXRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEpTT05TcG91dCB9IGZyb20gJy4vc3BvdXRzL2pzb24nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQSJ9
@@ -3,4 +3,5 @@ export { default as documentSpout } from './spouts/document.server';
3
3
  export { default as restHooksSpout } from './spouts/restHooks.server';
4
4
  export { default as routerSpout } from './spouts/router.server';
5
5
  export { default as prefetchSpout } from './spouts/prefetch.server';
6
+ export { default as JSONSpout } from './spouts/json.server';
6
7
  //# sourceMappingURL=index.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.server.d.ts","sourceRoot":"","sources":["../src/index.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.server.d.ts","sourceRoot":"","sources":["../src/index.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  exports.__esModule = true;
6
- exports.routerSpout = exports.restHooksSpout = exports.prefetchSpout = exports.laySpouts = exports.documentSpout = void 0;
6
+ exports.routerSpout = exports.restHooksSpout = exports.prefetchSpout = exports.laySpouts = exports.documentSpout = exports.JSONSpout = void 0;
7
7
 
8
8
  var _laySpouts = _interopRequireDefault(require("./laySpouts"));
9
9
 
@@ -24,4 +24,8 @@ exports.routerSpout = _router.default;
24
24
  var _prefetch = _interopRequireDefault(require("./spouts/prefetch.server"));
25
25
 
26
26
  exports.prefetchSpout = _prefetch.default;
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IGFzIGxheVNwb3V0cyB9IGZyb20gJy4vbGF5U3BvdXRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50LnNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3RIb29rc1Nwb3V0IH0gZnJvbSAnLi9zcG91dHMvcmVzdEhvb2tzLnNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJvdXRlclNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcm91dGVyLnNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByZWZldGNoU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9wcmVmZXRjaC5zZXJ2ZXInO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQSJ9
27
+
28
+ var _json = _interopRequireDefault(require("./spouts/json.server"));
29
+
30
+ exports.JSONSpout = _json.default;
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IGFzIGxheVNwb3V0cyB9IGZyb20gJy4vbGF5U3BvdXRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50LnNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3RIb29rc1Nwb3V0IH0gZnJvbSAnLi9zcG91dHMvcmVzdEhvb2tzLnNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJvdXRlclNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcm91dGVyLnNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByZWZldGNoU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9wcmVmZXRjaC5zZXJ2ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBKU09OU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9qc29uLnNlcnZlcic7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0EifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"laySpouts.d.ts","sourceRoot":"","sources":["../src/laySpouts.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC;IACtC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC;CAClB,CAAC,EACF,EAAE,SAAe,EAAE,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,UAkDjD"}
1
+ {"version":3,"file":"laySpouts.d.ts","sourceRoot":"","sources":["../src/laySpouts.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC;IACtC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC;CAClB,CAAC,EACF,EAAE,SAAe,EAAE,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,UAqDjD"}
package/lib/laySpouts.js CHANGED
@@ -1,20 +1,27 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
3
5
  exports.__esModule = true;
4
6
  exports.default = laySpouts;
5
7
 
6
8
  var _server = require("react-dom/server");
7
9
 
10
+ var _crypto = _interopRequireDefault(require("crypto"));
11
+
8
12
  function laySpouts(spouts, {
9
13
  timeoutMS = 200
10
14
  } = {}) {
11
15
  const render = async (clientManifest, req, res) => {
16
+ const nonce = _crypto.default.randomBytes(16).toString('base64');
17
+
12
18
  const {
13
19
  app
14
20
  } = await spouts({
15
21
  clientManifest,
16
22
  req,
17
- res
23
+ res,
24
+ nonce
18
25
  });
19
26
  let didError = false;
20
27
  const {
@@ -38,6 +45,8 @@ function laySpouts(spouts, {
38
45
  |};
39
46
  */
40
47
  {
48
+ nonce,
49
+
41
50
  //bootstrapScripts: assets.filter(asset => asset.endsWith('.js')),
42
51
  onShellReady() {
43
52
  //managers.forEach(manager => manager.cleanup());
@@ -67,4 +76,4 @@ function laySpouts(spouts, {
67
76
 
68
77
  return render;
69
78
  }
70
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsYXlTcG91dHMiLCJzcG91dHMiLCJ0aW1lb3V0TVMiLCJyZW5kZXIiLCJjbGllbnRNYW5pZmVzdCIsInJlcSIsInJlcyIsImFwcCIsImRpZEVycm9yIiwicGlwZSIsImFib3J0IiwicmVhY3RSZW5kZXIiLCJvblNoZWxsUmVhZHkiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwib25TaGVsbEVycm9yIiwib25FcnJvciIsIngiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2xheVNwb3V0cy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyVG9QaXBlYWJsZVN0cmVhbSBhcyByZWFjdFJlbmRlciB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuXG5pbXBvcnQgeyBSZW5kZXIgfSBmcm9tICcuL3NjcmlwdHMvdHlwZXMnO1xuaW1wb3J0IHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxheVNwb3V0cyhcbiAgc3BvdXRzOiAocHJvcHM6IFNlcnZlclByb3BzKSA9PiBQcm9taXNlPHtcbiAgICBhcHA6IEpTWC5FbGVtZW50O1xuICB9PixcbiAgeyB0aW1lb3V0TVMgPSAyMDAgfTogeyB0aW1lb3V0TVM/OiBudW1iZXIgfSA9IHt9LFxuKSB7XG4gIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gYXN5bmMgKGNsaWVudE1hbmlmZXN0LCByZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IHsgYXBwIH0gPSBhd2FpdCBzcG91dHMoeyBjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMgfSk7XG4gICAgbGV0IGRpZEVycm9yID0gZmFsc2U7XG4gICAgY29uc3QgeyBwaXBlLCBhYm9ydCB9ID0gcmVhY3RSZW5kZXIoXG4gICAgICBhcHAsXG4gICAgICAvKlxuICAgICAgVGhpcyBpcyBub3QgZG9jdW1lbnRlZCwgc28gaW5jbHVkZWQgdGhlIHR5cGVzIGhlcmUgZm9yIHJlZmVyZW5jZTpcbnR5cGUgT3B0aW9ucyA9IHt8XG4gIGlkZW50aWZpZXJQcmVmaXg/OiBzdHJpbmcsXG4gIG5hbWVzcGFjZVVSST86IHN0cmluZyxcbiAgbm9uY2U/OiBzdHJpbmcsXG4gIGJvb3RzdHJhcFNjcmlwdENvbnRlbnQ/OiBzdHJpbmcsXG4gIGJvb3RzdHJhcFNjcmlwdHM/OiBBcnJheTxzdHJpbmc+LFxuICBib290c3RyYXBNb2R1bGVzPzogQXJyYXk8c3RyaW5nPixcbiAgcHJvZ3Jlc3NpdmVDaHVua1NpemU/OiBudW1iZXIsXG4gIG9uU2hlbGxSZWFkeT86ICgpID0+IHZvaWQsXG4gIG9uU2hlbGxFcnJvcj86ICgpID0+IHZvaWQsXG4gIG9uQWxsUmVhZHk/OiAoKSA9PiB2b2lkLFxuICBvbkVycm9yPzogKGVycm9yOiBtaXhlZCkgPT4gdm9pZCxcbnx9O1xuICAqL1xuICAgICAge1xuICAgICAgICAvL2Jvb3RzdHJhcFNjcmlwdHM6IGFzc2V0cy5maWx0ZXIoYXNzZXQgPT4gYXNzZXQuZW5kc1dpdGgoJy5qcycpKSxcbiAgICAgICAgb25TaGVsbFJlYWR5KCkge1xuICAgICAgICAgIC8vbWFuYWdlcnMuZm9yRWFjaChtYW5hZ2VyID0+IG1hbmFnZXIuY2xlYW51cCgpKTtcbiAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgZXJyb3JlZCBiZWZvcmUgd2Ugc3RhcnRlZCBzdHJlYW1pbmcsIHdlIHNldCB0aGUgZXJyb3IgY29kZSBhcHByb3ByaWF0ZWx5LlxuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gZGlkRXJyb3IgPyA1MDAgOiAyMDA7XG4gICAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICAgIHBpcGUocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TaGVsbEVycm9yKCkge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3IoeDogYW55KSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeCk7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgLy9waXBlKHJlcyk7IFJlbW92aW5nIHRoaXMgYXZvaWRzLCBcIlJlYWN0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHBpcGluZyB0byBvbmUgd3JpdGFibGUgc3RyZWFtLlwiXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgLy8gQWJhbmRvbiBhbmQgc3dpdGNoIHRvIGNsaWVudCByZW5kZXJpbmcgaWYgZW5vdWdoIHRpbWUgcGFzc2VzLlxuICAgIC8vIFRyeSBsb3dlcmluZyB0aGlzIHRvIHNlZSB0aGUgY2xpZW50IHJlY292ZXIuXG4gICAgc2V0VGltZW91dChhYm9ydCwgdGltZW91dE1TKTtcbiAgfTtcbiAgcmV0dXJuIHJlbmRlcjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFLZSxTQUFTQSxTQUFULENBQ2JDLE1BRGEsRUFJYjtFQUFFQyxTQUFTLEdBQUc7QUFBZCxJQUE4QyxFQUpqQyxFQUtiO0VBQ0EsTUFBTUMsTUFBYyxHQUFHLE9BQU9DLGNBQVAsRUFBdUJDLEdBQXZCLEVBQTRCQyxHQUE1QixLQUFvQztJQUN6RCxNQUFNO01BQUVDO0lBQUYsSUFBVSxNQUFNTixNQUFNLENBQUM7TUFBRUcsY0FBRjtNQUFrQkMsR0FBbEI7TUFBdUJDO0lBQXZCLENBQUQsQ0FBNUI7SUFDQSxJQUFJRSxRQUFRLEdBQUcsS0FBZjtJQUNBLE1BQU07TUFBRUMsSUFBRjtNQUFRQztJQUFSLElBQWtCLElBQUFDLDhCQUFBLEVBQ3RCSixHQURzQjtJQUV0QjtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNNO01BQ0U7TUFDQUssWUFBWSxHQUFHO1FBQ2I7UUFDQTtRQUNBTixHQUFHLENBQUNPLFVBQUosR0FBaUJMLFFBQVEsR0FBRyxHQUFILEdBQVMsR0FBbEM7UUFDQUYsR0FBRyxDQUFDUSxTQUFKLENBQWMsY0FBZCxFQUE4QixXQUE5QjtRQUNBTCxJQUFJLENBQUNILEdBQUQsQ0FBSjtNQUNELENBUkg7O01BU0VTLFlBQVksR0FBRztRQUNiUCxRQUFRLEdBQUcsSUFBWDtRQUNBRixHQUFHLENBQUNPLFVBQUosR0FBaUIsR0FBakI7UUFDQUosSUFBSSxDQUFDSCxHQUFELENBQUo7TUFDRCxDQWJIOztNQWNFVSxPQUFPLENBQUNDLENBQUQsRUFBUztRQUNkVCxRQUFRLEdBQUcsSUFBWDtRQUNBVSxPQUFPLENBQUNDLEtBQVIsQ0FBY0YsQ0FBZDtRQUNBWCxHQUFHLENBQUNPLFVBQUosR0FBaUIsR0FBakIsQ0FIYyxDQUlkO01BQ0Q7O0lBbkJILENBbEJzQixDQUF4QixDQUh5RCxDQTJDekQ7SUFDQTs7SUFDQU8sVUFBVSxDQUFDVixLQUFELEVBQVFSLFNBQVIsQ0FBVjtFQUNELENBOUNEOztFQStDQSxPQUFPQyxNQUFQO0FBQ0QifQ==
79
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsYXlTcG91dHMiLCJzcG91dHMiLCJ0aW1lb3V0TVMiLCJyZW5kZXIiLCJjbGllbnRNYW5pZmVzdCIsInJlcSIsInJlcyIsIm5vbmNlIiwiY3J5cHRvIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImFwcCIsImRpZEVycm9yIiwicGlwZSIsImFib3J0IiwicmVhY3RSZW5kZXIiLCJvblNoZWxsUmVhZHkiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwib25TaGVsbEVycm9yIiwib25FcnJvciIsIngiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2xheVNwb3V0cy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyVG9QaXBlYWJsZVN0cmVhbSBhcyByZWFjdFJlbmRlciB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBSZW5kZXIgfSBmcm9tICcuL3NjcmlwdHMvdHlwZXMnO1xuaW1wb3J0IHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxheVNwb3V0cyhcbiAgc3BvdXRzOiAocHJvcHM6IFNlcnZlclByb3BzKSA9PiBQcm9taXNlPHtcbiAgICBhcHA6IEpTWC5FbGVtZW50O1xuICB9PixcbiAgeyB0aW1lb3V0TVMgPSAyMDAgfTogeyB0aW1lb3V0TVM/OiBudW1iZXIgfSA9IHt9LFxuKSB7XG4gIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gYXN5bmMgKGNsaWVudE1hbmlmZXN0LCByZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IG5vbmNlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgICBjb25zdCB7IGFwcCB9ID0gYXdhaXQgc3BvdXRzKHsgY2xpZW50TWFuaWZlc3QsIHJlcSwgcmVzLCBub25jZSB9KTtcbiAgICBsZXQgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICBjb25zdCB7IHBpcGUsIGFib3J0IH0gPSByZWFjdFJlbmRlcihcbiAgICAgIGFwcCxcbiAgICAgIC8qXG4gICAgICBUaGlzIGlzIG5vdCBkb2N1bWVudGVkLCBzbyBpbmNsdWRlZCB0aGUgdHlwZXMgaGVyZSBmb3IgcmVmZXJlbmNlOlxudHlwZSBPcHRpb25zID0ge3xcbiAgaWRlbnRpZmllclByZWZpeD86IHN0cmluZyxcbiAgbmFtZXNwYWNlVVJJPzogc3RyaW5nLFxuICBub25jZT86IHN0cmluZyxcbiAgYm9vdHN0cmFwU2NyaXB0Q29udGVudD86IHN0cmluZyxcbiAgYm9vdHN0cmFwU2NyaXB0cz86IEFycmF5PHN0cmluZz4sXG4gIGJvb3RzdHJhcE1vZHVsZXM/OiBBcnJheTxzdHJpbmc+LFxuICBwcm9ncmVzc2l2ZUNodW5rU2l6ZT86IG51bWJlcixcbiAgb25TaGVsbFJlYWR5PzogKCkgPT4gdm9pZCxcbiAgb25TaGVsbEVycm9yPzogKCkgPT4gdm9pZCxcbiAgb25BbGxSZWFkeT86ICgpID0+IHZvaWQsXG4gIG9uRXJyb3I/OiAoZXJyb3I6IG1peGVkKSA9PiB2b2lkLFxufH07XG4gICovXG4gICAgICB7XG4gICAgICAgIG5vbmNlLFxuICAgICAgICAvL2Jvb3RzdHJhcFNjcmlwdHM6IGFzc2V0cy5maWx0ZXIoYXNzZXQgPT4gYXNzZXQuZW5kc1dpdGgoJy5qcycpKSxcbiAgICAgICAgb25TaGVsbFJlYWR5KCkge1xuICAgICAgICAgIC8vbWFuYWdlcnMuZm9yRWFjaChtYW5hZ2VyID0+IG1hbmFnZXIuY2xlYW51cCgpKTtcbiAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgZXJyb3JlZCBiZWZvcmUgd2Ugc3RhcnRlZCBzdHJlYW1pbmcsIHdlIHNldCB0aGUgZXJyb3IgY29kZSBhcHByb3ByaWF0ZWx5LlxuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gZGlkRXJyb3IgPyA1MDAgOiAyMDA7XG4gICAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICAgIHBpcGUocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TaGVsbEVycm9yKCkge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3IoeDogYW55KSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeCk7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgLy9waXBlKHJlcyk7IFJlbW92aW5nIHRoaXMgYXZvaWRzLCBcIlJlYWN0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHBpcGluZyB0byBvbmUgd3JpdGFibGUgc3RyZWFtLlwiXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgLy8gQWJhbmRvbiBhbmQgc3dpdGNoIHRvIGNsaWVudCByZW5kZXJpbmcgaWYgZW5vdWdoIHRpbWUgcGFzc2VzLlxuICAgIC8vIFRyeSBsb3dlcmluZyB0aGlzIHRvIHNlZSB0aGUgY2xpZW50IHJlY292ZXIuXG4gICAgc2V0VGltZW91dChhYm9ydCwgdGltZW91dE1TKTtcbiAgfTtcbiAgcmV0dXJuIHJlbmRlcjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUtlLFNBQVNBLFNBQVQsQ0FDYkMsTUFEYSxFQUliO0VBQUVDLFNBQVMsR0FBRztBQUFkLElBQThDLEVBSmpDLEVBS2I7RUFDQSxNQUFNQyxNQUFjLEdBQUcsT0FBT0MsY0FBUCxFQUF1QkMsR0FBdkIsRUFBNEJDLEdBQTVCLEtBQW9DO0lBQ3pELE1BQU1DLEtBQUssR0FBR0MsZUFBQSxDQUFPQyxXQUFQLENBQW1CLEVBQW5CLEVBQXVCQyxRQUF2QixDQUFnQyxRQUFoQyxDQUFkOztJQUVBLE1BQU07TUFBRUM7SUFBRixJQUFVLE1BQU1WLE1BQU0sQ0FBQztNQUFFRyxjQUFGO01BQWtCQyxHQUFsQjtNQUF1QkMsR0FBdkI7TUFBNEJDO0lBQTVCLENBQUQsQ0FBNUI7SUFDQSxJQUFJSyxRQUFRLEdBQUcsS0FBZjtJQUNBLE1BQU07TUFBRUMsSUFBRjtNQUFRQztJQUFSLElBQWtCLElBQUFDLDhCQUFBLEVBQ3RCSixHQURzQjtJQUV0QjtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNNO01BQ0VKLEtBREY7O01BRUU7TUFDQVMsWUFBWSxHQUFHO1FBQ2I7UUFDQTtRQUNBVixHQUFHLENBQUNXLFVBQUosR0FBaUJMLFFBQVEsR0FBRyxHQUFILEdBQVMsR0FBbEM7UUFDQU4sR0FBRyxDQUFDWSxTQUFKLENBQWMsY0FBZCxFQUE4QixXQUE5QjtRQUNBTCxJQUFJLENBQUNQLEdBQUQsQ0FBSjtNQUNELENBVEg7O01BVUVhLFlBQVksR0FBRztRQUNiUCxRQUFRLEdBQUcsSUFBWDtRQUNBTixHQUFHLENBQUNXLFVBQUosR0FBaUIsR0FBakI7UUFDQUosSUFBSSxDQUFDUCxHQUFELENBQUo7TUFDRCxDQWRIOztNQWVFYyxPQUFPLENBQUNDLENBQUQsRUFBUztRQUNkVCxRQUFRLEdBQUcsSUFBWDtRQUNBVSxPQUFPLENBQUNDLEtBQVIsQ0FBY0YsQ0FBZDtRQUNBZixHQUFHLENBQUNXLFVBQUosR0FBaUIsR0FBakIsQ0FIYyxDQUlkO01BQ0Q7O0lBcEJILENBbEJzQixDQUF4QixDQUx5RCxDQThDekQ7SUFDQTs7SUFDQU8sVUFBVSxDQUFDVixLQUFELEVBQVFaLFNBQVIsQ0FBVjtFQUNELENBakREOztFQWtEQSxPQUFPQyxNQUFQO0FBQ0QifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"startDevserver.d.ts","sourceRoot":"","sources":["../../src/scripts/startDevserver.ts"],"names":[],"mappings":";AAgBA,OAAO,sBAAsB,CAAC;AAe9B,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,QAmNlC"}
1
+ {"version":3,"file":"startDevserver.d.ts","sourceRoot":"","sources":["../../src/scripts/startDevserver.ts"],"names":[],"mappings":";AAgBA,OAAO,sBAAsB,CAAC;AAe9B,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,QAiNlC"}
@@ -93,11 +93,7 @@ function startDevServer(entrypoint, env = {}) {
93
93
  }, {
94
94
  mode: 'development',
95
95
  target: 'node'
96
- })]; // only have one output for server so we can avoid cached modules
97
-
98
- webpackConfigs[1].plugins.push(new _webpack.default.optimize.LimitChunkCountPlugin({
99
- maxChunks: 1
100
- })); // initialize the webpack compiler
96
+ })]; // initialize the webpack compiler
101
97
 
102
98
  const compiler = (0, _webpack.default)(webpackConfigs);
103
99
 
@@ -152,9 +148,10 @@ function startDevServer(entrypoint, env = {}) {
152
148
 
153
149
  const clientManifest = clientStats.toJson();
154
150
  const serverEntry = getServerBundle(serverStats); // reload modules
155
- // TODO: should we just reset entire cache each time? then we could avoid needing one output
156
151
 
157
- delete fsRequire.cache[fsRequire.resolve(serverEntry)]; // eslint-disable-next-line @typescript-eslint/no-var-requires
152
+ Object.keys(fsRequire.cache).forEach(key => {
153
+ delete fsRequire.cache[key];
154
+ }); // eslint-disable-next-line @typescript-eslint/no-var-requires
158
155
 
159
156
  render = fsRequire(serverEntry).default.bind(undefined, clientManifest); // SERVER SIDE ENTRYPOINT
160
157
 
@@ -233,4 +230,4 @@ function startDevServer(entrypoint, env = {}) {
233
230
  });
234
231
  runServer();
235
232
  }
236
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImNvbnNvbGUiLCJsb2ciLCJleGl0Iiwic3RhcnREZXZTZXJ2ZXIiLCJlbnYiLCJ3ZWJwYWNrQ29uZmlnIiwicmVzb2x2ZSIsInBhdGgiLCJqb2luIiwiY3dkIiwibG9nZ2luZyIsImdldExvZ2dlciIsInZvbHVtZSIsIlZvbHVtZSIsImZzIiwiY3JlYXRlRnNGcm9tVm9sdW1lIiwidWZzIiwidXNlIiwiZGlza0ZzIiwiZnNSZXF1aXJlIiwiY3JlYXRlRnNSZXF1aXJlIiwicmVhZEZpbGUiLCJwcm9taXNpZnkiLCJzZXJ2ZXIiLCJob3RFbnRyeSIsImVudHJ5UGF0aCIsImdlbmVyYXRlZEVudHJ5cG9pbnQiLCJ0bXAiLCJmaWxlU3luYyIsInBvc3RmaXgiLCJ3cml0ZVN5bmMiLCJmZCIsIndlYnBhY2tDb25maWdzIiwiZW50cnlwYXRoIiwibmFtZSIsIm1vZGUiLCJyZXBsYWNlIiwiQlJPV1NFUlNMSVNUX0VOViIsInRhcmdldCIsInBsdWdpbnMiLCJwdXNoIiwid2VicGFjayIsIm9wdGltaXplIiwiTGltaXRDaHVua0NvdW50UGx1Z2luIiwibWF4Q2h1bmtzIiwiY29tcGlsZXIiLCJzb3VyY2VNYXBTdXBwb3J0IiwiaW5zdGFsbCIsImhvb2tSZXF1aXJlIiwiZ2V0U2VydmVyQnVuZGxlIiwic2VydmVyU3RhdHMiLCJzZXJ2ZXJKc29uIiwidG9Kc29uIiwiYXNzZXRzIiwib3V0cHV0UGF0aCIsImhhbmRsZUVycm9ycyIsImZuIiwicmVxIiwicmVzIiwibmV4dCIsIngiLCJpbml0UmVuZGVyIiwicmVuZGVyIiwiYXJncyIsIlByb21pc2UiLCJpbXBvcnRSZW5kZXIiLCJzdGF0cyIsImNsaWVudFN0YXRzIiwiY29tcGlsYXRpb24iLCJlcnJvcnMiLCJsZW5ndGgiLCJlcnJvciIsImluZm8iLCJjbGllbnRNYW5pZmVzdCIsInNlcnZlckVudHJ5IiwiY2FjaGUiLCJkZWZhdWx0IiwiYmluZCIsInVuZGVmaW5lZCIsIkFycmF5IiwiaXNBcnJheSIsImZvckVhY2giLCJpbml0IiwidGhlbiIsImRldlNlcnZlciIsIldlYnBhY2tEZXZTZXJ2ZXIiLCJkZXZNaWRkbGV3YXJlIiwib3V0cHV0RmlsZVN5c3RlbSIsInNldHVwTWlkZGxld2FyZXMiLCJtaWRkbGV3YXJlcyIsIkVycm9yIiwib3RoZXJSb3V0ZXMiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwiT2JqZWN0Iiwia2V5cyIsInByb3h5IiwiYXBwIiwiZ2V0IiwiUmVnRXhwIiwidXJsIiwiZW5kc1dpdGgiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwic2VuZCIsInNvY2tldCIsIm9uIiwicnVuU2VydmVyIiwic3RhcnQiLCJob29rcyIsImRvbmUiLCJ0YXAiLCJtdWx0aVN0YXRzIiwiaGFzT3duIiwiZSIsInN0b3BTZXJ2ZXIiLCJzdG9wIiwid2FybiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3N0YXJ0RGV2c2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgZGlza0ZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHdlYnBhY2ssIHsgTXVsdGlDb21waWxlciB9IGZyb20gJ3dlYnBhY2snO1xuaW1wb3J0IHsgY3JlYXRlRnNGcm9tVm9sdW1lLCBWb2x1bWUgfSBmcm9tICdtZW1mcyc7XG5pbXBvcnQgeyBTZXJ2ZXIsIEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UgfSBmcm9tICdodHRwJztcbmltcG9ydCB0eXBlIHsgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdG1wIGZyb20gJ3RtcCc7XG5pbXBvcnQgc291cmNlTWFwU3VwcG9ydCBmcm9tICdzb3VyY2UtbWFwLXN1cHBvcnQnO1xuaW1wb3J0IHsgdWZzIH0gZnJvbSAndW5pb25mcyc7XG5pbXBvcnQgV2VicGFja0RldlNlcnZlciBmcm9tICd3ZWJwYWNrLWRldi1zZXJ2ZXInO1xuaW1wb3J0IGxvZ2dpbmcgZnJvbSAnd2VicGFjay9saWIvbG9nZ2luZy9ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUZzUmVxdWlyZSB9IGZyb20gJ2ZzLXJlcXVpcmUnO1xuXG5pbXBvcnQgJ2Nyb3NzLWZldGNoL3BvbHlmaWxsJztcbmltcG9ydCB7IEJvdW5kUmVuZGVyIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIHJ1biBkaXJlY3RseSBmcm9tIG5vZGVcbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBjb25zdCBlbnRyeXBvaW50ID0gcHJvY2Vzcy5hcmd2WzJdO1xuXG4gIGlmICghZW50cnlwb2ludCkge1xuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogc3RhcnQtYW5hbnNpIDxlbnRyeXBvaW50LWZpbGU+YCk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfVxuXG4gIHN0YXJ0RGV2U2VydmVyKGVudHJ5cG9pbnQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydERldlNlcnZlcihcbiAgZW50cnlwb2ludDogc3RyaW5nLFxuICBlbnY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4pIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgY29uc3Qgd2VicGFja0NvbmZpZyA9IHJlcXVpcmUocmVxdWlyZS5yZXNvbHZlKFxuICAgIC8vIFRPRE86IHVzZSBub3JtYWwgcmVzb2x1dGlvbiBhbGdvcml0aG0gdG8gZmluZCB3ZWJwYWNrIGZpbGVcbiAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ3dlYnBhY2suY29uZmlnJyksXG4gICkpO1xuXG4gIGNvbnN0IGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhbmFuc2ktZGV2c2VydmVyJyk7XG5cbiAgLy8gU2V0IHVwIGluIG1lbW9yeSBmaWxlc3lzdGVtXG4gIGNvbnN0IHZvbHVtZSA9IG5ldyBWb2x1bWUoKTtcbiAgY29uc3QgZnMgPSBjcmVhdGVGc0Zyb21Wb2x1bWUodm9sdW1lKTtcbiAgdWZzLnVzZShkaXNrRnMpLnVzZShmcyBhcyBhbnkpO1xuXG4gIGNvbnN0IGZzUmVxdWlyZSA9IGNyZWF0ZUZzUmVxdWlyZSh1ZnMpO1xuICBjb25zdCByZWFkRmlsZSA9IHByb21pc2lmeSh1ZnMucmVhZEZpbGUpO1xuICBsZXQgc2VydmVyOiBTZXJ2ZXIgfCB1bmRlZmluZWQ7XG5cbiAgLy8gR2VuZXJhdGUgYSB0ZW1wb3JhcnkgZmlsZSBzbyB3ZSBjYW4gaG90IHJlbG9hZCBmcm9tIHRoZSByb290IG9mIHRoZSBhcHBsaWNhdGlvblxuICBmdW5jdGlvbiBob3RFbnRyeShlbnRyeVBhdGg6IHN0cmluZykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIC8vIEB0cy1pZ25vcmUgZm9yIHNvbWUgcmVhc29uIGl0J3Mgbm90IHBpY2tpbmcgdXAgdGhhdCBvdGhlciBvcHRpb25zIGFyZSBvcHRpb25hbFxuICAgIGNvbnN0IGdlbmVyYXRlZEVudHJ5cG9pbnQgPSB0bXAuZmlsZVN5bmMoeyBwb3N0Zml4OiAnLmpzJyB9KTtcbiAgICBkaXNrRnMud3JpdGVTeW5jKFxuICAgICAgZ2VuZXJhdGVkRW50cnlwb2ludC5mZCxcbiAgICAgIGBcbiAgaW1wb3J0IGVudHJ5IGZyb20gXCIke3BhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBlbnRyeVBhdGgpfVwiO1xuXG4gIGlmIChtb2R1bGUuaG90KSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKTtcbiAgfVxuXG4gIGV4cG9ydCBkZWZhdWx0IGVudHJ5O1xuICAgIGAsXG4gICAgKTtcbiAgICByZXR1cm4gZ2VuZXJhdGVkRW50cnlwb2ludDtcbiAgfVxuXG4gIGNvbnN0IHdlYnBhY2tDb25maWdzID0gW1xuICAgIHdlYnBhY2tDb25maWcoXG4gICAgICB7XG4gICAgICAgIC4uLmVudixcbiAgICAgICAgZW50cnlwYXRoOiBob3RFbnRyeShlbnRyeXBvaW50KS5uYW1lLFxuICAgICAgICBuYW1lOiAnY2xpZW50JyxcbiAgICAgIH0sXG4gICAgICB7IG1vZGU6ICdkZXZlbG9wbWVudCcgfSxcbiAgICApLFxuICAgIHdlYnBhY2tDb25maWcoXG4gICAgICB7XG4gICAgICAgIC4uLmVudixcbiAgICAgICAgZW50cnlwYXRoOiBlbnRyeXBvaW50LnJlcGxhY2UoJy50c3gnLCAnLnNlcnZlci50c3gnKSxcbiAgICAgICAgbmFtZTogJ3NlcnZlcicsXG4gICAgICAgIEJST1dTRVJTTElTVF9FTlY6ICdjdXJyZW50IG5vZGUnLFxuICAgICAgfSxcbiAgICAgIHsgbW9kZTogJ2RldmVsb3BtZW50JywgdGFyZ2V0OiAnbm9kZScgfSxcbiAgICApLFxuICBdIGFzIGNvbnN0O1xuICAvLyBvbmx5IGhhdmUgb25lIG91dHB1dCBmb3Igc2VydmVyIHNvIHdlIGNhbiBhdm9pZCBjYWNoZWQgbW9kdWxlc1xuICB3ZWJwYWNrQ29uZmlnc1sxXS5wbHVnaW5zLnB1c2goXG4gICAgbmV3IHdlYnBhY2sub3B0aW1pemUuTGltaXRDaHVua0NvdW50UGx1Z2luKHsgbWF4Q2h1bmtzOiAxIH0pLFxuICApO1xuICAvLyBpbml0aWFsaXplIHRoZSB3ZWJwYWNrIGNvbXBpbGVyXG4gIGNvbnN0IGNvbXBpbGVyOiBNdWx0aUNvbXBpbGVyID0gd2VicGFjayh3ZWJwYWNrQ29uZmlncyk7XG5cbiAgc291cmNlTWFwU3VwcG9ydC5pbnN0YWxsKHsgaG9va1JlcXVpcmU6IHRydWUgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0U2VydmVyQnVuZGxlKHNlcnZlclN0YXRzOiB3ZWJwYWNrLlN0YXRzKSB7XG4gICAgY29uc3Qgc2VydmVySnNvbiA9IHNlcnZlclN0YXRzLnRvSnNvbih7IGFzc2V0czogdHJ1ZSB9KTtcbiAgICByZXR1cm4gcGF0aC5qb2luKHNlcnZlckpzb24ub3V0cHV0UGF0aCA/PyAnJywgJ3NlcnZlci5qcycpO1xuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZUVycm9yczxcbiAgICBGIGV4dGVuZHMgKFxuICAgICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgICAgcmVzOiBSZXNwb25zZSB8IFNlcnZlclJlc3BvbnNlLFxuICAgICkgPT4gUHJvbWlzZTx2b2lkPixcbiAgPihmbjogRikge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiAoXG4gICAgICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2UsXG4gICAgICByZXM6IFJlc3BvbnNlIHwgU2VydmVyUmVzcG9uc2UsXG4gICAgICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZm4ocmVxLCByZXMpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBuZXh0KHgpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgaW5pdFJlbmRlcjpcbiAgICB8IHsgYXJnczogUGFyYW1ldGVyczxCb3VuZFJlbmRlcj47IHJlc29sdmU6ICgpID0+IHZvaWQgfVtdXG4gICAgfCB1bmRlZmluZWQgPSBbXTtcbiAgbGV0IHJlbmRlcjogQm91bmRSZW5kZXIgPSAoLi4uYXJncykgPT5cbiAgICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGluaXRSZW5kZXI/LnB1c2goeyBhcmdzLCByZXNvbHZlIH0pO1xuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIGltcG9ydFJlbmRlcihzdGF0czogd2VicGFjay5TdGF0c1tdKSB7XG4gICAgY29uc3QgW2NsaWVudFN0YXRzLCBzZXJ2ZXJTdGF0c10gPSBzdGF0cztcbiAgICBpZiAoXG4gICAgICBjbGllbnRTdGF0cz8uY29tcGlsYXRpb24/LmVycm9ycz8ubGVuZ3RoIHx8XG4gICAgICBzZXJ2ZXJTdGF0cz8uY29tcGlsYXRpb24/LmVycm9ycz8ubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2cuZXJyb3IoJ0Vycm9ycyBmb3IgY2xpZW50IGJ1aWxkOiAnICsgY2xpZW50U3RhdHMuY29tcGlsYXRpb24uZXJyb3JzKTtcbiAgICAgIGxvZy5lcnJvcignRXJyb3JzIGZvciBzZXJ2ZXIgYnVpbGQ6ICcgKyBzZXJ2ZXJTdGF0cy5jb21waWxhdGlvbi5lcnJvcnMpO1xuICAgICAgLy8gVE9ETzogaGFuZGxlIG1vcmUgZ3JhY2VmdWxseVxuICAgICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oJ0xhdW5jaGluZyBTU1InKTtcbiAgICB9XG5cbiAgICAvLyBBU1NFVFNcbiAgICBjb25zdCBjbGllbnRNYW5pZmVzdCA9IGNsaWVudFN0YXRzLnRvSnNvbigpO1xuXG4gICAgY29uc3Qgc2VydmVyRW50cnkgPSBnZXRTZXJ2ZXJCdW5kbGUoc2VydmVyU3RhdHMpO1xuICAgIC8vIHJlbG9hZCBtb2R1bGVzXG4gICAgLy8gVE9ETzogc2hvdWxkIHdlIGp1c3QgcmVzZXQgZW50aXJlIGNhY2hlIGVhY2ggdGltZT8gdGhlbiB3ZSBjb3VsZCBhdm9pZCBuZWVkaW5nIG9uZSBvdXRwdXRcbiAgICBkZWxldGUgZnNSZXF1aXJlLmNhY2hlW2ZzUmVxdWlyZS5yZXNvbHZlKHNlcnZlckVudHJ5KV07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICByZW5kZXIgPSAoZnNSZXF1aXJlKHNlcnZlckVudHJ5KSBhcyBhbnkpLmRlZmF1bHQuYmluZChcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsaWVudE1hbmlmZXN0LFxuICAgICk7XG4gICAgLy8gU0VSVkVSIFNJREUgRU5UUllQT0lOVFxuICAgIGlmIChBcnJheS5pc0FycmF5KGluaXRSZW5kZXIpKSB7XG4gICAgICBpbml0UmVuZGVyLmZvckVhY2goaW5pdCA9PiByZW5kZXIoLi4uaW5pdC5hcmdzKS50aGVuKGluaXQucmVzb2x2ZSkpO1xuICAgICAgaW5pdFJlbmRlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkZXZTZXJ2ZXIgPSBuZXcgV2VicGFja0RldlNlcnZlcihcbiAgICAvLyB3cml0ZSB0byBtZW1vcnkgZmlsZXN5c3RlbSBzbyB3ZSBjYW4gaW1wb3J0XG4gICAge1xuICAgICAgLi4ud2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyLFxuICAgICAgZGV2TWlkZGxld2FyZToge1xuICAgICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXT8uZGV2U2VydmVyPy5kZXZNaWRkbGV3YXJlLFxuICAgICAgICBvdXRwdXRGaWxlU3lzdGVtOiB7XG4gICAgICAgICAgLi4uZnMsXG4gICAgICAgICAgam9pbjogcGF0aC5qb2luIGFzIGFueSxcbiAgICAgICAgfSBhcyBhbnkgYXMgdHlwZW9mIGZzLFxuICAgICAgfSxcbiAgICAgIHNldHVwTWlkZGxld2FyZXM6IChtaWRkbGV3YXJlcywgZGV2U2VydmVyKSA9PiB7XG4gICAgICAgIGlmICghZGV2U2VydmVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3ZWJwYWNrLWRldi1zZXJ2ZXIgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG90aGVyUm91dGVzID0gW1xuICAgICAgICAgIHByb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEgsXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMod2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyPy5wcm94eSA/PyB7fSksXG4gICAgICAgIF07XG4gICAgICAgIC8vIHNlcnZlIFNTUiBmb3Igbm9uLVdFQlBBQ0tfUFVCTElDX1BBVEhcbiAgICAgICAgZGV2U2VydmVyLmFwcD8uZ2V0KFxuICAgICAgICAgIG5ldyBSZWdFeHAoYF4oPyEke290aGVyUm91dGVzLmpvaW4oJ3wnKX0pYCksXG4gICAgICAgICAgaGFuZGxlRXJyb3JzKGFzeW5jIGZ1bmN0aW9uIChyZXE6IGFueSwgcmVzOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChyZXEudXJsLmVuZHNXaXRoKCdmYXZpY29uLmljbycpKSB7XG4gICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgICAgICAgIHJlcy5zZW5kKCdub3QgZm91bmQnKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLnNvY2tldC5vbignZXJyb3InLCAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmF0YWwnLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgcmVuZGVyKHJlcSwgcmVzKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbWlkZGxld2FyZXM7XG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcGlsZXIsXG4gICk7XG4gIGNvbnN0IHJ1blNlcnZlciA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBkZXZTZXJ2ZXIuc3RhcnQoKTtcbiAgICBkZXZTZXJ2ZXIuY29tcGlsZXIuaG9va3MuZG9uZS50YXAoXG4gICAgICAnQW5hbnNpIFNlcnZlcicsXG4gICAgICAobXVsdGlTdGF0czogd2VicGFjay5NdWx0aVN0YXRzIHwgd2VicGFjay5TdGF0cykgPT4ge1xuICAgICAgICBpZiAoIW11bHRpU3RhdHMpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoJ3N0YXRzIG5vdCBzZW5kJyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093bihtdWx0aVN0YXRzLCAnc3RhdHMnKSkgcmV0dXJuO1xuICAgICAgICBpZiAoKG11bHRpU3RhdHMgYXMgd2VicGFjay5NdWx0aVN0YXRzKS5zdGF0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGltcG9ydFJlbmRlcigobXVsdGlTdGF0cyBhcyB3ZWJwYWNrLk11bHRpU3RhdHMpLnN0YXRzKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VydmUgZW50cnlwb2ludCcpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nLmVycm9yKCdPbmx5IGNvbXBpbGVyIG9uZSBzdGF0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcbiAgY29uc3Qgc3RvcFNlcnZlciA9IGFzeW5jICgpID0+IHtcbiAgICBsb2cuaW5mbygnU3RvcHBpbmcgc2VydmVyLi4uJyk7XG4gICAgYXdhaXQgZGV2U2VydmVyLnN0b3AoKTtcbiAgICBsb2cuaW5mbygnU2VydmVyIGNsb3NlZCcpO1xuICB9O1xuXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBsb2cud2FybignUmVjZWl2ZWQgU0lHSU5ULCBkZXZzZXJ2ZXIgc2h1dHRpbmcgZG93bicpO1xuICAgIHN0b3BTZXJ2ZXIoKTtcbiAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICB9KTtcblxuICBydW5TZXJ2ZXIoKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBR0E7QUFDQSxJQUFJQSxPQUFPLENBQUNDLElBQVIsS0FBaUJDLE1BQXJCLEVBQTZCO0VBQzNCLE1BQU1DLFVBQVUsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWEsQ0FBYixDQUFuQjs7RUFFQSxJQUFJLENBQUNGLFVBQUwsRUFBaUI7SUFDZkcsT0FBTyxDQUFDQyxHQUFSLENBQWEsdUNBQWI7SUFDQUgsT0FBTyxDQUFD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
233
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImNvbnNvbGUiLCJsb2ciLCJleGl0Iiwic3RhcnREZXZTZXJ2ZXIiLCJlbnYiLCJ3ZWJwYWNrQ29uZmlnIiwicmVzb2x2ZSIsInBhdGgiLCJqb2luIiwiY3dkIiwibG9nZ2luZyIsImdldExvZ2dlciIsInZvbHVtZSIsIlZvbHVtZSIsImZzIiwiY3JlYXRlRnNGcm9tVm9sdW1lIiwidWZzIiwidXNlIiwiZGlza0ZzIiwiZnNSZXF1aXJlIiwiY3JlYXRlRnNSZXF1aXJlIiwicmVhZEZpbGUiLCJwcm9taXNpZnkiLCJzZXJ2ZXIiLCJob3RFbnRyeSIsImVudHJ5UGF0aCIsImdlbmVyYXRlZEVudHJ5cG9pbnQiLCJ0bXAiLCJmaWxlU3luYyIsInBvc3RmaXgiLCJ3cml0ZVN5bmMiLCJmZCIsIndlYnBhY2tDb25maWdzIiwiZW50cnlwYXRoIiwibmFtZSIsIm1vZGUiLCJyZXBsYWNlIiwiQlJPV1NFUlNMSVNUX0VOViIsInRhcmdldCIsImNvbXBpbGVyIiwid2VicGFjayIsInNvdXJjZU1hcFN1cHBvcnQiLCJpbnN0YWxsIiwiaG9va1JlcXVpcmUiLCJnZXRTZXJ2ZXJCdW5kbGUiLCJzZXJ2ZXJTdGF0cyIsInNlcnZlckpzb24iLCJ0b0pzb24iLCJhc3NldHMiLCJvdXRwdXRQYXRoIiwiaGFuZGxlRXJyb3JzIiwiZm4iLCJyZXEiLCJyZXMiLCJuZXh0IiwieCIsImluaXRSZW5kZXIiLCJyZW5kZXIiLCJhcmdzIiwiUHJvbWlzZSIsInB1c2giLCJpbXBvcnRSZW5kZXIiLCJzdGF0cyIsImNsaWVudFN0YXRzIiwiY29tcGlsYXRpb24iLCJlcnJvcnMiLCJsZW5ndGgiLCJlcnJvciIsImluZm8iLCJjbGllbnRNYW5pZmVzdCIsInNlcnZlckVudHJ5IiwiT2JqZWN0Iiwia2V5cyIsImNhY2hlIiwiZm9yRWFjaCIsImtleSIsImRlZmF1bHQiLCJiaW5kIiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5pdCIsInRoZW4iLCJkZXZTZXJ2ZXIiLCJXZWJwYWNrRGV2U2VydmVyIiwiZGV2TWlkZGxld2FyZSIsIm91dHB1dEZpbGVTeXN0ZW0iLCJzZXR1cE1pZGRsZXdhcmVzIiwibWlkZGxld2FyZXMiLCJFcnJvciIsIm90aGVyUm91dGVzIiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsInByb3h5IiwiYXBwIiwiZ2V0IiwiUmVnRXhwIiwidXJsIiwiZW5kc1dpdGgiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwic2VuZCIsInNvY2tldCIsIm9uIiwicnVuU2VydmVyIiwic3RhcnQiLCJob29rcyIsImRvbmUiLCJ0YXAiLCJtdWx0aVN0YXRzIiwiaGFzT3duIiwiZSIsInN0b3BTZXJ2ZXIiLCJzdG9wIiwid2FybiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3N0YXJ0RGV2c2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgZGlza0ZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHdlYnBhY2ssIHsgTXVsdGlDb21waWxlciB9IGZyb20gJ3dlYnBhY2snO1xuaW1wb3J0IHsgY3JlYXRlRnNGcm9tVm9sdW1lLCBWb2x1bWUgfSBmcm9tICdtZW1mcyc7XG5pbXBvcnQgeyBTZXJ2ZXIsIEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UgfSBmcm9tICdodHRwJztcbmltcG9ydCB0eXBlIHsgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdG1wIGZyb20gJ3RtcCc7XG5pbXBvcnQgc291cmNlTWFwU3VwcG9ydCBmcm9tICdzb3VyY2UtbWFwLXN1cHBvcnQnO1xuaW1wb3J0IHsgdWZzIH0gZnJvbSAndW5pb25mcyc7XG5pbXBvcnQgV2VicGFja0RldlNlcnZlciBmcm9tICd3ZWJwYWNrLWRldi1zZXJ2ZXInO1xuaW1wb3J0IGxvZ2dpbmcgZnJvbSAnd2VicGFjay9saWIvbG9nZ2luZy9ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUZzUmVxdWlyZSB9IGZyb20gJ2ZzLXJlcXVpcmUnO1xuXG5pbXBvcnQgJ2Nyb3NzLWZldGNoL3BvbHlmaWxsJztcbmltcG9ydCB7IEJvdW5kUmVuZGVyIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIHJ1biBkaXJlY3RseSBmcm9tIG5vZGVcbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBjb25zdCBlbnRyeXBvaW50ID0gcHJvY2Vzcy5hcmd2WzJdO1xuXG4gIGlmICghZW50cnlwb2ludCkge1xuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogc3RhcnQtYW5hbnNpIDxlbnRyeXBvaW50LWZpbGU+YCk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfVxuXG4gIHN0YXJ0RGV2U2VydmVyKGVudHJ5cG9pbnQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydERldlNlcnZlcihcbiAgZW50cnlwb2ludDogc3RyaW5nLFxuICBlbnY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4pIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgY29uc3Qgd2VicGFja0NvbmZpZyA9IHJlcXVpcmUocmVxdWlyZS5yZXNvbHZlKFxuICAgIC8vIFRPRE86IHVzZSBub3JtYWwgcmVzb2x1dGlvbiBhbGdvcml0aG0gdG8gZmluZCB3ZWJwYWNrIGZpbGVcbiAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ3dlYnBhY2suY29uZmlnJyksXG4gICkpO1xuXG4gIGNvbnN0IGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhbmFuc2ktZGV2c2VydmVyJyk7XG5cbiAgLy8gU2V0IHVwIGluIG1lbW9yeSBmaWxlc3lzdGVtXG4gIGNvbnN0IHZvbHVtZSA9IG5ldyBWb2x1bWUoKTtcbiAgY29uc3QgZnMgPSBjcmVhdGVGc0Zyb21Wb2x1bWUodm9sdW1lKTtcbiAgdWZzLnVzZShkaXNrRnMpLnVzZShmcyBhcyBhbnkpO1xuXG4gIGNvbnN0IGZzUmVxdWlyZSA9IGNyZWF0ZUZzUmVxdWlyZSh1ZnMpO1xuICBjb25zdCByZWFkRmlsZSA9IHByb21pc2lmeSh1ZnMucmVhZEZpbGUpO1xuICBsZXQgc2VydmVyOiBTZXJ2ZXIgfCB1bmRlZmluZWQ7XG5cbiAgLy8gR2VuZXJhdGUgYSB0ZW1wb3JhcnkgZmlsZSBzbyB3ZSBjYW4gaG90IHJlbG9hZCBmcm9tIHRoZSByb290IG9mIHRoZSBhcHBsaWNhdGlvblxuICBmdW5jdGlvbiBob3RFbnRyeShlbnRyeVBhdGg6IHN0cmluZykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIC8vIEB0cy1pZ25vcmUgZm9yIHNvbWUgcmVhc29uIGl0J3Mgbm90IHBpY2tpbmcgdXAgdGhhdCBvdGhlciBvcHRpb25zIGFyZSBvcHRpb25hbFxuICAgIGNvbnN0IGdlbmVyYXRlZEVudHJ5cG9pbnQgPSB0bXAuZmlsZVN5bmMoeyBwb3N0Zml4OiAnLmpzJyB9KTtcbiAgICBkaXNrRnMud3JpdGVTeW5jKFxuICAgICAgZ2VuZXJhdGVkRW50cnlwb2ludC5mZCxcbiAgICAgIGBcbiAgaW1wb3J0IGVudHJ5IGZyb20gXCIke3BhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBlbnRyeVBhdGgpfVwiO1xuXG4gIGlmIChtb2R1bGUuaG90KSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKTtcbiAgfVxuXG4gIGV4cG9ydCBkZWZhdWx0IGVudHJ5O1xuICAgIGAsXG4gICAgKTtcbiAgICByZXR1cm4gZ2VuZXJhdGVkRW50cnlwb2ludDtcbiAgfVxuXG4gIGNvbnN0IHdlYnBhY2tDb25maWdzID0gW1xuICAgIHdlYnBhY2tDb25maWcoXG4gICAgICB7XG4gICAgICAgIC4uLmVudixcbiAgICAgICAgZW50cnlwYXRoOiBob3RFbnRyeShlbnRyeXBvaW50KS5uYW1lLFxuICAgICAgICBuYW1lOiAnY2xpZW50JyxcbiAgICAgIH0sXG4gICAgICB7IG1vZGU6ICdkZXZlbG9wbWVudCcgfSxcbiAgICApLFxuICAgIHdlYnBhY2tDb25maWcoXG4gICAgICB7XG4gICAgICAgIC4uLmVudixcbiAgICAgICAgZW50cnlwYXRoOiBlbnRyeXBvaW50LnJlcGxhY2UoJy50c3gnLCAnLnNlcnZlci50c3gnKSxcbiAgICAgICAgbmFtZTogJ3NlcnZlcicsXG4gICAgICAgIEJST1dTRVJTTElTVF9FTlY6ICdjdXJyZW50IG5vZGUnLFxuICAgICAgfSxcbiAgICAgIHsgbW9kZTogJ2RldmVsb3BtZW50JywgdGFyZ2V0OiAnbm9kZScgfSxcbiAgICApLFxuICBdIGFzIGNvbnN0O1xuXG4gIC8vIGluaXRpYWxpemUgdGhlIHdlYnBhY2sgY29tcGlsZXJcbiAgY29uc3QgY29tcGlsZXI6IE11bHRpQ29tcGlsZXIgPSB3ZWJwYWNrKHdlYnBhY2tDb25maWdzKTtcblxuICBzb3VyY2VNYXBTdXBwb3J0Lmluc3RhbGwoeyBob29rUmVxdWlyZTogdHJ1ZSB9KTtcblxuICBmdW5jdGlvbiBnZXRTZXJ2ZXJCdW5kbGUoc2VydmVyU3RhdHM6IHdlYnBhY2suU3RhdHMpIHtcbiAgICBjb25zdCBzZXJ2ZXJKc29uID0gc2VydmVyU3RhdHMudG9Kc29uKHsgYXNzZXRzOiB0cnVlIH0pO1xuICAgIHJldHVybiBwYXRoLmpvaW4oc2VydmVySnNvbi5vdXRwdXRQYXRoID8/ICcnLCAnc2VydmVyLmpzJyk7XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3JzPFxuICAgIEYgZXh0ZW5kcyAoXG4gICAgICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2UsXG4gICAgICByZXM6IFJlc3BvbnNlIHwgU2VydmVyUmVzcG9uc2UsXG4gICAgKSA9PiBQcm9taXNlPHZvaWQ+LFxuICA+KGZuOiBGKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIChcbiAgICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICAgIG5leHQ6IE5leHRGdW5jdGlvbixcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbihyZXEsIHJlcyk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIG5leHQoeCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBpbml0UmVuZGVyOlxuICAgIHwgeyBhcmdzOiBQYXJhbWV0ZXJzPEJvdW5kUmVuZGVyPjsgcmVzb2x2ZTogKCkgPT4gdm9pZCB9W11cbiAgICB8IHVuZGVmaW5lZCA9IFtdO1xuICBsZXQgcmVuZGVyOiBCb3VuZFJlbmRlciA9ICguLi5hcmdzKSA9PlxuICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaW5pdFJlbmRlcj8ucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSk7XG4gICAgfSk7XG5cbiAgZnVuY3Rpb24gaW1wb3J0UmVuZGVyKHN0YXRzOiB3ZWJwYWNrLlN0YXRzW10pIHtcbiAgICBjb25zdCBbY2xpZW50U3RhdHMsIHNlcnZlclN0YXRzXSA9IHN0YXRzO1xuICAgIGlmIChcbiAgICAgIGNsaWVudFN0YXRzPy5jb21waWxhdGlvbj8uZXJyb3JzPy5sZW5ndGggfHxcbiAgICAgIHNlcnZlclN0YXRzPy5jb21waWxhdGlvbj8uZXJyb3JzPy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZy5lcnJvcignRXJyb3JzIGZvciBjbGllbnQgYnVpbGQ6ICcgKyBjbGllbnRTdGF0cy5jb21waWxhdGlvbi5lcnJvcnMpO1xuICAgICAgbG9nLmVycm9yKCdFcnJvcnMgZm9yIHNlcnZlciBidWlsZDogJyArIHNlcnZlclN0YXRzLmNvbXBpbGF0aW9uLmVycm9ycyk7XG4gICAgICAvLyBUT0RPOiBoYW5kbGUgbW9yZSBncmFjZWZ1bGx5XG4gICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbygnTGF1bmNoaW5nIFNTUicpO1xuICAgIH1cblxuICAgIC8vIEFTU0VUU1xuICAgIGNvbnN0IGNsaWVudE1hbmlmZXN0ID0gY2xpZW50U3RhdHMudG9Kc29uKCk7XG5cbiAgICBjb25zdCBzZXJ2ZXJFbnRyeSA9IGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0cyk7XG4gICAgLy8gcmVsb2FkIG1vZHVsZXNcbiAgICBPYmplY3Qua2V5cyhmc1JlcXVpcmUuY2FjaGUpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGRlbGV0ZSBmc1JlcXVpcmUuY2FjaGVba2V5XTtcbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIHJlbmRlciA9IChmc1JlcXVpcmUoc2VydmVyRW50cnkpIGFzIGFueSkuZGVmYXVsdC5iaW5kKFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xpZW50TWFuaWZlc3QsXG4gICAgKTtcbiAgICAvLyBTRVJWRVIgU0lERSBFTlRSWVBPSU5UXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdFJlbmRlcikpIHtcbiAgICAgIGluaXRSZW5kZXIuZm9yRWFjaChpbml0ID0+IHJlbmRlciguLi5pbml0LmFyZ3MpLnRoZW4oaW5pdC5yZXNvbHZlKSk7XG4gICAgICBpbml0UmVuZGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRldlNlcnZlciA9IG5ldyBXZWJwYWNrRGV2U2VydmVyKFxuICAgIC8vIHdyaXRlIHRvIG1lbW9yeSBmaWxlc3lzdGVtIHNvIHdlIGNhbiBpbXBvcnRcbiAgICB7XG4gICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXIsXG4gICAgICBkZXZNaWRkbGV3YXJlOiB7XG4gICAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdPy5kZXZTZXJ2ZXI/LmRldk1pZGRsZXdhcmUsXG4gICAgICAgIG91dHB1dEZpbGVTeXN0ZW06IHtcbiAgICAgICAgICAuLi5mcyxcbiAgICAgICAgICBqb2luOiBwYXRoLmpvaW4gYXMgYW55LFxuICAgICAgICB9IGFzIGFueSBhcyB0eXBlb2YgZnMsXG4gICAgICB9LFxuICAgICAgc2V0dXBNaWRkbGV3YXJlczogKG1pZGRsZXdhcmVzLCBkZXZTZXJ2ZXIpID0+IHtcbiAgICAgICAgaWYgKCFkZXZTZXJ2ZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dlYnBhY2stZGV2LXNlcnZlciBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3RoZXJSb3V0ZXMgPSBbXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCxcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyh3ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXI/LnByb3h5ID8/IHt9KSxcbiAgICAgICAgXTtcbiAgICAgICAgLy8gc2VydmUgU1NSIGZvciBub24tV0VCUEFDS19QVUJMSUNfUEFUSFxuICAgICAgICBkZXZTZXJ2ZXIuYXBwPy5nZXQoXG4gICAgICAgICAgbmV3IFJlZ0V4cChgXig/ISR7b3RoZXJSb3V0ZXMuam9pbignfCcpfSlgKSxcbiAgICAgICAgICBoYW5kbGVFcnJvcnMoYXN5bmMgZnVuY3Rpb24gKHJlcTogYW55LCByZXM6IGFueSkge1xuICAgICAgICAgICAgaWYgKHJlcS51cmwuZW5kc1dpdGgoJ2Zhdmljb24uaWNvJykpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XG4gICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICAgICAgcmVzLnNlbmQoJ25vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMuc29ja2V0Lm9uKCdlcnJvcicsIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCcsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCByZW5kZXIocmVxLCByZXMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlcztcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21waWxlcixcbiAgKTtcbiAgY29uc3QgcnVuU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRldlNlcnZlci5zdGFydCgpO1xuICAgIGRldlNlcnZlci5jb21waWxlci5ob29rcy5kb25lLnRhcChcbiAgICAgICdBbmFuc2kgU2VydmVyJyxcbiAgICAgIChtdWx0aVN0YXRzOiB3ZWJwYWNrLk11bHRpU3RhdHMgfCB3ZWJwYWNrLlN0YXRzKSA9PiB7XG4gICAgICAgIGlmICghbXVsdGlTdGF0cykge1xuICAgICAgICAgIGxvZy5lcnJvcignc3RhdHMgbm90IHNlbmQnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duKG11bHRpU3RhdHMsICdzdGF0cycpKSByZXR1cm47XG4gICAgICAgIGlmICgobXVsdGlTdGF0cyBhcyB3ZWJwYWNrLk11bHRpU3RhdHMpLnN0YXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW1wb3J0UmVuZGVyKChtdWx0aVN0YXRzIGFzIHdlYnBhY2suTXVsdGlTdGF0cykuc3RhdHMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBzZXJ2ZSBlbnRyeXBvaW50Jyk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2cuZXJyb3IoJ09ubHkgY29tcGlsZXIgb25lIHN0YXQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9O1xuICBjb25zdCBzdG9wU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgIGxvZy5pbmZvKCdTdG9wcGluZyBzZXJ2ZXIuLi4nKTtcbiAgICBhd2FpdCBkZXZTZXJ2ZXIuc3RvcCgpO1xuICAgIGxvZy5pbmZvKCdTZXJ2ZXIgY2xvc2VkJyk7XG4gIH07XG5cbiAgcHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGxvZy53YXJuKCdSZWNlaXZlZCBTSUdJTlQsIGRldnNlcnZlciBzaHV0dGluZyBkb3duJyk7XG4gICAgc3RvcFNlcnZlcigpO1xuICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gIH0pO1xuXG4gIHJ1blNlcnZlcigpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFHQTtBQUNBLElBQUlBLE9BQU8sQ0FBQ0MsSUFBUixLQUFpQkMsTUFBckIsRUFBNkI7RUFDM0IsTUFBTUMsVUFBVSxHQUFHQyxPQUFPLENBQUNDLElBQVIsQ0FBYSxDQUFiLENBQW5COztFQUVBLElBQUksQ0FBQ0YsVUFBTCxFQUFpQjtJQUNmRyxPQUFPLENBQUNDLEdBQVIsQ0FBYSx1Q0FBYjtJQUNBSCxPQUFPLENBQUNJLElBQVIsQ0FBYSxDQUFDLENBQWQ7RUFDRDs7RUFFREMsY0FBYyxDQUFDTixVQUFELENBQWQ7QUFDRDs7QUFFYyxTQUFTTSxjQUFULENBQ2JOLFVBRGEsRUFFYk8sR0FBNEIsR0FBRyxFQUZsQixFQUdiO0VBQUE7O0VBQ0E7RUFDQSxNQUFNQyxhQUFhLEdBQUdYLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDWSxPQUFSLEVBQzVCO0VBQ0FDLGFBQUEsQ0FBS0MsSUFBTCxDQUFVVixPQUFPLENBQUNXLEdBQVIsRUFBVixFQUF5QixnQkFBekIsQ0FGNEIsQ0FBRCxDQUE3Qjs7RUFLQSxNQUFNUixHQUFHLEdBQUdTLGdCQUFBLENBQVFDLFNBQVIsQ0FBa0Isa0JBQWxCLENBQVosQ0FQQSxDQVNBOzs7RUFDQSxNQUFNQyxNQUFNLEdBQUcsSUFBSUMsYUFBSixFQUFmO0VBQ0EsTUFBTUMsRUFBRSxHQUFHLElBQUFDLHlCQUFBLEVBQW1CSCxNQUFuQixDQUFYOztFQUNBSSxZQUFBLENBQUlDLEdBQUosQ0FBUUMsV0FBUixFQUFnQkQsR0FBaEIsQ0FBb0JILEVBQXBCOztFQUVBLE1BQU1LLFNBQVMsR0FBRyxJQUFBQywwQkFBQSxFQUFnQkosWUFBaEIsQ0FBbEI7RUFDQSxNQUFNSyxRQUFRLEdBQUcsSUFBQUMsZUFBQSxFQUFVTixZQUFBLENBQUlLLFFBQWQsQ0FBakI7RUFDQSxJQUFJRSxNQUFKLENBaEJBLENBa0JBOztFQUNBLFNBQVNDLFFBQVQsQ0FBa0JDLFNBQWxCLEVBQXFDO0lBQ25DO0lBQ0E7SUFDQSxNQUFNQyxtQkFBbUIsR0FBR0MsWUFBQSxDQUFJQyxRQUFKLENBQWE7TUFBRUMsT0FBTyxFQUFFO0lBQVgsQ0FBYixDQUE1Qjs7SUFDQVgsV0FBQSxDQUFPWSxTQUFQLENBQ0VKLG1CQUFtQixDQUFDSyxFQUR0QixFQUVHO0FBQ1AsdUJBQXVCeEIsYUFBQSxDQUFLRCxPQUFMLENBQWFSLE9BQU8sQ0FBQ1csR0FBUixFQUFiLEVBQTRCZ0IsU0FBNUIsQ0FBdUM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FWSTs7SUFZQSxPQUFPQyxtQkFBUDtFQUNEOztFQUVELE1BQU1NLGNBQWMsR0FBRyxDQUNyQjNCLGFBQWEsQ0FDWCxFQUNFLEdBQUdELEdBREw7SUFFRTZCLFNBQVMsRUFBRVQsUUFBUSxDQUFDM0IsVUFBRCxDQUFSLENBQXFCcUMsSUFGbEM7SUFHRUEsSUFBSSxFQUFFO0VBSFIsQ0FEVyxFQU1YO0lBQUVDLElBQUksRUFBRTtFQUFSLENBTlcsQ0FEUSxFQVNyQjlCLGFBQWEsQ0FDWCxFQUNFLEdBQUdELEdBREw7SUFFRTZCLFNBQVMsRUFBRXBDLFVBQVUsQ0FBQ3VDLE9BQVgsQ0FBbUIsTUFBbkIsRUFBMkIsYUFBM0IsQ0FGYjtJQUdFRixJQUFJLEVBQUUsUUFIUjtJQUlFRyxnQkFBZ0IsRUFBRTtFQUpwQixDQURXLEVBT1g7SUFBRUYsSUFBSSxFQUFFLGFBQVI7SUFBdUJHLE1BQU0sRUFBRTtFQUEvQixDQVBXLENBVFEsQ0FBdkIsQ0F0Q0EsQ0EwREE7O0VBQ0EsTUFBTUMsUUFBdUIsR0FBRyxJQUFBQyxnQkFBQSxFQUFRUixjQUFSLENBQWhDOztFQUVBUyx5QkFBQSxDQUFpQkMsT0FBakIsQ0FBeUI7SUFBRUMsV0FBVyxFQUFFO0VBQWYsQ0FBekI7O0VBRUEsU0FBU0MsZUFBVCxDQUF5QkMsV0FBekIsRUFBcUQ7SUFBQTs7SUFDbkQsTUFBTUMsVUFBVSxHQUFHRCxXQUFXLENBQUNFLE1BQVosQ0FBbUI7TUFBRUMsTUFBTSxFQUFFO0lBQVYsQ0FBbkIsQ0FBbkI7SUFDQSxPQUFPekMsYUFBQSxDQUFLQyxJQUFMLDBCQUFVc0MsVUFBVSxDQUFDRyxVQUFyQixvQ0FBbUMsRUFBbkMsRUFBdUMsV0FBdkMsQ0FBUDtFQUNEOztFQUNELFNBQVNDLFlBQVQsQ0FLRUMsRUFMRixFQUtTO0lBQ1AsT0FBTyxnQkFDTEMsR0FESyxFQUVMQyxHQUZLLEVBR0xDLElBSEssRUFJTDtNQUNBLElBQUk7UUFDRixPQUFPLE1BQU1ILEVBQUUsQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLENBQWY7TUFDRCxDQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO1FBQ1ZELElBQUksQ0FBQ0MsQ0FBRCxDQUFKO01BQ0Q7SUFDRixDQVZEO0VBV0Q7O0VBRUQsSUFBSUMsVUFFUyxHQUFHLEVBRmhCOztFQUdBLElBQUlDLE1BQW1CLEdBQUcsQ0FBQyxHQUFHQyxJQUFKLEtBQ3hCLElBQUlDLE9BQUosQ0FBWXJELE9BQU8sSUFBSTtJQUFBOztJQUNyQixlQUFBa0QsVUFBVSxVQUFWLGtEQUFZSSxJQUFaLENBQWlCO01BQUVGLElBQUY7TUFBUXBEO0lBQVIsQ0FBakI7RUFDRCxDQUZELENBREY7O0VBS0EsU0FBU3VELFlBQVQsQ0FBc0JDLEtBQXRCLEVBQThDO0lBQUE7O0lBQzVDLE1BQU0sQ0FBQ0MsV0FBRCxFQUFjbEIsV0FBZCxJQUE2QmlCLEtBQW5DOztJQUNBLElBQ0VDLFdBQVcsU0FBWCxJQUFBQSxXQUFXLFdBQVgsNkJBQUFBLFdBQVcsQ0FBRUMsV0FBYixrR0FBMEJDLE1BQTFCLDBFQUFrQ0MsTUFBbEMsSUFDQXJCLFdBREEsYUFDQUEsV0FEQSx3Q0FDQUEsV0FBVyxDQUFFbUIsV0FEYiw0RUFDQSxzQkFBMEJDLE1BRDFCLG1EQUNBLHVCQUFrQ0MsTUFGcEMsRUFHRTtNQUNBakUsR0FBRyxDQUFDa0UsS0FBSixDQUFVLDhCQUE4QkosV0FBVyxDQUFDQyxXQUFaLENBQXdCQyxNQUFoRTtNQUNBaEUsR0FBRyxDQUFDa0UsS0FBSixDQUFVLDhCQUE4QnRCLFdBQVcsQ0FBQ21CLFdBQVosQ0FBd0JDLE1BQWhFLEVBRkEsQ0FHQTs7TUFDQW5FLE9BQU8sQ0FBQ0ksSUFBUixDQUFhLENBQUMsQ0FBZDtJQUNELENBUkQsTUFRTztNQUNMRCxHQUFHLENBQUNtRSxJQUFKLENBQVMsZUFBVDtJQUNELENBWjJDLENBYzVDOzs7SUFDQSxNQUFNQyxjQUFjLEdBQUdOLFdBQVcsQ0FBQ2hCLE1BQVosRUFBdkI7SUFFQSxNQUFNdUIsV0FBVyxHQUFHMUIsZUFBZSxDQUFDQyxXQUFELENBQW5DLENBakI0QyxDQWtCNUM7O0lBQ0EwQixNQUFNLENBQUNDLElBQVAsQ0FBWXJELFNBQVMsQ0FBQ3NELEtBQXRCLEVBQTZCQyxPQUE3QixDQUFxQ0MsR0FBRyxJQUFJO01BQzFDLE9BQU94RCxTQUFTLENBQUNzRCxLQUFWLENBQWdCRSxHQUFoQixDQUFQO0lBQ0QsQ0FGRCxFQW5CNEMsQ0FzQjVDOztJQUNBbEIsTUFBTSxHQUFJdEMsU0FBUyxDQUFDbUQsV0FBRCxDQUFWLENBQWdDTSxPQUFoQyxDQUF3Q0MsSUFBeEMsQ0FDUEMsU0FETyxFQUVQVCxjQUZPLENBQVQsQ0F2QjRDLENBMkI1Qzs7SUFDQSxJQUFJVSxLQUFLLENBQUNDLE9BQU4sQ0FBY3hCLFVBQWQsQ0FBSixFQUErQjtNQUM3QkEsVUFBVSxDQUFDa0IsT0FBWCxDQUFtQk8sSUFBSSxJQUFJeEIsTUFBTSxDQUFDLEdBQUd3QixJQUFJLENBQUN2QixJQUFULENBQU4sQ0FBcUJ3QixJQUFyQixDQUEwQkQsSUFBSSxDQUFDM0UsT0FBL0IsQ0FBM0I7TUFDQWtELFVBQVUsR0FBR3NCLFNBQWI7SUFDRDtFQUNGOztFQUVELE1BQU1LLFNBQVMsR0FBRyxJQUFJQyx5QkFBSixFQUNoQjtFQUNBLEVBQ0UsR0FBR3BELGNBQWMsQ0FBQyxDQUFELENBQWQsQ0FBa0JtRCxTQUR2QjtJQUVFRSxhQUFhLEVBQUUsRUFDYix3QkFBR3JELGNBQWMsQ0FBQyxDQUFELENBQWpCLDhFQUFHLGlCQUFtQm1ELFNBQXRCLDBEQUFHLHNCQUE4QkUsYUFBakMsQ0FEYTtNQUViQyxnQkFBZ0IsRUFBRSxFQUNoQixHQUFHeEUsRUFEYTtRQUVoQk4sSUFBSSxFQUFFRCxhQUFBLENBQUtDO01BRks7SUFGTCxDQUZqQjtJQVNFK0UsZ0JBQWdCLEVBQUUsQ0FBQ0MsV0FBRCxFQUFjTCxTQUFkLEtBQTRCO01BQUE7O01BQzVDLElBQUksQ0FBQ0EsU0FBTCxFQUFnQjtRQUNkLE1BQU0sSUFBSU0sS0FBSixDQUFVLG1DQUFWLENBQU47TUFDRDs7TUFFRCxNQUFNQyxXQUFXLEdBQUcsQ0FDbEI1RixPQUFPLENBQUNNLEdBQVIsQ0FBWXVGLG1CQURNLEVBRWxCLEdBQUdwQixNQUFNLENBQUNDLElBQVAsb0RBQVl4QyxjQUFjLENBQUMsQ0FBRCxDQUFkLENBQWtCbUQsU0FBOUIsMkRBQVksdUJBQTZCUyxLQUF6QyxvQ0FBa0QsRUFBbEQsQ0FGZSxDQUFwQixDQUw0QyxDQVM1Qzs7TUFDQSxrQkFBQVQsU0FBUyxDQUFDVSxHQUFWLGtFQUFlQyxHQUFmLENBQ0UsSUFBSUMsTUFBSixDQUFZLE9BQU1MLFdBQVcsQ0FBQ2xGLElBQVosQ0FBaUIsR0FBakIsQ0FBc0IsR0FBeEMsQ0FERixFQUVFMEMsWUFBWSxDQUFDLGdCQUFnQkUsR0FBaEIsRUFBMEJDLEdBQTFCLEVBQW9DO1FBQy9DLElBQUlELEdBQUcsQ0FBQzRDLEdBQUosQ0FBUUMsUUFBUixDQUFpQixhQUFqQixDQUFKLEVBQXFDO1VBQ25DNUMsR0FBRyxDQUFDNkMsVUFBSixHQUFpQixHQUFqQjtVQUNBN0MsR0FBRyxDQUFDOEMsU0FBSixDQUFjLGNBQWQsRUFBOEIsV0FBOUI7VUFDQTlDLEdBQUcsQ0FBQytDLElBQUosQ0FBUyxXQUFUO1VBQ0E7UUFDRDs7UUFDRC9DLEdBQUcsQ0FBQ2dELE1BQUosQ0FBV0MsRUFBWCxDQUFjLE9BQWQsRUFBd0JuQyxLQUFELElBQW9CO1VBQ3pDbkUsT0FBTyxDQUFDbUUsS0FBUixDQUFjLE9BQWQsRUFBdUJBLEtBQXZCO1FBQ0QsQ0FGRDtRQUlBLE1BQU1WLE1BQU0sQ0FBQ0wsR0FBRCxFQUFNQyxHQUFOLENBQVo7TUFDRCxDQVpXLENBRmQ7TUFpQkEsT0FBT21DLFdBQVA7SUFDRDtFQXJDSCxDQUZnQixFQXlDaEJqRCxRQXpDZ0IsQ0FBbEI7O0VBMkNBLE1BQU1nRSxTQUFTLEdBQUcsWUFBWTtJQUM1QixNQUFNcEIsU0FBUyxDQUFDcUIsS0FBVixFQUFOO0lBQ0FyQixTQUFTLENBQUM1QyxRQUFWLENBQW1Ca0UsS0FBbkIsQ0FBeUJDLElBQXpCLENBQThCQyxHQUE5QixDQUNFLGVBREYsRUFFR0MsVUFBRCxJQUFvRDtNQUNsRCxJQUFJLENBQUNBLFVBQUwsRUFBaUI7UUFDZjNHLEdBQUcsQ0FBQ2tFLEtBQUosQ0FBVSxnQkFBVjtRQUNBckUsT0FBTyxDQUFDSSxJQUFSLENBQWEsQ0FBQyxDQUFkO01BQ0Q7O01BRUQsSUFBSSxDQUFDcUUsTUFBTSxDQUFDc0MsTUFBUCxDQUFjRCxVQUFkLEVBQTBCLE9BQTFCLENBQUwsRUFBeUM7O01BQ3pDLElBQUtBLFVBQUQsQ0FBbUM5QyxLQUFuQyxDQUF5Q0ksTUFBekMsR0FBa0QsQ0FBdEQsRUFBeUQ7UUFDdkQsSUFBSTtVQUNGTCxZQUFZLENBQUUrQyxVQUFELENBQW1DOUMsS0FBcEMsQ0FBWjtRQUNELENBRkQsQ0FFRSxPQUFPZ0QsQ0FBUCxFQUFlO1VBQ2Y3RyxHQUFHLENBQUNrRSxLQUFKLENBQVUsaUNBQVY7VUFDQSxNQUFNMkMsQ0FBTjtRQUNEO01BQ0YsQ0FQRCxNQU9PO1FBQ0w3RyxHQUFHLENBQUNrRSxLQUFKLENBQVUsd0JBQVY7TUFDRDtJQUNGLENBbkJIO0VBcUJELENBdkJEOztFQXdCQSxNQUFNNEMsVUFBVSxHQUFHLFlBQVk7SUFDN0I5RyxHQUFHLENBQUNtRSxJQUFKLENBQVMsb0JBQVQ7SUFDQSxNQUFNZSxTQUFTLENBQUM2QixJQUFWLEVBQU47SUFDQS9HLEdBQUcsQ0FBQ21FLElBQUosQ0FBUyxlQUFUO0VBQ0QsQ0FKRDs7RUFNQXRFLE9BQU8sQ0FBQ3dHLEVBQVIsQ0FBVyxRQUFYLEVBQXFCLE1BQU07SUFDekJyRyxHQUFHLENBQUNnSCxJQUFKLENBQVMsMENBQVQ7SUFDQUYsVUFBVTtJQUNWakgsT0FBTyxDQUFDSSxJQUFSLENBQWEsQ0FBQyxDQUFkO0VBQ0QsQ0FKRDtFQU1BcUcsU0FBUztBQUNWIn0=
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import type { Policy } from './csp';
2
3
  declare type Props = {
3
4
  children: React.ReactNode;
4
5
  assets: {
@@ -7,16 +8,20 @@ declare type Props = {
7
8
  rel?: string;
8
9
  }[];
9
10
  head: React.ReactNode;
11
+ scripts: React.ReactNode;
10
12
  title: string;
11
13
  rootId: string;
12
14
  charSet: string;
15
+ csPolicy?: Policy;
16
+ nonce?: string | undefined;
13
17
  };
14
- declare function Document({ assets, head, children, title, rootId, charSet, }: Props): JSX.Element;
18
+ declare function Document({ assets, head, children, title, rootId, charSet, csPolicy, nonce, scripts, }: Props): JSX.Element;
15
19
  declare namespace Document {
16
20
  var defaultProps: {
17
21
  head: JSX.Element;
18
22
  charSet: string;
19
23
  rootId: string;
24
+ scripts: null;
20
25
  };
21
26
  }
22
27
  export default Document;
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentComponent.d.ts","sourceRoot":"","sources":["../../src/spouts/DocumentComponent.tsx"],"names":[],"mappings":";AAAA,aAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,iBAAwB,QAAQ,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAE,KAAK,eA2BP;kBAlCuB,QAAQ;;;;;;;eAAR,QAAQ"}
1
+ {"version":3,"file":"DocumentComponent.d.ts","sourceRoot":"","sources":["../../src/spouts/DocumentComponent.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAGpC,aAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF,iBAAwB,QAAQ,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,EACP,QAAQ,EACR,KAAK,EACL,OAAO,GACR,EAAE,KAAK,eAwCP;kBAlDuB,QAAQ;;;;;;;;eAAR,QAAQ"}
@@ -9,6 +9,8 @@ var _jsx2 = _interopRequireDefault(require("@babel/runtime/helpers/jsx"));
9
9
 
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
 
12
+ var _csp = require("./csp");
13
+
12
14
  var _process$env$WEBPACK_;
13
15
 
14
16
  function Document({
@@ -17,21 +19,41 @@ function Document({
17
19
  children,
18
20
  title,
19
21
  rootId,
20
- charSet
22
+ charSet,
23
+ csPolicy,
24
+ nonce,
25
+ scripts
21
26
  }) {
27
+ let cspMeta = null;
28
+
29
+ if (csPolicy) {
30
+ // add nonce to policy
31
+ const policy = { ...csPolicy
32
+ };
33
+
34
+ if (nonce) {
35
+ if (typeof policy['script-src'] === 'string') {
36
+ policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
37
+ } else {
38
+ policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
39
+ }
40
+ }
41
+
42
+ cspMeta = /*#__PURE__*/(0, _jsx2.default)("meta", {
43
+ httpEquiv: "Content-Security-Policy",
44
+ content: (0, _csp.buildPolicy)(policy)
45
+ });
46
+ }
47
+
22
48
  return /*#__PURE__*/(0, _jsx2.default)("html", {}, void 0, /*#__PURE__*/(0, _jsx2.default)("head", {}, void 0, /*#__PURE__*/(0, _jsx2.default)("meta", {
23
49
  charSet: charSet
24
- }), head, assets.map((asset, i) => /*#__PURE__*/_react.default.createElement("link", {
50
+ }), cspMeta, head, assets.map((asset, i) => /*#__PURE__*/_react.default.createElement("link", {
25
51
  key: i,
26
52
  rel: "preload",
27
53
  ...asset
28
54
  })), /*#__PURE__*/(0, _jsx2.default)("title", {}, void 0, title)), /*#__PURE__*/(0, _jsx2.default)("body", {}, void 0, /*#__PURE__*/(0, _jsx2.default)("div", {
29
55
  id: rootId
30
- }, void 0, children), /*#__PURE__*/(0, _jsx2.default)("script", {
31
- dangerouslySetInnerHTML: {
32
- __html: `assetManifest = ${JSON.stringify(assets)};`
33
- }
34
- }), assets.filter(({
56
+ }, void 0, children), scripts, assets.filter(({
35
57
  href
36
58
  }) => href.endsWith('.js')).map(({
37
59
  href
@@ -50,6 +72,7 @@ Document.defaultProps = {
50
72
  href: `${(_process$env$WEBPACK_ = process.env.WEBPACK_PUBLIC_PATH) != null ? _process$env$WEBPACK_ : '/'}favicon.ico`
51
73
  })),
52
74
  charSet: 'utf-8',
53
- rootId: 'anansi-root'
75
+ rootId: 'anansi-root',
76
+ scripts: null
54
77
  };
55
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsIm1hcCIsImFzc2V0IiwiaSIsIl9faHRtbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJmaWx0ZXIiLCJocmVmIiwiZW5kc1dpdGgiLCJkZWZhdWx0UHJvcHMiLCJwcm9jZXNzIiwiZW52IiwiV0VCUEFDS19QVUJMSUNfUEFUSCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvRG9jdW1lbnRDb21wb25lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFzc2V0czogeyBocmVmOiBzdHJpbmc7IGFzPzogc3RyaW5nOyByZWw/OiBzdHJpbmcgfVtdO1xuICBoZWFkOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZDogc3RyaW5nO1xuICBjaGFyU2V0OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEb2N1bWVudCh7XG4gIGFzc2V0cyxcbiAgaGVhZCxcbiAgY2hpbGRyZW4sXG4gIHRpdGxlLFxuICByb290SWQsXG4gIGNoYXJTZXQsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxodG1sPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJTZXQ9e2NoYXJTZXR9IC8+XG4gICAgICAgIHtoZWFkfVxuICAgICAgICB7YXNzZXRzLm1hcCgoYXNzZXQsIGkpID0+IChcbiAgICAgICAgICA8bGluayBrZXk9e2l9IHJlbD1cInByZWxvYWRcIiB7Li4uYXNzZXR9IC8+XG4gICAgICAgICkpfVxuICAgICAgICA8dGl0bGU+e3RpdGxlfTwvdGl0bGU+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPGRpdiBpZD17cm9vdElkfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgIHsvKiB0aGlzIGVuc3VyZXMgdGhlIGNsaWVudCBjYW4gaHlkcmF0ZSB0aGUgYXNzZXRzIHByb3AgKi99XG4gICAgICAgIDxzY3JpcHRcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgX19odG1sOiBgYXNzZXRNYW5pZmVzdCA9ICR7SlNPTi5zdHJpbmdpZnkoYXNzZXRzKX07YCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICB7YXNzZXRzXG4gICAgICAgICAgLmZpbHRlcigoeyBocmVmIH0pID0+IGhyZWYuZW5kc1dpdGgoJy5qcycpKVxuICAgICAgICAgIC5tYXAoKHsgaHJlZiB9LCBpKSA9PiAoXG4gICAgICAgICAgICA8c2NyaXB0IGtleT17aX0gc3JjPXtocmVmfSBhc3luYyAvPlxuICAgICAgICAgICkpfVxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbkRvY3VtZW50LmRlZmF1bHRQcm9wcyA9IHtcbiAgaGVhZDogKFxuICAgIDw+XG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxuICAgICAgPGxpbmtcbiAgICAgICAgcmVsPVwic2hvcnRjdXQgaWNvblwiXG4gICAgICAgIGhyZWY9e2Ake3Byb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggPz8gJy8nfWZhdmljb24uaWNvYH1cbiAgICAgIC8+XG4gICAgPC8+XG4gICksXG4gIGNoYXJTZXQ6ICd1dGYtOCcsXG4gIHJvb3RJZDogJ2FuYW5zaS1yb290Jyxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFTZSxTQUFTQSxRQUFULENBQWtCO0VBQy9CQyxNQUQrQjtFQUUvQkMsSUFGK0I7RUFHL0JDLFFBSCtCO0VBSS9CQyxLQUorQjtFQUsvQkMsTUFMK0I7RUFNL0JDO0FBTitCLENBQWxCLEVBT0w7RUFDUixvQkFDRSxvREFDRSxvREFDRTtJQUFNLE9BQU8sRUFBRUE7RUFBZixFQURGLEVBRUdKLElBRkgsRUFHR0QsTUFBTSxDQUFDTSxHQUFQLENBQVcsQ0FBQ0MsS0FBRCxFQUFRQyxDQUFSLGtCQUNWO0lBQU0sR0FBRyxFQUFFQSxDQUFYO0lBQWMsR0FBRyxFQUFDLFNBQWxCO0lBQUEsR0FBZ0NEO0VBQWhDLEVBREQsQ0FISCxlQU1FLHdDQUFRSixLQUFSLENBTkYsQ0FERixlQVNFLG9EQUNFO0lBQUssRUFBRSxFQUFFQztFQUFULFdBQWtCRixRQUFsQixDQURGLGVBR0U7SUFDRSx1QkFBdUIsRUFBRTtNQUN2Qk8sTUFBTSxFQUFHLG1CQUFrQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVYLE1BQWYsQ0FBdUI7SUFEM0I7RUFEM0IsRUFIRixFQVFHQSxNQUFNLENBQ0pZLE1BREYsQ0FDUyxDQUFDO0lBQUVDO0VBQUYsQ0FBRCxLQUFjQSxJQUFJLENBQUNDLFFBQUwsQ0FBYyxLQUFkLENBRHZCLEVBRUVSLEdBRkYsQ0FFTSxDQUFDO0lBQUVPO0VBQUYsQ0FBRCxFQUFXTCxDQUFYLGtCQUNIO0lBQWdCLEdBQUcsRUFBRUssSUFBckI7SUFBMkIsS0FBSztFQUFoQyxHQUFhTCxDQUFiLENBSEgsQ0FSSCxDQVRGLENBREY7QUEwQkQ7O0FBQ0RULFFBQVEsQ0FBQ2dCLFlBQVQsR0FBd0I7RUFDdEJkLElBQUksZUFDRix5RUFDRTtJQUFNLElBQUksRUFBQyxVQUFYO0lBQXNCLE9BQU8sRUFBQztFQUE5QixFQURGLGVBRUU7SUFDRSxHQUFHLEVBQUMsZUFETjtJQUVFLElBQUksRUFBRyxHQUFELHlCQUFHZSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsbUJBQWYsb0NBQXNDLEdBQUk7RUFGbEQsRUFGRixDQUZvQjtFQVV0QmIsT0FBTyxFQUFFLE9BVmE7RUFXdEJELE1BQU0sRUFBRTtBQVhjLENBQXhCIn0=
78
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsImNzUG9saWN5Iiwibm9uY2UiLCJzY3JpcHRzIiwiY3NwTWV0YSIsInBvbGljeSIsImJ1aWxkUG9saWN5IiwibWFwIiwiYXNzZXQiLCJpIiwiZmlsdGVyIiwiaHJlZiIsImVuZHNXaXRoIiwiZGVmYXVsdFByb3BzIiwicHJvY2VzcyIsImVudiIsIldFQlBBQ0tfUFVCTElDX1BBVEgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL0RvY3VtZW50Q29tcG9uZW50LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBvbGljeSB9IGZyb20gJy4vY3NwJztcbmltcG9ydCB7IGJ1aWxkUG9saWN5IH0gZnJvbSAnLi9jc3AnO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhc3NldHM6IHsgaHJlZjogc3RyaW5nOyBhcz86IHN0cmluZzsgcmVsPzogc3RyaW5nIH1bXTtcbiAgaGVhZDogUmVhY3QuUmVhY3ROb2RlO1xuICBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZDogc3RyaW5nO1xuICBjaGFyU2V0OiBzdHJpbmc7XG4gIGNzUG9saWN5PzogUG9saWN5O1xuICBub25jZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50KHtcbiAgYXNzZXRzLFxuICBoZWFkLFxuICBjaGlsZHJlbixcbiAgdGl0bGUsXG4gIHJvb3RJZCxcbiAgY2hhclNldCxcbiAgY3NQb2xpY3ksXG4gIG5vbmNlLFxuICBzY3JpcHRzLFxufTogUHJvcHMpIHtcbiAgbGV0IGNzcE1ldGE6IG51bGwgfCBSZWFjdC5SZWFjdE5vZGUgPSBudWxsO1xuICBpZiAoY3NQb2xpY3kpIHtcbiAgICAvLyBhZGQgbm9uY2UgdG8gcG9saWN5XG4gICAgY29uc3QgcG9saWN5ID0ge1xuICAgICAgLi4uY3NQb2xpY3ksXG4gICAgfTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgIGlmICh0eXBlb2YgcG9saWN5WydzY3JpcHQtc3JjJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gW3BvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9saWN5WydzY3JpcHQtc3JjJ10gPSBbLi4ucG9saWN5WydzY3JpcHQtc3JjJ10sIGAnbm9uY2UtJHtub25jZX0nYF07XG4gICAgICB9XG4gICAgfVxuICAgIGNzcE1ldGEgPSAoXG4gICAgICA8bWV0YSBodHRwRXF1aXY9XCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiIGNvbnRlbnQ9e2J1aWxkUG9saWN5KHBvbGljeSl9IC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxodG1sPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJTZXQ9e2NoYXJTZXR9IC8+XG4gICAgICAgIHtjc3BNZXRhfVxuICAgICAgICB7aGVhZH1cbiAgICAgICAge2Fzc2V0cy5tYXAoKGFzc2V0LCBpKSA9PiAoXG4gICAgICAgICAgPGxpbmsga2V5PXtpfSByZWw9XCJwcmVsb2FkXCIgey4uLmFzc2V0fSAvPlxuICAgICAgICApKX1cbiAgICAgICAgPHRpdGxlPnt0aXRsZX08L3RpdGxlPlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDxkaXYgaWQ9e3Jvb3RJZH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICB7c2NyaXB0c31cbiAgICAgICAge2Fzc2V0c1xuICAgICAgICAgIC5maWx0ZXIoKHsgaHJlZiB9KSA9PiBocmVmLmVuZHNXaXRoKCcuanMnKSlcbiAgICAgICAgICAubWFwKCh7IGhyZWYgfSwgaSkgPT4gKFxuICAgICAgICAgICAgPHNjcmlwdCBrZXk9e2l9IHNyYz17aHJlZn0gYXN5bmMgLz5cbiAgICAgICAgICApKX1cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gICk7XG59XG5Eb2N1bWVudC5kZWZhdWx0UHJvcHMgPSB7XG4gIGhlYWQ6IChcbiAgICA8PlxuICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCIgLz5cbiAgICAgIDxsaW5rXG4gICAgICAgIHJlbD1cInNob3J0Y3V0IGljb25cIlxuICAgICAgICBocmVmPXtgJHtwcm9jZXNzLmVudi5XRUJQQUNLX1BVQkxJQ19QQVRIID8/ICcvJ31mYXZpY29uLmljb2B9XG4gICAgICAvPlxuICAgIDwvPlxuICApLFxuICBjaGFyU2V0OiAndXRmLTgnLFxuICByb290SWQ6ICdhbmFuc2ktcm9vdCcsXG4gIHNjcmlwdHM6IG51bGwsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOzs7O0FBY2UsU0FBU0EsUUFBVCxDQUFrQjtFQUMvQkMsTUFEK0I7RUFFL0JDLElBRitCO0VBRy9CQyxRQUgrQjtFQUkvQkMsS0FKK0I7RUFLL0JDLE1BTCtCO0VBTS9CQyxPQU4rQjtFQU8vQkMsUUFQK0I7RUFRL0JDLEtBUitCO0VBUy9CQztBQVQrQixDQUFsQixFQVVMO0VBQ1IsSUFBSUMsT0FBK0IsR0FBRyxJQUF0Qzs7RUFDQSxJQUFJSCxRQUFKLEVBQWM7SUFDWjtJQUNBLE1BQU1JLE1BQU0sR0FBRyxFQUNiLEdBQUdKO0lBRFUsQ0FBZjs7SUFHQSxJQUFJQyxLQUFKLEVBQVc7TUFDVCxJQUFJLE9BQU9HLE1BQU0sQ0FBQyxZQUFELENBQWIsS0FBZ0MsUUFBcEMsRUFBOEM7UUFDNUNBLE1BQU0sQ0FBQyxZQUFELENBQU4sR0FBdUIsQ0FBQ0EsTUFBTSxDQUFDLFlBQUQsQ0FBUCxFQUF3QixVQUFTSCxLQUFNLEdBQXZDLENBQXZCO01BQ0QsQ0FGRCxNQUVPO1FBQ0xHLE1BQU0sQ0FBQyxZQUFELENBQU4sR0FBdUIsQ0FBQyxHQUFHQSxNQUFNLENBQUMsWUFBRCxDQUFWLEVBQTJCLFVBQVNILEtBQU0sR0FBMUMsQ0FBdkI7TUFDRDtJQUNGOztJQUNERSxPQUFPLGdCQUNMO01BQU0sU0FBUyxFQUFDLHlCQUFoQjtNQUEwQyxPQUFPLEVBQUUsSUFBQUUsZ0JBQUEsRUFBWUQsTUFBWjtJQUFuRCxFQURGO0VBR0Q7O0VBQ0Qsb0JBQ0Usb0RBQ0Usb0RBQ0U7SUFBTSxPQUFPLEVBQUVMO0VBQWYsRUFERixFQUVHSSxPQUZILEVBR0dSLElBSEgsRUFJR0QsTUFBTSxDQUFDWSxHQUFQLENBQVcsQ0FBQ0MsS0FBRCxFQUFRQyxDQUFSLGtCQUNWO0lBQU0sR0FBRyxFQUFFQSxDQUFYO0lBQWMsR0FBRyxFQUFDLFNBQWxCO0lBQUEsR0FBZ0NEO0VBQWhDLEVBREQsQ0FKSCxlQU9FLHdDQUFRVixLQUFSLENBUEYsQ0FERixlQVVFLG9EQUNFO0lBQUssRUFBRSxFQUFFQztFQUFULFdBQWtCRixRQUFsQixDQURGLEVBRUdNLE9BRkgsRUFHR1IsTUFBTSxDQUNKZSxNQURGLENBQ1MsQ0FBQztJQUFFQztFQUFGLENBQUQsS0FBY0EsSUFBSSxDQUFDQyxRQUFMLENBQWMsS0FBZCxDQUR2QixFQUVFTCxHQUZGLENBRU0sQ0FBQztJQUFFSTtFQUFGLENBQUQsRUFBV0YsQ0FBWCxrQkFDSDtJQUFnQixHQUFHLEVBQUVFLElBQXJCO0lBQTJCLEtBQUs7RUFBaEMsR0FBYUYsQ0FBYixDQUhILENBSEgsQ0FWRixDQURGO0FBc0JEOztBQUNEZixRQUFRLENBQUNtQixZQUFULEdBQXdCO0VBQ3RCakIsSUFBSSxlQUNGLHlFQUNFO0lBQU0sSUFBSSxFQUFDLFVBQVg7SUFBc0IsT0FBTyxFQUFDO0VBQTlCLEVBREYsZUFFRTtJQUNFLEdBQUcsRUFBQyxlQUROO0lBRUUsSUFBSSxFQUFHLEdBQUQseUJBQUdrQixPQUFPLENBQUNDLEdBQVIsQ0FBWUMsbUJBQWYsb0NBQXNDLEdBQUk7RUFGbEQsRUFGRixDQUZvQjtFQVV0QmhCLE9BQU8sRUFBRSxPQVZhO0VBV3RCRCxNQUFNLEVBQUUsYUFYYztFQVl0QkksT0FBTyxFQUFFO0FBWmEsQ0FBeEIifQ==
@@ -0,0 +1,5 @@
1
+ export interface Policy {
2
+ [directive: string]: string | string[];
3
+ }
4
+ export declare function buildPolicy(policyObj: Policy): string;
5
+ //# sourceMappingURL=csp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csp.d.ts","sourceRoot":"","sources":["../../src/spouts/csp.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;CACxC;AAGD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,UAmB5C"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.buildPolicy = buildPolicy;
5
+
6
+ // TODO: memoize this
7
+ function buildPolicy(policyObj) {
8
+ return Object.keys(policyObj).map(key => {
9
+ const val = Array.isArray(policyObj[key]) ? [...new Set(policyObj[key]).values()].filter(v => v).join(' ') : policyObj[key]; // move strict dynamic to the end of the policy if it exists to be backwards compatible with csp2
10
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic
11
+
12
+ if (typeof val === 'string' && val.includes("'strict-dynamic'")) {
13
+ const newVal = `${val.replace(/\s?'strict-dynamic'\s?/gi, ' ').trim()} 'strict-dynamic'`;
14
+ return `${key} ${newVal}`;
15
+ }
16
+
17
+ return `${key} ${val}`;
18
+ }).join('; ');
19
+ }
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFBvbGljeSIsInBvbGljeU9iaiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJTZXQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJ2Iiwiam9pbiIsImluY2x1ZGVzIiwibmV3VmFsIiwicmVwbGFjZSIsInRyaW0iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2NzcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFBvbGljeSB7XG4gIFtkaXJlY3RpdmU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG4vLyBUT0RPOiBtZW1vaXplIHRoaXNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbGljeShwb2xpY3lPYmo6IFBvbGljeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocG9saWN5T2JqKVxuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IEFycmF5LmlzQXJyYXkocG9saWN5T2JqW2tleV0pXG4gICAgICAgID8gWy4uLm5ldyBTZXQocG9saWN5T2JqW2tleV0pLnZhbHVlcygpXS5maWx0ZXIodiA9PiB2KS5qb2luKCcgJylcbiAgICAgICAgOiBwb2xpY3lPYmpba2V5XTtcblxuICAgICAgLy8gbW92ZSBzdHJpY3QgZHluYW1pYyB0byB0aGUgZW5kIG9mIHRoZSBwb2xpY3kgaWYgaXQgZXhpc3RzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggY3NwMlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3NjcmlwdC1zcmMjc3RyaWN0LWR5bmFtaWNcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoXCInc3RyaWN0LWR5bmFtaWMnXCIpKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGAke3ZhbFxuICAgICAgICAgIC5yZXBsYWNlKC9cXHM/J3N0cmljdC1keW5hbWljJ1xccz8vZ2ksICcgJylcbiAgICAgICAgICAudHJpbSgpfSAnc3RyaWN0LWR5bmFtaWMnYDtcbiAgICAgICAgcmV0dXJuIGAke2tleX0gJHtuZXdWYWx9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2tleX0gJHt2YWx9YDtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUlBO0FBQ08sU0FBU0EsV0FBVCxDQUFxQkMsU0FBckIsRUFBd0M7RUFDN0MsT0FBT0MsTUFBTSxDQUFDQyxJQUFQLENBQVlGLFNBQVosRUFDSkcsR0FESSxDQUNBQyxHQUFHLElBQUk7SUFDVixNQUFNQyxHQUFHLEdBQUdDLEtBQUssQ0FBQ0MsT0FBTixDQUFjUCxTQUFTLENBQUNJLEdBQUQsQ0FBdkIsSUFDUixDQUFDLEdBQUcsSUFBSUksR0FBSixDQUFRUixTQUFTLENBQUNJLEdBQUQsQ0FBakIsRUFBd0JLLE1BQXhCLEVBQUosRUFBc0NDLE1BQXRDLENBQTZDQyxDQUFDLElBQUlBLENBQWxELEVBQXFEQyxJQUFyRCxDQUEwRCxHQUExRCxDQURRLEdBRVJaLFNBQVMsQ0FBQ0ksR0FBRCxDQUZiLENBRFUsQ0FLVjtJQUNBOztJQUNBLElBQUksT0FBT0MsR0FBUCxLQUFlLFFBQWYsSUFBMkJBLEdBQUcsQ0FBQ1EsUUFBSixDQUFhLGtCQUFiLENBQS9CLEVBQWlFO01BQy9ELE1BQU1DLE1BQU0sR0FBSSxHQUFFVCxHQUFHLENBQ2xCVSxPQURlLENBQ1AsMEJBRE8sRUFDcUIsR0FEckIsRUFFZkMsSUFGZSxFQUVSLG1CQUZWO01BR0EsT0FBUSxHQUFFWixHQUFJLElBQUdVLE1BQU8sRUFBeEI7SUFDRDs7SUFFRCxPQUFRLEdBQUVWLEdBQUksSUFBR0MsR0FBSSxFQUFyQjtFQUNELENBaEJJLEVBaUJKTyxJQWpCSSxDQWlCQyxJQWpCRCxDQUFQO0FBa0JEIn0=
@@ -8,6 +8,6 @@ declare type NeededProps = {
8
8
  export default function documentSpout(options: {
9
9
  head?: React.ReactNode;
10
10
  title: string;
11
- }): <T extends NeededProps>(next: () => Promise<T>) => () => Promise<T>;
11
+ }): <T extends NeededProps>(next: (initData: Record<string, unknown>) => Promise<T>) => (initData: Record<string, unknown>) => Promise<T>;
12
12
  export {};
13
13
  //# sourceMappingURL=document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/spouts/document.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,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;CACf,uEAQA"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/spouts/document.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,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;CACf,4CAEoB,OAAO,MAAM,EAAE,OAAO,CAAC,+BAEhB,OAAO,MAAM,EAAE,OAAO,CAAC,gBAMlD"}
@@ -5,10 +5,10 @@ exports.default = documentSpout;
5
5
 
6
6
  function documentSpout(options) {
7
7
  return function (next) {
8
- return async () => {
9
- const nextProps = await next();
8
+ return async initData => {
9
+ const nextProps = await next(initData);
10
10
  return nextProps;
11
11
  };
12
12
  };
13
13
  }
14
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudFNwb3V0Iiwib3B0aW9ucyIsIm5leHQiLCJuZXh0UHJvcHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2RvY3VtZW50LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gJ0BhbmFuc2kvcm91dGVyJztcblxuaW1wb3J0IHR5cGUgeyBSZXNvbHZlUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcblxudHlwZSBOZWVkZWRQcm9wcyA9IHtcbiAgbWF0Y2hlZFJvdXRlczogUm91dGU8YW55PltdO1xuICB0aXRsZT86IHN0cmluZztcbn0gJiBSZXNvbHZlUHJvcHM7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRvY3VtZW50U3BvdXQob3B0aW9uczoge1xuICBoZWFkPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xufSkge1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBOZWVkZWRQcm9wcz4obmV4dDogKCkgPT4gUHJvbWlzZTxUPikge1xuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KCk7XG5cbiAgICAgIHJldHVybiBuZXh0UHJvcHM7XG4gICAgfTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFVZSxTQUFTQSxhQUFULENBQXVCQyxPQUF2QixFQUdaO0VBQ0QsT0FBTyxVQUFpQ0MsSUFBakMsRUFBeUQ7SUFDOUQsT0FBTyxZQUFZO01BQ2pCLE1BQU1DLFNBQVMsR0FBRyxNQUFNRCxJQUFJLEVBQTVCO01BRUEsT0FBT0MsU0FBUDtJQUNELENBSkQ7RUFLRCxDQU5EO0FBT0QifQ==
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudFNwb3V0Iiwib3B0aW9ucyIsIm5leHQiLCJpbml0RGF0YSIsIm5leHRQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvZG9jdW1lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuXG50eXBlIE5lZWRlZFByb3BzID0ge1xuICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxhbnk+W107XG4gIHRpdGxlPzogc3RyaW5nO1xufSAmIFJlc29sdmVQcm9wcztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZG9jdW1lbnRTcG91dChvcHRpb25zOiB7XG4gIGhlYWQ/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIE5lZWRlZFByb3BzPihcbiAgICBuZXh0OiAoaW5pdERhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBQcm9taXNlPFQ+LFxuICApIHtcbiAgICByZXR1cm4gYXN5bmMgKGluaXREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChpbml0RGF0YSk7XG5cbiAgICAgIHJldHVybiBuZXh0UHJvcHM7XG4gICAgfTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFVZSxTQUFTQSxhQUFULENBQXVCQyxPQUF2QixFQUdaO0VBQ0QsT0FBTyxVQUNMQyxJQURLLEVBRUw7SUFDQSxPQUFPLE1BQU9DLFFBQVAsSUFBNkM7TUFDbEQsTUFBTUMsU0FBUyxHQUFHLE1BQU1GLElBQUksQ0FBQ0MsUUFBRCxDQUE1QjtNQUVBLE9BQU9DLFNBQVA7SUFDRCxDQUpEO0VBS0QsQ0FSRDtBQVNEIn0=
@@ -1,15 +1,18 @@
1
1
  import React from 'react';
2
2
  import type { Route } from '@anansi/router';
3
3
  import type { ServerProps, ResolveProps } from './types';
4
+ import type { Policy } from './csp';
4
5
  declare type NeededProps = {
5
6
  matchedRoutes: Route<any>[];
6
7
  title?: string;
8
+ scripts?: React.ReactNode[];
7
9
  } & ResolveProps;
8
10
  export default function DocumentSpout(options: {
9
11
  head?: React.ReactNode;
10
12
  title: string;
11
13
  rootId?: string;
12
14
  charSet?: string;
15
+ csPolicy?: Policy;
13
16
  }): <T extends NeededProps>(next: (props: ServerProps) => Promise<T>) => (props: ServerProps) => Promise<T & {
14
17
  app: JSX.Element;
15
18
  }>;
@@ -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;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,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,yCAEiB,WAAW,4BAEJ,WAAW;;GAkEnC"}
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;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAGpC,aAAK,WAAW,GAAG;IACjB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;CAC7B,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,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,yCAEiB,WAAW,4BAEJ,WAAW;;GAqEnC"}