@anansi/core 0.14.32 → 0.14.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/client.js +23 -12
- package/dist/client.js.map +1 -1
- package/dist/server.js +46 -95
- package/dist/server.js.map +1 -1
- package/lib/laySpouts.d.ts.map +1 -1
- package/lib/laySpouts.js +2 -2
- package/lib/spouts/json.d.ts +1 -1
- package/lib/spouts/json.d.ts.map +1 -1
- package/lib/spouts/json.js +21 -9
- package/lib/spouts/json.server.d.ts.map +1 -1
- package/lib/spouts/json.server.js +21 -41
- package/lib/spouts/restHooks.d.ts +1 -1
- package/lib/spouts/restHooks.d.ts.map +1 -1
- package/lib/spouts/restHooks.js +3 -4
- package/lib/spouts/restHooks.server.d.ts +2 -0
- package/lib/spouts/restHooks.server.d.ts.map +1 -1
- package/lib/spouts/restHooks.server.js +5 -4
- package/package.json +7 -7
- package/src/laySpouts.tsx +1 -1
- package/src/spouts/json.server.tsx +18 -34
- package/src/spouts/json.tsx +22 -8
- package/src/spouts/restHooks.server.tsx +6 -7
- package/src/spouts/restHooks.tsx +4 -10
- package/lib/spouts/rhHelp.d.ts +0 -8
- package/lib/spouts/rhHelp.d.ts.map +0 -1
- package/lib/spouts/rhHelp.js +0 -32
- package/src/spouts/rhHelp.tsx +0 -37
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
### [0.14.34](https://github.com/ntucker/anansi/compare/@anansi/core@0.14.33...@anansi/core@0.14.34) (2022-11-08)
|
|
7
|
+
|
|
8
|
+
### 📦 Package
|
|
9
|
+
|
|
10
|
+
* Update JS test packages to ^29.3.0 ([#1746](https://github.com/ntucker/anansi/issues/1746)) ([33a1331](https://github.com/ntucker/anansi/commit/33a1331bb1e595727fcaeaf7ac06b83122f34ca2))
|
|
11
|
+
|
|
12
|
+
### [0.14.33](https://github.com/ntucker/anansi/compare/@anansi/core@0.14.32...@anansi/core@0.14.33) (2022-11-06)
|
|
13
|
+
|
|
14
|
+
### 💅 Enhancement
|
|
15
|
+
|
|
16
|
+
* Better streaming SSR support ([9bc8c77](https://github.com/ntucker/anansi/commit/9bc8c77747b7e111038b75316b4d3216afb1289f))
|
|
17
|
+
|
|
18
|
+
### 📦 Package
|
|
19
|
+
|
|
20
|
+
* Update babel packages ([#1736](https://github.com/ntucker/anansi/issues/1736)) ([2ec01f5](https://github.com/ntucker/anansi/commit/2ec01f585dc90f5d366e7d1626a3f8b1cf7b752c))
|
|
21
|
+
|
|
6
22
|
### [0.14.32](https://github.com/ntucker/anansi/compare/@anansi/core@0.14.31...@anansi/core@0.14.32) (2022-11-03)
|
|
7
23
|
|
|
8
24
|
**Note:** Version bump only for package @anansi/core
|
package/dist/client.js
CHANGED
|
@@ -92,12 +92,11 @@ function restHooksSpout(options = {
|
|
|
92
92
|
getManagers: () => [new core_namespaceObject.NetworkManager()]
|
|
93
93
|
}) {
|
|
94
94
|
return next => async props => {
|
|
95
|
-
|
|
96
|
-
const data =
|
|
95
|
+
const nextProps = await next(props);
|
|
96
|
+
const data = await props.getInitialData('resthooks');
|
|
97
97
|
if ( true && !data) {
|
|
98
98
|
console.error('Rest Hooks init data not found');
|
|
99
99
|
}
|
|
100
|
-
const nextProps = await next(props);
|
|
101
100
|
return {
|
|
102
101
|
...nextProps,
|
|
103
102
|
app: /*#__PURE__*/external_react_default().createElement(core_namespaceObject.CacheProvider, {
|
|
@@ -106,7 +105,7 @@ function restHooksSpout(options = {
|
|
|
106
105
|
__self: this,
|
|
107
106
|
__source: {
|
|
108
107
|
fileName: _jsxFileName,
|
|
109
|
-
lineNumber:
|
|
108
|
+
lineNumber: 21,
|
|
110
109
|
columnNumber: 9
|
|
111
110
|
}
|
|
112
111
|
}, nextProps.app)
|
|
@@ -169,22 +168,34 @@ function JSONSpout({
|
|
|
169
168
|
id = 'anansi-json'
|
|
170
169
|
} = {}) {
|
|
171
170
|
return next => async props => {
|
|
172
|
-
const
|
|
171
|
+
const getInitialData = key => {
|
|
172
|
+
const globalId = `${id}.${key}`;
|
|
173
|
+
return new Promise((resolve, reject) => {
|
|
174
|
+
let el;
|
|
175
|
+
if (el = document.getElementById(globalId)) {
|
|
176
|
+
resolve(getDataFromEl(el, globalId));
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
180
|
+
el = document.getElementById(globalId);
|
|
181
|
+
if (el) resolve(getDataFromEl(el, globalId));else reject(new Error(`failed to find DOM with ${key} state`));
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
};
|
|
173
185
|
return {
|
|
174
186
|
...(await next({
|
|
175
187
|
...props,
|
|
176
|
-
|
|
188
|
+
getInitialData
|
|
177
189
|
})),
|
|
178
|
-
|
|
190
|
+
getInitialData
|
|
179
191
|
};
|
|
180
192
|
};
|
|
181
193
|
}
|
|
182
|
-
function
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
console.error(`#${id} is completely empty. This could be due to CSP issues.`);
|
|
194
|
+
function getDataFromEl(el, key) {
|
|
195
|
+
if (el.text === undefined) {
|
|
196
|
+
console.error(`#${key} is completely empty. This could be due to CSP issues.`);
|
|
186
197
|
}
|
|
187
|
-
return
|
|
198
|
+
return el != null && el.text ? JSON.parse(el == null ? void 0 : el.text) : undefined;
|
|
188
199
|
}
|
|
189
200
|
;// CONCATENATED MODULE: ./src/spouts/app.tsx
|
|
190
201
|
const appSpout = app => props => Promise.resolve({
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.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;AAEA;AAIA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;;ACNA;AAIA;AACA;AAEA;AACA;AACA;;ACdA;;;ACAA;;;;ACAA;
|
|
1
|
+
{"version":3,"file":"client.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;AAEA;AAIA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;;ACNA;AAIA;AACA;AAEA;AACA;AACA;;ACdA;;;ACAA;;;;ACAA;AAIA;AAGA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;;AC1BA;;ACAA;;;ACAA;AACA;AACA;AAKA;AAaA;AAGA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AClDA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;;ACnCA;AAGA;AAAA;AAAA;AAEA;;ACLA;AACA;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/client\"","/home/ntucker/src/anansi/packages/core/src/floodSpouts.tsx","/home/ntucker/src/anansi/packages/core/src/spouts/document.tsx","/home/ntucker/src/anansi/packages/core/external commonjs \"react\"","/home/ntucker/src/anansi/packages/core/external commonjs \"@rest-hooks/core\"","/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.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.tsx","/home/ntucker/src/anansi/packages/core/src/spouts/json.tsx","/home/ntucker/src/anansi/packages/core/src/spouts/app.tsx","/home/ntucker/src/anansi/packages/core/src/index.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/client\");","import { hydrateRoot } from 'react-dom/client';\n\nexport default async function floodSpouts(\n spouts: (props: Record<string, unknown>) => Promise<{\n app: JSX.Element;\n }>,\n { rootId = 'anansi-root' }: { rootId?: string } = {},\n) {\n const { app } = await spouts({});\n\n hydrateRoot(document.getElementById(rootId) ?? document, app);\n}\n","import React from 'react';\nimport type { Route } from '@anansi/router';\n\nimport type { ClientSpout } from './types';\n\nexport default function documentSpout(options: {\n head?: React.ReactNode;\n title: string;\n}): ClientSpout {\n return next => async props => {\n const nextProps = await next(props);\n\n return nextProps;\n };\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@rest-hooks/core\");","import { CacheProvider, Manager, NetworkManager } from '@rest-hooks/core';\n\nimport type { ClientSpout } from './types';\n\nexport default function restHooksSpout(\n options: {\n getManagers: () => Manager[];\n } = { getManagers: () => [new NetworkManager()] },\n): ClientSpout<{ getInitialData: (key: string) => Promise<any> }> {\n return next => async props => {\n const nextProps = await next(props);\n const data = await props.getInitialData('resthooks');\n\n if (process.env.NODE_ENV !== 'production' && !data) {\n console.error('Rest Hooks init data not found');\n }\n\n return {\n ...nextProps,\n app: (\n <CacheProvider initialState={data} managers={options.getManagers()}>\n {nextProps.app}\n </CacheProvider>\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 { createBrowserHistory } from 'history';\nimport type { Update } from 'history';\n\nimport type { CreateRouter, ClientSpout } from './types';\n\nexport default function routerSpout<ResolveWith>(options: {\n resolveWith?: any;\n useResolveWith: () => ResolveWith;\n createRouter: CreateRouter<ResolveWith>;\n onChange?: (update: Update, callback: () => void | undefined) => void;\n}): ClientSpout<\n Record<string, unknown>,\n {\n matchedRoutes: Route<ResolveWith, any>[];\n } & {\n router: RouteController<Route<ResolveWith, any>>;\n }\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\n router={router}\n resolveWith={resolveWith}\n onChange={options.onChange}\n >\n {children}\n </RouteProvider>\n );\n };\n\n return next => async props => {\n const history = createBrowserHistory();\n const router = options.createRouter(history);\n const matchedRoutes = router.getMatchedRoutes(history.location.pathname);\n\n const nextProps = await next({ ...props, matchedRoutes, router });\n\n const Router = createRouteComponent(router);\n return {\n ...nextProps,\n matchedRoutes,\n router,\n app: <Router>{nextProps.app}</Router>,\n };\n };\n}\n","import type { ClientSpout } from './types';\n\nexport default function JSONSpout({\n id = 'anansi-json',\n}: { id?: string } = {}): ClientSpout<\n Record<string, unknown>,\n { getInitialData: (key: string) => Promise<any> }\n> {\n return next => async props => {\n const getInitialData = (key: string) => {\n const globalId = `${id}.${key}`;\n return new Promise<any>((resolve, reject) => {\n let el: HTMLScriptElement | null;\n if ((el = document.getElementById(globalId) as any)) {\n resolve(getDataFromEl(el, globalId));\n return;\n }\n document.addEventListener('DOMContentLoaded', () => {\n el = document.getElementById(globalId) as any;\n if (el) resolve(getDataFromEl(el, globalId));\n else reject(new Error(`failed to find DOM with ${key} state`));\n });\n });\n };\n return { ...(await next({ ...props, getInitialData })), getInitialData };\n };\n}\n\nfunction getDataFromEl(el: HTMLScriptElement, key: string) {\n if (el.text === undefined) {\n console.error(\n `#${key} is completely empty. This could be due to CSP issues.`,\n );\n }\n return el?.text ? JSON.parse(el?.text) : undefined;\n}\n","const appSpout =\n (app: JSX.Element) =>\n <P extends Record<string, unknown>>(props: P) =>\n Promise.resolve({ ...props, app });\n\nexport default appSpout;\n","export { default as floodSpouts } from './floodSpouts';\nexport { default as documentSpout } from './spouts/document';\nexport { default as restHooksSpout } from './spouts/restHooks';\nexport { default as routerSpout } from './spouts/router';\nexport { default as JSONSpout } from './spouts/json';\nexport { default as appSpout } from './spouts/app';\nexport type { ServerProps } from './spouts/types';\nexport type { ClientSpout as Spout } from './spouts/types';\n"],"names":[],"sourceRoot":""}
|
package/dist/server.js
CHANGED
|
@@ -69,7 +69,7 @@ var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
function laySpouts(spouts, {
|
|
72
|
-
timeoutMS =
|
|
72
|
+
timeoutMS = 10000,
|
|
73
73
|
onError
|
|
74
74
|
} = {}) {
|
|
75
75
|
const render = async (clientManifest, req, res) => {
|
|
@@ -342,44 +342,8 @@ function childrenAssets(chunk) {
|
|
|
342
342
|
}
|
|
343
343
|
;// CONCATENATED MODULE: external "@rest-hooks/core"
|
|
344
344
|
const core_namespaceObject = require("@rest-hooks/core");
|
|
345
|
-
;// CONCATENATED MODULE: external "rest-hooks"
|
|
346
|
-
const
|
|
347
|
-
;// CONCATENATED MODULE: external "redux"
|
|
348
|
-
const external_redux_namespaceObject = require("redux");
|
|
349
|
-
;// CONCATENATED MODULE: ./src/spouts/rhHelp.tsx
|
|
350
|
-
var rhHelp_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/rhHelp.tsx";
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
// TODO: Rework this and upstream to rest hooks
|
|
357
|
-
function createPersistedStore(managers) {
|
|
358
|
-
var _managers;
|
|
359
|
-
const controller = new core_namespaceObject.Controller();
|
|
360
|
-
managers = (_managers = managers) != null ? _managers : [new core_namespaceObject.NetworkManager()];
|
|
361
|
-
const reducer = (0,core_namespaceObject.createReducer)(controller);
|
|
362
|
-
const enhancer = (0,external_redux_namespaceObject.applyMiddleware)(...(0,core_namespaceObject.applyManager)(managers, controller), external_rest_hooks_namespaceObject.PromiseifyMiddleware);
|
|
363
|
-
const store = (0,external_redux_namespaceObject.createStore)(reducer, core_namespaceObject.initialState, enhancer);
|
|
364
|
-
managers.forEach(manager => manager.init == null ? void 0 : manager.init(store.getState()));
|
|
365
|
-
const selector = state => state;
|
|
366
|
-
function ServerCacheProvider({
|
|
367
|
-
children
|
|
368
|
-
}) {
|
|
369
|
-
return /*#__PURE__*/external_react_default().createElement(external_rest_hooks_namespaceObject.ExternalCacheProvider, {
|
|
370
|
-
store: store,
|
|
371
|
-
selector: selector,
|
|
372
|
-
controller: controller,
|
|
373
|
-
__self: this,
|
|
374
|
-
__source: {
|
|
375
|
-
fileName: rhHelp_jsxFileName,
|
|
376
|
-
lineNumber: 27,
|
|
377
|
-
columnNumber: 7
|
|
378
|
-
}
|
|
379
|
-
}, children);
|
|
380
|
-
}
|
|
381
|
-
return [ServerCacheProvider, controller, store];
|
|
382
|
-
}
|
|
345
|
+
;// CONCATENATED MODULE: external "@rest-hooks/ssr"
|
|
346
|
+
const ssr_namespaceObject = require("@rest-hooks/ssr");
|
|
383
347
|
;// CONCATENATED MODULE: ./src/spouts/restHooks.server.tsx
|
|
384
348
|
var restHooks_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.server.tsx";
|
|
385
349
|
|
|
@@ -388,8 +352,9 @@ var restHooks_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/s
|
|
|
388
352
|
function restHooksSpout(options = {
|
|
389
353
|
getManagers: () => [new core_namespaceObject.NetworkManager()]
|
|
390
354
|
}) {
|
|
355
|
+
const managers = options.getManagers();
|
|
391
356
|
return next => async props => {
|
|
392
|
-
const [ServerCacheProvider, controller, store] =
|
|
357
|
+
const [ServerCacheProvider, useReadyCacheState, controller, store] = (0,ssr_namespaceObject.createPersistedStore)(managers);
|
|
393
358
|
const nextProps = await next({
|
|
394
359
|
...props,
|
|
395
360
|
controller,
|
|
@@ -399,13 +364,13 @@ function restHooksSpout(options = {
|
|
|
399
364
|
...nextProps,
|
|
400
365
|
initData: {
|
|
401
366
|
...nextProps.initData,
|
|
402
|
-
resthooks:
|
|
367
|
+
resthooks: useReadyCacheState
|
|
403
368
|
},
|
|
404
369
|
app: /*#__PURE__*/external_react_default().createElement(ServerCacheProvider, {
|
|
405
370
|
__self: this,
|
|
406
371
|
__source: {
|
|
407
372
|
fileName: restHooks_server_jsxFileName,
|
|
408
|
-
lineNumber:
|
|
373
|
+
lineNumber: 32,
|
|
409
374
|
columnNumber: 12
|
|
410
375
|
}
|
|
411
376
|
}, nextProps.app),
|
|
@@ -495,67 +460,53 @@ function JSONSpout({
|
|
|
495
460
|
id = 'anansi-json'
|
|
496
461
|
} = {}) {
|
|
497
462
|
return next => async props => {
|
|
498
|
-
var _nextProps$scripts;
|
|
463
|
+
var _nextProps$scripts, _nextProps$initData;
|
|
499
464
|
const nextProps = await next(props);
|
|
500
465
|
const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
|
|
501
|
-
|
|
502
|
-
|
|
466
|
+
Object.entries((_nextProps$initData = nextProps.initData) != null ? _nextProps$initData : {}).forEach(([key, useData]) => {
|
|
467
|
+
const globalId = `${id}.${key}`;
|
|
468
|
+
const Script = () => {
|
|
469
|
+
const data = useData();
|
|
503
470
|
try {
|
|
504
471
|
const encoded = JSON.stringify(data);
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
472
|
+
return /*#__PURE__*/external_react_default().createElement("script", {
|
|
473
|
+
id: globalId,
|
|
474
|
+
type: "application/json",
|
|
475
|
+
dangerouslySetInnerHTML: {
|
|
476
|
+
__html: encoded
|
|
477
|
+
},
|
|
478
|
+
nonce: props.nonce,
|
|
479
|
+
__self: this,
|
|
480
|
+
__source: {
|
|
481
|
+
fileName: json_server_jsxFileName,
|
|
482
|
+
lineNumber: 29,
|
|
483
|
+
columnNumber: 13
|
|
484
|
+
}
|
|
485
|
+
});
|
|
516
486
|
} catch (e) {
|
|
517
487
|
// TODO: Use unified logging
|
|
488
|
+
console.error(`Error serializing json for ${key}`);
|
|
518
489
|
console.error(e);
|
|
490
|
+
return null;
|
|
519
491
|
}
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
__source: {
|
|
539
|
-
fileName: json_server_jsxFileName,
|
|
540
|
-
lineNumber: 49,
|
|
541
|
-
columnNumber: 11
|
|
542
|
-
}
|
|
543
|
-
});
|
|
544
|
-
} catch (e) {
|
|
545
|
-
// TODO: Use unified logging
|
|
546
|
-
console.error('Error serializing json');
|
|
547
|
-
console.error(e);
|
|
548
|
-
return null;
|
|
549
|
-
}
|
|
550
|
-
};
|
|
551
|
-
scripts.push( /*#__PURE__*/external_react_default().createElement(Script, {
|
|
552
|
-
__self: this,
|
|
553
|
-
__source: {
|
|
554
|
-
fileName: json_server_jsxFileName,
|
|
555
|
-
lineNumber: 66,
|
|
556
|
-
columnNumber: 18
|
|
557
|
-
}
|
|
558
|
-
}));
|
|
492
|
+
};
|
|
493
|
+
scripts.push( /*#__PURE__*/external_react_default().createElement(external_react_namespaceObject.Suspense, {
|
|
494
|
+
key: globalId,
|
|
495
|
+
__self: this,
|
|
496
|
+
__source: {
|
|
497
|
+
fileName: json_server_jsxFileName,
|
|
498
|
+
lineNumber: 46,
|
|
499
|
+
columnNumber: 9
|
|
500
|
+
}
|
|
501
|
+
}, /*#__PURE__*/external_react_default().createElement(Script, {
|
|
502
|
+
__self: this,
|
|
503
|
+
__source: {
|
|
504
|
+
fileName: json_server_jsxFileName,
|
|
505
|
+
lineNumber: 47,
|
|
506
|
+
columnNumber: 11
|
|
507
|
+
}
|
|
508
|
+
})));
|
|
509
|
+
});
|
|
559
510
|
return {
|
|
560
511
|
...nextProps,
|
|
561
512
|
scripts
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","mappings":";;AAAA;AACA;AACA;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACNA;;ACAA;;;ACAA;AACA;AAKA;AAKA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;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;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;;;ACIA;AACA;AACA;AAEA;;AAIA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;;;;;ACvBA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;;;ACpFA;AAMA;AAQA;AAOA;AAAA;AACA;AAEA;AAEA;;AAMA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;;AAIA;AACA;AAQA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAGA;;ACjGA;;ACAA;;ACAA;;;;ACAA;AACA;AAQA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;;;;ACpCA;AAGA;AAGA;AAGA;AAAA;AAMA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;;ACAA;;;ACAA;AACA;AACA;AAIA;AAYA;AAGA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AAWA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACrCA;AASA;AACA;AACA;AAKA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;;ACtEA;AAGA;AAAA;AAAA;AAEA;;ACPA;AACA;AACA;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/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/spouts/app.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 {\n timeoutMS = 200,\n onError,\n }: { timeoutMS?: number; onError?: (error: unknown) => void } = {},\n) {\n const render: Render = async (clientManifest, req, res) => {\n const nonce = crypto.randomBytes(16).toString('base64');\n\n try {\n const { app } = await spouts({ clientManifest, req, res, nonce });\n\n let didError = false;\n const { pipe, abort } = reactRender(app, {\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(e: any) {\n didError = true;\n console.error(e);\n res.statusCode = 500;\n //pipe(res); Removing this avoids, \"React currently only supports piping to one writable stream.\"\n if (onError) onError(e);\n },\n });\n // Abandon and switch to client rendering if enough time passes.\n // Try lowering this to see the client recover.\n setTimeout(\n () => (abort as any)(`Timeout of ${timeoutMS}ms exceeded`),\n timeoutMS,\n );\n } catch (e: unknown) {\n if (onError) onError(e);\n throw e;\n }\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 (\n nonce &&\n // nonces negate 'unsafe-inline' so do not add it if that directive exists\n (!policy['script-src'] ||\n !policy['script-src'].includes(\"'unsafe-inline'\"))\n ) {\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 { ServerSpout } from './types';\nimport type { Policy } from './csp';\nimport Document from './DocumentComponent';\n\ntype NeededNext = {\n matchedRoutes: Route<any>[];\n title?: string;\n scripts?: React.ReactNode[];\n};\n\nexport default function DocumentSpout(options: {\n head?: React.ReactNode;\n title: string;\n rootId?: string;\n charSet?: string;\n csPolicy?: Policy;\n}): ServerSpout<Record<string, unknown>, Record<string, unknown>, NeededNext> {\n return next => async props => {\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\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 { Controller, Manager, NetworkManager, State } from '@rest-hooks/core';\nimport type { Store } from 'redux';\n\nimport { createPersistedStore } from './rhHelp';\nimport type { ServerSpout } from './types';\n\nexport default function restHooksSpout(\n options: {\n getManagers: () => Manager[];\n } = { getManagers: () => [new NetworkManager()] },\n): ServerSpout<\n Record<string, unknown>,\n { controller: Controller } & { store: Store<State<unknown>> },\n { initData?: Record<string, () => unknown> }\n> {\n return next => async props => {\n const [ServerCacheProvider, controller, store] = createPersistedStore(\n options.getManagers(),\n );\n\n const nextProps = await next({\n ...props,\n controller,\n store,\n });\n\n return {\n ...nextProps,\n initData: {\n ...nextProps.initData,\n resthooks: () => store.getState(),\n },\n app: <ServerCacheProvider>{nextProps.app}</ServerCacheProvider>,\n // TODO: figure out how to only inject in next and not have to also put here\n controller,\n store,\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 { CreateRouter, ServerSpout } from './types';\n\nexport default function routerSpout<ResolveWith>(options: {\n resolveWith?: any;\n useResolveWith: () => ResolveWith;\n createRouter: CreateRouter<ResolveWith>;\n}): ServerSpout<\n Record<string, unknown>,\n {\n matchedRoutes: Route<ResolveWith>[];\n } & {\n router: RouteController<Route<ResolveWith, any>>;\n }\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 next => async props => {\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({\n ...props,\n matchedRoutes,\n router,\n });\n\n const Router = createRouteComponent(router);\n\n return {\n ...nextProps,\n app: <Router>{nextProps.app}</Router>,\n // TODO: figure out how to only inject in next and not have to also put here\n matchedRoutes,\n router,\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 <\n RouteWith,\n N extends NeededProps<RouteWith>,\n I extends ServerProps,\n >(\n next: (props: I) => Promise<\n {\n [K in F]: RouteWith;\n } & N\n >,\n ) {\n return async (props: I) => {\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';\n\nimport type { ServerSpout } from './types';\n\ntype NeededNext = {\n initData?: Record<string, () => unknown>;\n scripts?: React.ReactNode[];\n};\n\nexport default function JSONSpout({\n id = 'anansi-json',\n}: { id?: string } = {}): ServerSpout<\n Record<string, unknown>,\n Record<string, unknown>,\n NeededNext\n> {\n return next => async props => {\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","import { ServerProps } from './types';\n\nconst appSpout =\n (app: JSX.Element) =>\n <P extends ServerProps>(props: P) =>\n Promise.resolve({ ...props, app });\n\nexport default appSpout;\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';\nexport { default as appSpout } from './spouts/app.server';\nexport type { ServerProps } from './spouts/types';\nexport type { ServerSpout as Spout } from './spouts/types';\n"],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"server.js","mappings":";;AAAA;AACA;AACA;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACNA;;ACAA;;;ACAA;AACA;AAKA;AAKA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;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;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;;;ACIA;AACA;AACA;AAEA;;AAIA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;;;;;ACvBA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;;;ACpFA;AAMA;AAQA;AAOA;AAAA;AACA;AAEA;AAEA;;AAMA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;;AAIA;AACA;AAQA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAGA;;ACjGA;;ACAA;;;;ACAA;AAEA;AAIA;AAGA;AAAA;AAMA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;;ACAA;;;ACAA;AACA;AACA;AAIA;AAYA;AAGA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AAWA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACrCA;AASA;AACA;AACA;AAKA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AAGA;AAAA;AAAA;AAEA;;ACPA;AACA;AACA;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/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/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/spouts/json.server.tsx","/home/ntucker/src/anansi/packages/core/src/spouts/app.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 {\n timeoutMS = 10000,\n onError,\n }: { timeoutMS?: number; onError?: (error: unknown) => void } = {},\n) {\n const render: Render = async (clientManifest, req, res) => {\n const nonce = crypto.randomBytes(16).toString('base64');\n\n try {\n const { app } = await spouts({ clientManifest, req, res, nonce });\n\n let didError = false;\n const { pipe, abort } = reactRender(app, {\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(e: any) {\n didError = true;\n console.error(e);\n res.statusCode = 500;\n //pipe(res); Removing this avoids, \"React currently only supports piping to one writable stream.\"\n if (onError) onError(e);\n },\n });\n // Abandon and switch to client rendering if enough time passes.\n // Try lowering this to see the client recover.\n setTimeout(\n () => (abort as any)(`Timeout of ${timeoutMS}ms exceeded`),\n timeoutMS,\n );\n } catch (e: unknown) {\n if (onError) onError(e);\n throw e;\n }\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 (\n nonce &&\n // nonces negate 'unsafe-inline' so do not add it if that directive exists\n (!policy['script-src'] ||\n !policy['script-src'].includes(\"'unsafe-inline'\"))\n ) {\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 { ServerSpout } from './types';\nimport type { Policy } from './csp';\nimport Document from './DocumentComponent';\n\ntype NeededNext = {\n matchedRoutes: Route<any>[];\n title?: string;\n scripts?: React.ReactNode[];\n};\n\nexport default function DocumentSpout(options: {\n head?: React.ReactNode;\n title: string;\n rootId?: string;\n charSet?: string;\n csPolicy?: Policy;\n}): ServerSpout<Record<string, unknown>, Record<string, unknown>, NeededNext> {\n return next => async props => {\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\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 { Controller, Manager, NetworkManager, State } from '@rest-hooks/core';\nimport type { Store } from 'redux';\nimport { createPersistedStore } from '@rest-hooks/ssr';\n\nimport type { ServerSpout } from './types';\n\nexport default function restHooksSpout(\n options: {\n getManagers: () => Manager[];\n } = { getManagers: () => [new NetworkManager()] },\n): ServerSpout<\n Record<string, unknown>,\n { controller: Controller } & { store: Store<State<unknown>> },\n { initData?: Record<string, () => unknown>; scripts?: React.ReactNode[] }\n> {\n const managers = options.getManagers();\n return next => async props => {\n const [ServerCacheProvider, useReadyCacheState, controller, store] =\n createPersistedStore(managers);\n\n const nextProps = await next({\n ...props,\n controller,\n store,\n });\n return {\n ...nextProps,\n initData: {\n ...nextProps.initData,\n resthooks: useReadyCacheState,\n },\n app: <ServerCacheProvider>{nextProps.app}</ServerCacheProvider>,\n // TODO: figure out how to only inject in next and not have to also put here\n controller,\n store,\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 { CreateRouter, ServerSpout } from './types';\n\nexport default function routerSpout<ResolveWith>(options: {\n resolveWith?: any;\n useResolveWith: () => ResolveWith;\n createRouter: CreateRouter<ResolveWith>;\n}): ServerSpout<\n Record<string, unknown>,\n {\n matchedRoutes: Route<ResolveWith>[];\n } & {\n router: RouteController<Route<ResolveWith, any>>;\n }\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 next => async props => {\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({\n ...props,\n matchedRoutes,\n router,\n });\n\n const Router = createRouteComponent(router);\n\n return {\n ...nextProps,\n app: <Router>{nextProps.app}</Router>,\n // TODO: figure out how to only inject in next and not have to also put here\n matchedRoutes,\n router,\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 <\n RouteWith,\n N extends NeededProps<RouteWith>,\n I extends ServerProps,\n >(\n next: (props: I) => Promise<\n {\n [K in F]: RouteWith;\n } & N\n >,\n ) {\n return async (props: I) => {\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, { Suspense } from 'react';\n\nimport type { ServerSpout } from './types';\n\ntype NeededNext = {\n initData?: Record<string, () => unknown>;\n scripts?: React.ReactNode[];\n};\n\nexport default function JSONSpout({\n id = 'anansi-json',\n}: { id?: string } = {}): ServerSpout<\n Record<string, unknown>,\n Record<string, unknown>,\n NeededNext\n> {\n return next => async props => {\n const nextProps = await next(props);\n\n const scripts: React.ReactNode[] = nextProps.scripts ?? [];\n\n Object.entries(nextProps.initData ?? {}).forEach(([key, useData]) => {\n const globalId = `${id}.${key}`;\n const Script = () => {\n const data: any = useData();\n try {\n const encoded = JSON.stringify(data);\n return (\n <script\n id={globalId}\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 for ${key}`);\n console.error(e);\n return null;\n }\n };\n scripts.push(\n <Suspense key={globalId}>\n <Script />\n </Suspense>,\n );\n });\n\n return {\n ...nextProps,\n scripts,\n };\n };\n}\n","import { ServerProps } from './types';\n\nconst appSpout =\n (app: JSX.Element) =>\n <P extends ServerProps>(props: P) =>\n Promise.resolve({ ...props, app });\n\nexport default appSpout;\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';\nexport { default as appSpout } from './spouts/app.server';\nexport type { ServerProps } from './spouts/types';\nexport type { ServerSpout as Spout } from './spouts/types';\n"],"names":[],"sourceRoot":""}
|
package/lib/laySpouts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,EACE,
|
|
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,EACE,SAAiB,EACjB,OAAO,GACR,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CAAO,UA4CnE"}
|
package/lib/laySpouts.js
CHANGED
|
@@ -6,7 +6,7 @@ exports.default = laySpouts;
|
|
|
6
6
|
var _server = require("react-dom/server");
|
|
7
7
|
var _crypto = _interopRequireDefault(require("crypto"));
|
|
8
8
|
function laySpouts(spouts, {
|
|
9
|
-
timeoutMS =
|
|
9
|
+
timeoutMS = 10000,
|
|
10
10
|
onError
|
|
11
11
|
} = {}) {
|
|
12
12
|
const render = async (clientManifest, req, res) => {
|
|
@@ -57,4 +57,4 @@ function laySpouts(spouts, {
|
|
|
57
57
|
};
|
|
58
58
|
return render;
|
|
59
59
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsYXlTcG91dHMiLCJzcG91dHMiLCJ0aW1lb3V0TVMiLCJvbkVycm9yIiwicmVuZGVyIiwiY2xpZW50TWFuaWZlc3QiLCJyZXEiLCJyZXMiLCJub25jZSIsImNyeXB0byIsInJhbmRvbUJ5dGVzIiwidG9TdHJpbmciLCJhcHAiLCJkaWRFcnJvciIsInBpcGUiLCJhYm9ydCIsInJlYWN0UmVuZGVyIiwib25TaGVsbFJlYWR5Iiwic3RhdHVzQ29kZSIsInNldEhlYWRlciIsIm9uU2hlbGxFcnJvciIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2xheVNwb3V0cy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyVG9QaXBlYWJsZVN0cmVhbSBhcyByZWFjdFJlbmRlciB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBSZW5kZXIgfSBmcm9tICcuL3NjcmlwdHMvdHlwZXMnO1xuaW1wb3J0IHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxheVNwb3V0cyhcbiAgc3BvdXRzOiAocHJvcHM6IFNlcnZlclByb3BzKSA9PiBQcm9taXNlPHtcbiAgICBhcHA6IEpTWC5FbGVtZW50O1xuICB9PixcbiAge1xuICAgIHRpbWVvdXRNUyA9IDEwMDAwLFxuICAgIG9uRXJyb3IsXG4gIH06IHsgdGltZW91dE1TPzogbnVtYmVyOyBvbkVycm9yPzogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkIH0gPSB7fSxcbikge1xuICBjb25zdCByZW5kZXI6IFJlbmRlciA9IGFzeW5jIChjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMpID0+IHtcbiAgICBjb25zdCBub25jZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYXBwIH0gPSBhd2FpdCBzcG91dHMoeyBjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMsIG5vbmNlIH0pO1xuXG4gICAgICBsZXQgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHsgcGlwZSwgYWJvcnQgfSA9IHJlYWN0UmVuZGVyKGFwcCwge1xuICAgICAgICBub25jZSxcbiAgICAgICAgLy9ib290c3RyYXBTY3JpcHRzOiBhc3NldHMuZmlsdGVyKGFzc2V0ID0+IGFzc2V0LmVuZHNXaXRoKCcuanMnKSksXG4gICAgICAgIG9uU2hlbGxSZWFkeSgpIHtcbiAgICAgICAgICAvL21hbmFnZXJzLmZvckVhY2gobWFuYWdlciA9PiBtYW5hZ2VyLmNsZWFudXAoKSk7XG4gICAgICAgICAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgYmVmb3JlIHdlIHN0YXJ0ZWQgc3RyZWFtaW5nLCB3ZSBzZXQgdGhlIGVycm9yIGNvZGUgYXBwcm9wcmlhdGVseS5cbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGRpZEVycm9yID8gNTAwIDogMjAwO1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2hlbGxFcnJvcigpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yKGU6IGFueSkge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIC8vcGlwZShyZXMpOyBSZW1vdmluZyB0aGlzIGF2b2lkcywgXCJSZWFjdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBwaXBpbmcgdG8gb25lIHdyaXRhYmxlIHN0cmVhbS5cIlxuICAgICAgICAgIGlmIChvbkVycm9yKSBvbkVycm9yKGUpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICAvLyBBYmFuZG9uIGFuZCBzd2l0Y2ggdG8gY2xpZW50IHJlbmRlcmluZyBpZiBlbm91Z2ggdGltZSBwYXNzZXMuXG4gICAgICAvLyBUcnkgbG93ZXJpbmcgdGhpcyB0byBzZWUgdGhlIGNsaWVudCByZWNvdmVyLlxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4gKGFib3J0IGFzIGFueSkoYFRpbWVvdXQgb2YgJHt0aW1lb3V0TVN9bXMgZXhjZWVkZWRgKSxcbiAgICAgICAgdGltZW91dE1TLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBpZiAob25FcnJvcikgb25FcnJvcihlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xuICByZXR1cm4gcmVuZGVyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFLZSxTQUFTQSxTQUFTLENBQy9CQyxNQUVFLEVBQ0Y7RUFDRUMsU0FBUyxHQUFHLEtBQUs7RUFDakJDO0FBQzBELENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbEU7RUFDQSxNQUFNQyxNQUFjLEdBQUcsT0FBT0MsY0FBYyxFQUFFQyxHQUFHLEVBQUVDLEdBQUcsS0FBSztJQUN6RCxNQUFNQyxLQUFLLEdBQUdDLGVBQU0sQ0FBQ0MsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDQyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBRXZELElBQUk7TUFDRixNQUFNO1FBQUVDO01BQUksQ0FBQyxHQUFHLE1BQU1YLE1BQU0sQ0FBQztRQUFFSSxjQUFjO1FBQUVDLEdBQUc7UUFBRUMsR0FBRztRQUFFQztNQUFNLENBQUMsQ0FBQztNQUVqRSxJQUFJSyxRQUFRLEdBQUcsS0FBSztNQUNwQixNQUFNO1FBQUVDLElBQUk7UUFBRUM7TUFBTSxDQUFDLEdBQUcsSUFBQUMsOEJBQVcsRUFBQ0osR0FBRyxFQUFFO1FBQ3ZDSixLQUFLO1FBQ0w7UUFDQVMsWUFBWSxHQUFHO1VBQ2I7VUFDQTtVQUNBVixHQUFHLENBQUNXLFVBQVUsR0FBR0wsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHO1VBQ3JDTixHQUFHLENBQUNZLFNBQVMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO1VBQzFDTCxJQUFJLENBQUNQLEdBQUcsQ0FBQztRQUNYLENBQUM7UUFDRGEsWUFBWSxHQUFHO1VBQ2JQLFFBQVEsR0FBRyxJQUFJO1VBQ2ZOLEdBQUcsQ0FBQ1csVUFBVSxHQUFHLEdBQUc7VUFDcEJKLElBQUksQ0FBQ1AsR0FBRyxDQUFDO1FBQ1gsQ0FBQztRQUNESixPQUFPLENBQUNrQixDQUFNLEVBQUU7VUFDZFIsUUFBUSxHQUFHLElBQUk7VUFDZlMsT0FBTyxDQUFDQyxLQUFLLENBQUNGLENBQUMsQ0FBQztVQUNoQmQsR0FBRyxDQUFDVyxVQUFVLEdBQUcsR0FBRztVQUNwQjtVQUNBLElBQUlmLE9BQU8sRUFBRUEsT0FBTyxDQUFDa0IsQ0FBQyxDQUFDO1FBQ3pCO01BQ0YsQ0FBQyxDQUFDO01BQ0Y7TUFDQTtNQUNBRyxVQUFVLENBQ1IsTUFBT1QsS0FBSyxDQUFVLGNBQWFiLFNBQVUsYUFBWSxDQUFDLEVBQzFEQSxTQUFTLENBQ1Y7SUFDSCxDQUFDLENBQUMsT0FBT21CLENBQVUsRUFBRTtNQUNuQixJQUFJbEIsT0FBTyxFQUFFQSxPQUFPLENBQUNrQixDQUFDLENBQUM7TUFDdkIsTUFBTUEsQ0FBQztJQUNUO0VBQ0YsQ0FBQztFQUNELE9BQU9qQixNQUFNO0FBQ2YifQ==
|
package/lib/spouts/json.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ import type { ClientSpout } from './types';
|
|
|
2
2
|
export default function JSONSpout({ id, }?: {
|
|
3
3
|
id?: string;
|
|
4
4
|
}): ClientSpout<Record<string, unknown>, {
|
|
5
|
-
|
|
5
|
+
getInitialData: (key: string) => Promise<any>;
|
|
6
6
|
}>;
|
|
7
7
|
//# sourceMappingURL=json.d.ts.map
|
package/lib/spouts/json.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/spouts/json.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,EAAkB,GACnB,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB;IAAE,
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/spouts/json.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,EAAkB,GACnB,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB;IAAE,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,CAClD,CAmBA"}
|
package/lib/spouts/json.js
CHANGED
|
@@ -6,21 +6,33 @@ function JSONSpout({
|
|
|
6
6
|
id = 'anansi-json'
|
|
7
7
|
} = {}) {
|
|
8
8
|
return next => async props => {
|
|
9
|
-
const
|
|
9
|
+
const getInitialData = key => {
|
|
10
|
+
const globalId = `${id}.${key}`;
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
let el;
|
|
13
|
+
if (el = document.getElementById(globalId)) {
|
|
14
|
+
resolve(getDataFromEl(el, globalId));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
18
|
+
el = document.getElementById(globalId);
|
|
19
|
+
if (el) resolve(getDataFromEl(el, globalId));else reject(new Error(`failed to find DOM with ${key} state`));
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
};
|
|
10
23
|
return {
|
|
11
24
|
...(await next({
|
|
12
25
|
...props,
|
|
13
|
-
|
|
26
|
+
getInitialData
|
|
14
27
|
})),
|
|
15
|
-
|
|
28
|
+
getInitialData
|
|
16
29
|
};
|
|
17
30
|
};
|
|
18
31
|
}
|
|
19
|
-
function
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
console.error(`#${id} is completely empty. This could be due to CSP issues.`);
|
|
32
|
+
function getDataFromEl(el, key) {
|
|
33
|
+
if (el.text === undefined) {
|
|
34
|
+
console.error(`#${key} is completely empty. This could be due to CSP issues.`);
|
|
23
35
|
}
|
|
24
|
-
return
|
|
36
|
+
return el != null && el.text ? JSON.parse(el == null ? void 0 : el.text) : undefined;
|
|
25
37
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJKU09OU3BvdXQiLCJpZCIsIm5leHQiLCJwcm9wcyIsImdldEluaXRpYWxEYXRhIiwia2V5IiwiZ2xvYmFsSWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImVsIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldERhdGFGcm9tRWwiLCJhZGRFdmVudExpc3RlbmVyIiwiRXJyb3IiLCJ0ZXh0IiwidW5kZWZpbmVkIiwiY29uc29sZSIsImVycm9yIiwiSlNPTiIsInBhcnNlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9qc29uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENsaWVudFNwb3V0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEpTT05TcG91dCh7XG4gIGlkID0gJ2FuYW5zaS1qc29uJyxcbn06IHsgaWQ/OiBzdHJpbmcgfSA9IHt9KTogQ2xpZW50U3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB7IGdldEluaXRpYWxEYXRhOiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8YW55PiB9XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IGdldEluaXRpYWxEYXRhID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBnbG9iYWxJZCA9IGAke2lkfS4ke2tleX1gO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgZWw6IEhUTUxTY3JpcHRFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgaWYgKChlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGdsb2JhbElkKSBhcyBhbnkpKSB7XG4gICAgICAgICAgcmVzb2x2ZShnZXREYXRhRnJvbUVsKGVsLCBnbG9iYWxJZCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICAgIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ2xvYmFsSWQpIGFzIGFueTtcbiAgICAgICAgICBpZiAoZWwpIHJlc29sdmUoZ2V0RGF0YUZyb21FbChlbCwgZ2xvYmFsSWQpKTtcbiAgICAgICAgICBlbHNlIHJlamVjdChuZXcgRXJyb3IoYGZhaWxlZCB0byBmaW5kIERPTSB3aXRoICR7a2V5fSBzdGF0ZWApKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLihhd2FpdCBuZXh0KHsgLi4ucHJvcHMsIGdldEluaXRpYWxEYXRhIH0pKSwgZ2V0SW5pdGlhbERhdGEgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZyb21FbChlbDogSFRNTFNjcmlwdEVsZW1lbnQsIGtleTogc3RyaW5nKSB7XG4gIGlmIChlbC50ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYCMke2tleX0gaXMgY29tcGxldGVseSBlbXB0eS4gVGhpcyBjb3VsZCBiZSBkdWUgdG8gQ1NQIGlzc3Vlcy5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGVsPy50ZXh0ID8gSlNPTi5wYXJzZShlbD8udGV4dCkgOiB1bmRlZmluZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFFZSxTQUFTQSxTQUFTLENBQUM7RUFDaENDLEVBQUUsR0FBRztBQUNVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFHckI7RUFDQSxPQUFPQyxJQUFJLElBQUksTUFBTUMsS0FBSyxJQUFJO0lBQzVCLE1BQU1DLGNBQWMsR0FBSUMsR0FBVyxJQUFLO01BQ3RDLE1BQU1DLFFBQVEsR0FBSSxHQUFFTCxFQUFHLElBQUdJLEdBQUksRUFBQztNQUMvQixPQUFPLElBQUlFLE9BQU8sQ0FBTSxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztRQUMzQyxJQUFJQyxFQUE0QjtRQUNoQyxJQUFLQSxFQUFFLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDTixRQUFRLENBQVEsRUFBRztVQUNuREUsT0FBTyxDQUFDSyxhQUFhLENBQUNILEVBQUUsRUFBRUosUUFBUSxDQUFDLENBQUM7VUFDcEM7UUFDRjtRQUNBSyxRQUFRLENBQUNHLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLE1BQU07VUFDbERKLEVBQUUsR0FBR0MsUUFBUSxDQUFDQyxjQUFjLENBQUNOLFFBQVEsQ0FBUTtVQUM3QyxJQUFJSSxFQUFFLEVBQUVGLE9BQU8sQ0FBQ0ssYUFBYSxDQUFDSCxFQUFFLEVBQUVKLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FDeENHLE1BQU0sQ0FBQyxJQUFJTSxLQUFLLENBQUUsMkJBQTBCVixHQUFJLFFBQU8sQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQztNQUNKLENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPO01BQUUsSUFBSSxNQUFNSCxJQUFJLENBQUM7UUFBRSxHQUFHQyxLQUFLO1FBQUVDO01BQWUsQ0FBQyxDQUFDLENBQUM7TUFBRUE7SUFBZSxDQUFDO0VBQzFFLENBQUM7QUFDSDtBQUVBLFNBQVNTLGFBQWEsQ0FBQ0gsRUFBcUIsRUFBRUwsR0FBVyxFQUFFO0VBQ3pELElBQUlLLEVBQUUsQ0FBQ00sSUFBSSxLQUFLQyxTQUFTLEVBQUU7SUFDekJDLE9BQU8sQ0FBQ0MsS0FBSyxDQUNWLElBQUdkLEdBQUksd0RBQXVELENBQ2hFO0VBQ0g7RUFDQSxPQUFPSyxFQUFFLFlBQUZBLEVBQUUsQ0FBRU0sSUFBSSxHQUFHSSxJQUFJLENBQUNDLEtBQUssQ0FBQ1gsRUFBRSxvQkFBRkEsRUFBRSxDQUFFTSxJQUFJLENBQUMsR0FBR0MsU0FBUztBQUNwRCJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.server.d.ts","sourceRoot":"","sources":["../../src/spouts/json.server.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"json.server.d.ts","sourceRoot":"","sources":["../../src/spouts/json.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,aAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,EAAkB,GACnB,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB,UAAU,CACX,CAyCA"}
|
|
@@ -1,65 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
3
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
5
|
exports.__esModule = true;
|
|
5
6
|
exports.default = JSONSpout;
|
|
6
7
|
var _jsx2 = _interopRequireDefault(require("@babel/runtime/helpers/jsx"));
|
|
7
|
-
var _react =
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
9
|
function JSONSpout({
|
|
9
10
|
id = 'anansi-json'
|
|
10
11
|
} = {}) {
|
|
11
12
|
return next => async props => {
|
|
12
|
-
var _nextProps$scripts;
|
|
13
|
+
var _nextProps$scripts, _nextProps$initData;
|
|
13
14
|
const nextProps = await next(props);
|
|
14
15
|
const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
Object.entries((_nextProps$initData = nextProps.initData) != null ? _nextProps$initData : {}).forEach(([key, useData]) => {
|
|
17
|
+
const globalId = `${id}.${key}`;
|
|
18
|
+
const Script = () => {
|
|
19
|
+
const data = useData();
|
|
17
20
|
try {
|
|
18
21
|
const encoded = JSON.stringify(data);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
nonce={props.nonce}
|
|
28
|
-
/>,
|
|
29
|
-
);
|
|
22
|
+
return /*#__PURE__*/(0, _jsx2.default)("script", {
|
|
23
|
+
id: globalId,
|
|
24
|
+
type: "application/json",
|
|
25
|
+
dangerouslySetInnerHTML: {
|
|
26
|
+
__html: encoded
|
|
27
|
+
},
|
|
28
|
+
nonce: props.nonce
|
|
29
|
+
});
|
|
30
30
|
} catch (e) {
|
|
31
31
|
// TODO: Use unified logging
|
|
32
|
+
console.error(`Error serializing json for ${key}`);
|
|
32
33
|
console.error(e);
|
|
34
|
+
return null;
|
|
33
35
|
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
var _nextProps$initData;
|
|
38
|
-
const data = {};
|
|
39
|
-
Object.entries((_nextProps$initData = nextProps.initData) != null ? _nextProps$initData : {}).forEach(([key, getData]) => {
|
|
40
|
-
data[key] = getData();
|
|
41
|
-
});
|
|
42
|
-
const encoded = JSON.stringify(data);
|
|
43
|
-
return /*#__PURE__*/(0, _jsx2.default)("script", {
|
|
44
|
-
id: id,
|
|
45
|
-
type: "application/json",
|
|
46
|
-
dangerouslySetInnerHTML: {
|
|
47
|
-
__html: encoded
|
|
48
|
-
},
|
|
49
|
-
nonce: props.nonce
|
|
50
|
-
}, id);
|
|
51
|
-
} catch (e) {
|
|
52
|
-
// TODO: Use unified logging
|
|
53
|
-
console.error('Error serializing json');
|
|
54
|
-
console.error(e);
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
scripts.push( /*#__PURE__*/(0, _jsx2.default)(Script, {}));
|
|
36
|
+
};
|
|
37
|
+
scripts.push( /*#__PURE__*/(0, _jsx2.default)(_react.Suspense, {}, globalId, /*#__PURE__*/(0, _jsx2.default)(Script, {})));
|
|
38
|
+
});
|
|
59
39
|
return {
|
|
60
40
|
...nextProps,
|
|
61
41
|
scripts
|
|
62
42
|
};
|
|
63
43
|
};
|
|
64
44
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJKU09OU3BvdXQiLCJpZCIsIm5leHQiLCJwcm9wcyIsIm5leHRQcm9wcyIsInNjcmlwdHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiaW5pdERhdGEiLCJmb3JFYWNoIiwia2V5IiwidXNlRGF0YSIsImdsb2JhbElkIiwiU2NyaXB0IiwiZGF0YSIsImVuY29kZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiX19odG1sIiwibm9uY2UiLCJlIiwiY29uc29sZSIsImVycm9yIiwicHVzaCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvanNvbi5zZXJ2ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEpTT05TcG91dCh7XG4gIGlkID0gJ2FuYW5zaS1qc29uJyxcbn06IHsgaWQ/OiBzdHJpbmcgfSA9IHt9KTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmVlZGVkTmV4dFxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZVtdID0gbmV4dFByb3BzLnNjcmlwdHMgPz8gW107XG5cbiAgICBPYmplY3QuZW50cmllcyhuZXh0UHJvcHMuaW5pdERhdGEgPz8ge30pLmZvckVhY2goKFtrZXksIHVzZURhdGFdKSA9PiB7XG4gICAgICBjb25zdCBnbG9iYWxJZCA9IGAke2lkfS4ke2tleX1gO1xuICAgICAgY29uc3QgU2NyaXB0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB1c2VEYXRhKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW5jb2RlZCA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICAgIGlkPXtnbG9iYWxJZH1cbiAgICAgICAgICAgICAgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgIF9faHRtbDogZW5jb2RlZCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gVE9ETzogVXNlIHVuaWZpZWQgbG9nZ2luZ1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHNlcmlhbGl6aW5nIGpzb24gZm9yICR7a2V5fWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzY3JpcHRzLnB1c2goXG4gICAgICAgIDxTdXNwZW5zZSBrZXk9e2dsb2JhbElkfT5cbiAgICAgICAgICA8U2NyaXB0IC8+XG4gICAgICAgIDwvU3VzcGVuc2U+LFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBzY3JpcHRzLFxuICAgIH07XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQVNlLFNBQVNBLFNBQVMsQ0FBQztFQUNoQ0MsRUFBRSxHQUFHO0FBQ1UsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUlyQjtFQUNBLE9BQU9DLElBQUksSUFBSSxNQUFNQyxLQUFLLElBQUk7SUFBQTtJQUM1QixNQUFNQyxTQUFTLEdBQUcsTUFBTUYsSUFBSSxDQUFDQyxLQUFLLENBQUM7SUFFbkMsTUFBTUUsT0FBMEIseUJBQUdELFNBQVMsQ0FBQ0MsT0FBTyxpQ0FBSSxFQUFFO0lBRTFEQyxNQUFNLENBQUNDLE9BQU8sd0JBQUNILFNBQVMsQ0FBQ0ksUUFBUSxrQ0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxHQUFHLEVBQUVDLE9BQU8sQ0FBQyxLQUFLO01BQ25FLE1BQU1DLFFBQVEsR0FBSSxHQUFFWCxFQUFHLElBQUdTLEdBQUksRUFBQztNQUMvQixNQUFNRyxNQUFNLEdBQUcsTUFBTTtRQUNuQixNQUFNQyxJQUFTLEdBQUdILE9BQU8sRUFBRTtRQUMzQixJQUFJO1VBQ0YsTUFBTUksT0FBTyxHQUFHQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0gsSUFBSSxDQUFDO1VBQ3BDLG9CQUNFO1lBQ0UsRUFBRSxFQUFFRixRQUFTO1lBQ2IsSUFBSSxFQUFDLGtCQUFrQjtZQUN2Qix1QkFBdUIsRUFBRTtjQUN2Qk0sTUFBTSxFQUFFSDtZQUNWLENBQUU7WUFDRixLQUFLLEVBQUVaLEtBQUssQ0FBQ2dCO1VBQU0sRUFDbkI7UUFFTixDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO1VBQ1Y7VUFDQUMsT0FBTyxDQUFDQyxLQUFLLENBQUUsOEJBQTZCWixHQUFJLEVBQUMsQ0FBQztVQUNsRFcsT0FBTyxDQUFDQyxLQUFLLENBQUNGLENBQUMsQ0FBQztVQUNoQixPQUFPLElBQUk7UUFDYjtNQUNGLENBQUM7TUFDRGYsT0FBTyxDQUFDa0IsSUFBSSxlQUNWLG1CQUFDLGVBQVEsTUFBTVgsUUFBUSxlQUNyQixtQkFBQyxNQUFNLEtBQUcsQ0FDRCxDQUNaO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsT0FBTztNQUNMLEdBQUdSLFNBQVM7TUFDWkM7SUFDRixDQUFDO0VBQ0gsQ0FBQztBQUNIIn0=
|
|
@@ -3,6 +3,6 @@ import type { ClientSpout } from './types';
|
|
|
3
3
|
export default function restHooksSpout(options?: {
|
|
4
4
|
getManagers: () => Manager[];
|
|
5
5
|
}): ClientSpout<{
|
|
6
|
-
|
|
6
|
+
getInitialData: (key: string) => Promise<any>;
|
|
7
7
|
}>;
|
|
8
8
|
//# sourceMappingURL=restHooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restHooks.d.ts","sourceRoot":"","sources":["../../src/spouts/restHooks.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"restHooks.d.ts","sourceRoot":"","sources":["../../src/spouts/restHooks.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAE1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,OAAO,GAAE;IACP,WAAW,EAAE,MAAM,OAAO,EAAE,CAAC;CACkB,GAChD,WAAW,CAAC;IAAE,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,CAAC,CAkBhE"}
|
package/lib/spouts/restHooks.js
CHANGED
|
@@ -10,12 +10,11 @@ function restHooksSpout(options = {
|
|
|
10
10
|
getManagers: () => [new _core.NetworkManager()]
|
|
11
11
|
}) {
|
|
12
12
|
return next => async props => {
|
|
13
|
-
|
|
14
|
-
const data =
|
|
13
|
+
const nextProps = await next(props);
|
|
14
|
+
const data = await props.getInitialData('resthooks');
|
|
15
15
|
if (process.env.NODE_ENV !== 'production' && !data) {
|
|
16
16
|
console.error('Rest Hooks init data not found');
|
|
17
17
|
}
|
|
18
|
-
const nextProps = await next(props);
|
|
19
18
|
return {
|
|
20
19
|
...nextProps,
|
|
21
20
|
app: /*#__PURE__*/(0, _jsx2.default)(_core.CacheProvider, {
|
|
@@ -25,4 +24,4 @@ function restHooksSpout(options = {
|
|
|
25
24
|
};
|
|
26
25
|
};
|
|
27
26
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXN0SG9va3NTcG91dCIsIm9wdGlvbnMiLCJnZXRNYW5hZ2VycyIsIk5ldHdvcmtNYW5hZ2VyIiwibmV4dCIsInByb3BzIiwibmV4dFByb3BzIiwiZGF0YSIsImdldEluaXRpYWxEYXRhIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsImVycm9yIiwiYXBwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9yZXN0SG9va3MudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhY2hlUHJvdmlkZXIsIE1hbmFnZXIsIE5ldHdvcmtNYW5hZ2VyIH0gZnJvbSAnQHJlc3QtaG9va3MvY29yZSc7XG5cbmltcG9ydCB0eXBlIHsgQ2xpZW50U3BvdXQgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzdEhvb2tzU3BvdXQoXG4gIG9wdGlvbnM6IHtcbiAgICBnZXRNYW5hZ2VyczogKCkgPT4gTWFuYWdlcltdO1xuICB9ID0geyBnZXRNYW5hZ2VyczogKCkgPT4gW25ldyBOZXR3b3JrTWFuYWdlcigpXSB9LFxuKTogQ2xpZW50U3BvdXQ8eyBnZXRJbml0aWFsRGF0YTogKGtleTogc3RyaW5nKSA9PiBQcm9taXNlPGFueT4gfT4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHByb3BzLmdldEluaXRpYWxEYXRhKCdyZXN0aG9va3MnKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFkYXRhKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdSZXN0IEhvb2tzIGluaXQgZGF0YSBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiAoXG4gICAgICAgIDxDYWNoZVByb3ZpZGVyIGluaXRpYWxTdGF0ZT17ZGF0YX0gbWFuYWdlcnM9e29wdGlvbnMuZ2V0TWFuYWdlcnMoKX0+XG4gICAgICAgICAge25leHRQcm9wcy5hcHB9XG4gICAgICAgIDwvQ2FjaGVQcm92aWRlcj5cbiAgICAgICksXG4gICAgfTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBSWUsU0FBU0EsY0FBYyxDQUNwQ0MsT0FFQyxHQUFHO0VBQUVDLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSUMsb0JBQWMsRUFBRTtBQUFFLENBQUMsRUFDZTtFQUNoRSxPQUFPQyxJQUFJLElBQUksTUFBTUMsS0FBSyxJQUFJO0lBQzVCLE1BQU1DLFNBQVMsR0FBRyxNQUFNRixJQUFJLENBQUNDLEtBQUssQ0FBQztJQUNuQyxNQUFNRSxJQUFJLEdBQUcsTUFBTUYsS0FBSyxDQUFDRyxjQUFjLENBQUMsV0FBVyxDQUFDO0lBRXBELElBQUlDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLEtBQUssWUFBWSxJQUFJLENBQUNKLElBQUksRUFBRTtNQUNsREssT0FBTyxDQUFDQyxLQUFLLENBQUMsZ0NBQWdDLENBQUM7SUFDakQ7SUFFQSxPQUFPO01BQ0wsR0FBR1AsU0FBUztNQUNaUSxHQUFHLGVBQ0QsbUJBQUMsbUJBQWE7UUFBQyxZQUFZLEVBQUVQLElBQUs7UUFBQyxRQUFRLEVBQUVOLE9BQU8sQ0FBQ0MsV0FBVztNQUFHLFdBQ2hFSSxTQUFTLENBQUNRLEdBQUc7SUFHcEIsQ0FBQztFQUNILENBQUM7QUFDSCJ9
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import { Controller, Manager, State } from '@rest-hooks/core';
|
|
2
3
|
import type { Store } from 'redux';
|
|
3
4
|
import type { ServerSpout } from './types';
|
|
@@ -9,5 +10,6 @@ export default function restHooksSpout(options?: {
|
|
|
9
10
|
store: Store<State<unknown>>;
|
|
10
11
|
}, {
|
|
11
12
|
initData?: Record<string, () => unknown>;
|
|
13
|
+
scripts?: React.ReactNode[];
|
|
12
14
|
}>;
|
|
13
15
|
//# sourceMappingURL=restHooks.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restHooks.server.d.ts","sourceRoot":"","sources":["../../src/spouts/restHooks.server.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAkB,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,OAAO,GAAE;IACP,WAAW,EAAE,MAAM,OAAO,EAAE,CAAC;CACkB,GAChD,WAAW,CACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB;IAAE,UAAU,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;CAAE,EAC7D;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"restHooks.server.d.ts","sourceRoot":"","sources":["../../src/spouts/restHooks.server.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAkB,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,OAAO,GAAE;IACP,WAAW,EAAE,MAAM,OAAO,EAAE,CAAC;CACkB,GAChD,WAAW,CACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB;IAAE,UAAU,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;CAAE,EAC7D;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;CAAE,CAC1E,CAuBA"}
|
|
@@ -6,12 +6,13 @@ exports.default = restHooksSpout;
|
|
|
6
6
|
var _jsx2 = _interopRequireDefault(require("@babel/runtime/helpers/jsx"));
|
|
7
7
|
var _react = _interopRequireDefault(require("react"));
|
|
8
8
|
var _core = require("@rest-hooks/core");
|
|
9
|
-
var
|
|
9
|
+
var _ssr = require("@rest-hooks/ssr");
|
|
10
10
|
function restHooksSpout(options = {
|
|
11
11
|
getManagers: () => [new _core.NetworkManager()]
|
|
12
12
|
}) {
|
|
13
|
+
const managers = options.getManagers();
|
|
13
14
|
return next => async props => {
|
|
14
|
-
const [ServerCacheProvider, controller, store] = (0,
|
|
15
|
+
const [ServerCacheProvider, useReadyCacheState, controller, store] = (0, _ssr.createPersistedStore)(managers);
|
|
15
16
|
const nextProps = await next({
|
|
16
17
|
...props,
|
|
17
18
|
controller,
|
|
@@ -21,7 +22,7 @@ function restHooksSpout(options = {
|
|
|
21
22
|
...nextProps,
|
|
22
23
|
initData: {
|
|
23
24
|
...nextProps.initData,
|
|
24
|
-
resthooks:
|
|
25
|
+
resthooks: useReadyCacheState
|
|
25
26
|
},
|
|
26
27
|
app: /*#__PURE__*/(0, _jsx2.default)(ServerCacheProvider, {}, void 0, nextProps.app),
|
|
27
28
|
// TODO: figure out how to only inject in next and not have to also put here
|
|
@@ -30,4 +31,4 @@ function restHooksSpout(options = {
|
|
|
30
31
|
};
|
|
31
32
|
};
|
|
32
33
|
}
|
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXN0SG9va3NTcG91dCIsIm9wdGlvbnMiLCJnZXRNYW5hZ2VycyIsIk5ldHdvcmtNYW5hZ2VyIiwibWFuYWdlcnMiLCJuZXh0IiwicHJvcHMiLCJTZXJ2ZXJDYWNoZVByb3ZpZGVyIiwidXNlUmVhZHlDYWNoZVN0YXRlIiwiY29udHJvbGxlciIsInN0b3JlIiwiY3JlYXRlUGVyc2lzdGVkU3RvcmUiLCJuZXh0UHJvcHMiLCJpbml0RGF0YSIsInJlc3Rob29rcyIsImFwcCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvcmVzdEhvb2tzLnNlcnZlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbGxlciwgTWFuYWdlciwgTmV0d29ya01hbmFnZXIsIFN0YXRlIH0gZnJvbSAnQHJlc3QtaG9va3MvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFN0b3JlIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHsgY3JlYXRlUGVyc2lzdGVkU3RvcmUgfSBmcm9tICdAcmVzdC1ob29rcy9zc3InO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3RIb29rc1Nwb3V0KFxuICBvcHRpb25zOiB7XG4gICAgZ2V0TWFuYWdlcnM6ICgpID0+IE1hbmFnZXJbXTtcbiAgfSA9IHsgZ2V0TWFuYWdlcnM6ICgpID0+IFtuZXcgTmV0d29ya01hbmFnZXIoKV0gfSxcbik6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgeyBjb250cm9sbGVyOiBDb250cm9sbGVyIH0gJiB7IHN0b3JlOiBTdG9yZTxTdGF0ZTx1bmtub3duPj4gfSxcbiAgeyBpbml0RGF0YT86IFJlY29yZDxzdHJpbmcsICgpID0+IHVua25vd24+OyBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW10gfVxuPiB7XG4gIGNvbnN0IG1hbmFnZXJzID0gb3B0aW9ucy5nZXRNYW5hZ2VycygpO1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgW1NlcnZlckNhY2hlUHJvdmlkZXIsIHVzZVJlYWR5Q2FjaGVTdGF0ZSwgY29udHJvbGxlciwgc3RvcmVdID1cbiAgICAgIGNyZWF0ZVBlcnNpc3RlZFN0b3JlKG1hbmFnZXJzKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgc3RvcmUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGluaXREYXRhOiB7XG4gICAgICAgIC4uLm5leHRQcm9wcy5pbml0RGF0YSxcbiAgICAgICAgcmVzdGhvb2tzOiB1c2VSZWFkeUNhY2hlU3RhdGUsXG4gICAgICB9LFxuICAgICAgYXBwOiA8U2VydmVyQ2FjaGVQcm92aWRlcj57bmV4dFByb3BzLmFwcH08L1NlcnZlckNhY2hlUHJvdmlkZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgY29udHJvbGxlcixcbiAgICAgIHN0b3JlLFxuICAgIH07XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUVBO0FBSWUsU0FBU0EsY0FBYyxDQUNwQ0MsT0FFQyxHQUFHO0VBQUVDLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSUMsb0JBQWMsRUFBRTtBQUFFLENBQUMsRUFLakQ7RUFDQSxNQUFNQyxRQUFRLEdBQUdILE9BQU8sQ0FBQ0MsV0FBVyxFQUFFO0VBQ3RDLE9BQU9HLElBQUksSUFBSSxNQUFNQyxLQUFLLElBQUk7SUFDNUIsTUFBTSxDQUFDQyxtQkFBbUIsRUFBRUMsa0JBQWtCLEVBQUVDLFVBQVUsRUFBRUMsS0FBSyxDQUFDLEdBQ2hFLElBQUFDLHlCQUFvQixFQUFDUCxRQUFRLENBQUM7SUFFaEMsTUFBTVEsU0FBUyxHQUFHLE1BQU1QLElBQUksQ0FBQztNQUMzQixHQUFHQyxLQUFLO01BQ1JHLFVBQVU7TUFDVkM7SUFDRixDQUFDLENBQUM7SUFDRixPQUFPO01BQ0wsR0FBR0UsU0FBUztNQUNaQyxRQUFRLEVBQUU7UUFDUixHQUFHRCxTQUFTLENBQUNDLFFBQVE7UUFDckJDLFNBQVMsRUFBRU47TUFDYixDQUFDO01BQ0RPLEdBQUcsZUFBRSxtQkFBQyxtQkFBbUIsY0FBRUgsU0FBUyxDQUFDRyxHQUFHLENBQXVCO01BQy9EO01BQ0FOLFVBQVU7TUFDVkM7SUFDRixDQUFDO0VBQ0gsQ0FBQztBQUNIIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anansi/core",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.34",
|
|
4
4
|
"description": "React 18 Framework",
|
|
5
5
|
"homepage": "https://github.com/ntucker/anansi/tree/master/packages/core#readme",
|
|
6
6
|
"repository": {
|
|
@@ -65,24 +65,24 @@
|
|
|
65
65
|
"browser"
|
|
66
66
|
],
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@anansi/babel-preset": "3.2.
|
|
68
|
+
"@anansi/babel-preset": "3.2.22",
|
|
69
69
|
"@anansi/browserslist-config": "1.4.1",
|
|
70
|
-
"@anansi/webpack-config": "13.0.
|
|
70
|
+
"@anansi/webpack-config": "13.0.24",
|
|
71
71
|
"@babel/cli": "7.19.3",
|
|
72
|
-
"@babel/core": "7.
|
|
72
|
+
"@babel/core": "7.20.2",
|
|
73
73
|
"@types/compression": "1.7.2",
|
|
74
74
|
"@types/source-map-support": "0.5.6",
|
|
75
75
|
"@types/tmp": "0.2.3",
|
|
76
76
|
"@types/webpack-hot-middleware": "2.25.6",
|
|
77
|
-
"jest": "29.
|
|
77
|
+
"jest": "29.3.0",
|
|
78
78
|
"rimraf": "3.0.2",
|
|
79
79
|
"webpack": "5.74.0",
|
|
80
80
|
"webpack-cli": "4.10.0"
|
|
81
81
|
},
|
|
82
82
|
"dependencies": {
|
|
83
|
-
"@anansi/router": "^0.6.
|
|
83
|
+
"@anansi/router": "^0.6.36",
|
|
84
84
|
"@babel/runtime": "^7.10.5",
|
|
85
|
-
"@rest-hooks/ssr": "^0.
|
|
85
|
+
"@rest-hooks/ssr": "^0.3.0-beta.2",
|
|
86
86
|
"chalk": "^4.0.0",
|
|
87
87
|
"compression": "^1.7.4",
|
|
88
88
|
"cross-fetch": "^3.1.5",
|
package/src/laySpouts.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { Suspense } from 'react';
|
|
2
2
|
|
|
3
3
|
import type { ServerSpout } from './types';
|
|
4
4
|
|
|
@@ -18,52 +18,36 @@ export default function JSONSpout({
|
|
|
18
18
|
const nextProps = await next(props);
|
|
19
19
|
|
|
20
20
|
const scripts: React.ReactNode[] = nextProps.scripts ?? [];
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
|
|
22
|
+
Object.entries(nextProps.initData ?? {}).forEach(([key, useData]) => {
|
|
23
|
+
const globalId = `${id}.${key}`;
|
|
24
|
+
const Script = () => {
|
|
25
|
+
const data: any = useData();
|
|
23
26
|
try {
|
|
24
27
|
const encoded = JSON.stringify(data);
|
|
25
|
-
|
|
28
|
+
return (
|
|
26
29
|
<script
|
|
27
|
-
|
|
28
|
-
id={`${id}-${key}`}
|
|
30
|
+
id={globalId}
|
|
29
31
|
type="application/json"
|
|
30
32
|
dangerouslySetInnerHTML={{
|
|
31
33
|
__html: encoded,
|
|
32
34
|
}}
|
|
33
35
|
nonce={props.nonce}
|
|
34
|
-
|
|
36
|
+
/>
|
|
35
37
|
);
|
|
36
38
|
} catch (e) {
|
|
37
39
|
// TODO: Use unified logging
|
|
40
|
+
console.error(`Error serializing json for ${key}`);
|
|
38
41
|
console.error(e);
|
|
42
|
+
return null;
|
|
39
43
|
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const encoded = JSON.stringify(data);
|
|
48
|
-
return (
|
|
49
|
-
<script
|
|
50
|
-
key={id}
|
|
51
|
-
id={id}
|
|
52
|
-
type="application/json"
|
|
53
|
-
dangerouslySetInnerHTML={{
|
|
54
|
-
__html: encoded,
|
|
55
|
-
}}
|
|
56
|
-
nonce={props.nonce}
|
|
57
|
-
/>
|
|
58
|
-
);
|
|
59
|
-
} catch (e) {
|
|
60
|
-
// TODO: Use unified logging
|
|
61
|
-
console.error('Error serializing json');
|
|
62
|
-
console.error(e);
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
scripts.push(<Script />);
|
|
44
|
+
};
|
|
45
|
+
scripts.push(
|
|
46
|
+
<Suspense key={globalId}>
|
|
47
|
+
<Script />
|
|
48
|
+
</Suspense>,
|
|
49
|
+
);
|
|
50
|
+
});
|
|
67
51
|
|
|
68
52
|
return {
|
|
69
53
|
...nextProps,
|
package/src/spouts/json.tsx
CHANGED
|
@@ -4,19 +4,33 @@ export default function JSONSpout({
|
|
|
4
4
|
id = 'anansi-json',
|
|
5
5
|
}: { id?: string } = {}): ClientSpout<
|
|
6
6
|
Record<string, unknown>,
|
|
7
|
-
{
|
|
7
|
+
{ getInitialData: (key: string) => Promise<any> }
|
|
8
8
|
> {
|
|
9
9
|
return next => async props => {
|
|
10
|
-
const
|
|
11
|
-
|
|
10
|
+
const getInitialData = (key: string) => {
|
|
11
|
+
const globalId = `${id}.${key}`;
|
|
12
|
+
return new Promise<any>((resolve, reject) => {
|
|
13
|
+
let el: HTMLScriptElement | null;
|
|
14
|
+
if ((el = document.getElementById(globalId) as any)) {
|
|
15
|
+
resolve(getDataFromEl(el, globalId));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
19
|
+
el = document.getElementById(globalId) as any;
|
|
20
|
+
if (el) resolve(getDataFromEl(el, globalId));
|
|
21
|
+
else reject(new Error(`failed to find DOM with ${key} state`));
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
return { ...(await next({ ...props, getInitialData })), getInitialData };
|
|
12
26
|
};
|
|
13
27
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (
|
|
28
|
+
|
|
29
|
+
function getDataFromEl(el: HTMLScriptElement, key: string) {
|
|
30
|
+
if (el.text === undefined) {
|
|
17
31
|
console.error(
|
|
18
|
-
`#${
|
|
32
|
+
`#${key} is completely empty. This could be due to CSP issues.`,
|
|
19
33
|
);
|
|
20
34
|
}
|
|
21
|
-
return
|
|
35
|
+
return el?.text ? JSON.parse(el?.text) : undefined;
|
|
22
36
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Controller, Manager, NetworkManager, State } from '@rest-hooks/core';
|
|
2
2
|
import type { Store } from 'redux';
|
|
3
|
+
import { createPersistedStore } from '@rest-hooks/ssr';
|
|
3
4
|
|
|
4
|
-
import { createPersistedStore } from './rhHelp';
|
|
5
5
|
import type { ServerSpout } from './types';
|
|
6
6
|
|
|
7
7
|
export default function restHooksSpout(
|
|
@@ -11,24 +11,23 @@ export default function restHooksSpout(
|
|
|
11
11
|
): ServerSpout<
|
|
12
12
|
Record<string, unknown>,
|
|
13
13
|
{ controller: Controller } & { store: Store<State<unknown>> },
|
|
14
|
-
{ initData?: Record<string, () => unknown
|
|
14
|
+
{ initData?: Record<string, () => unknown>; scripts?: React.ReactNode[] }
|
|
15
15
|
> {
|
|
16
|
+
const managers = options.getManagers();
|
|
16
17
|
return next => async props => {
|
|
17
|
-
const [ServerCacheProvider, controller, store] =
|
|
18
|
-
|
|
19
|
-
);
|
|
18
|
+
const [ServerCacheProvider, useReadyCacheState, controller, store] =
|
|
19
|
+
createPersistedStore(managers);
|
|
20
20
|
|
|
21
21
|
const nextProps = await next({
|
|
22
22
|
...props,
|
|
23
23
|
controller,
|
|
24
24
|
store,
|
|
25
25
|
});
|
|
26
|
-
|
|
27
26
|
return {
|
|
28
27
|
...nextProps,
|
|
29
28
|
initData: {
|
|
30
29
|
...nextProps.initData,
|
|
31
|
-
resthooks:
|
|
30
|
+
resthooks: useReadyCacheState,
|
|
32
31
|
},
|
|
33
32
|
app: <ServerCacheProvider>{nextProps.app}</ServerCacheProvider>,
|
|
34
33
|
// TODO: figure out how to only inject in next and not have to also put here
|
package/src/spouts/restHooks.tsx
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CacheProvider,
|
|
3
|
-
Manager,
|
|
4
|
-
NetworkManager,
|
|
5
|
-
State,
|
|
6
|
-
} from '@rest-hooks/core';
|
|
1
|
+
import { CacheProvider, Manager, NetworkManager } from '@rest-hooks/core';
|
|
7
2
|
|
|
8
3
|
import type { ClientSpout } from './types';
|
|
9
4
|
|
|
@@ -11,16 +6,15 @@ export default function restHooksSpout(
|
|
|
11
6
|
options: {
|
|
12
7
|
getManagers: () => Manager[];
|
|
13
8
|
} = { getManagers: () => [new NetworkManager()] },
|
|
14
|
-
): ClientSpout<{
|
|
9
|
+
): ClientSpout<{ getInitialData: (key: string) => Promise<any> }> {
|
|
15
10
|
return next => async props => {
|
|
16
|
-
const
|
|
11
|
+
const nextProps = await next(props);
|
|
12
|
+
const data = await props.getInitialData('resthooks');
|
|
17
13
|
|
|
18
14
|
if (process.env.NODE_ENV !== 'production' && !data) {
|
|
19
15
|
console.error('Rest Hooks init data not found');
|
|
20
16
|
}
|
|
21
17
|
|
|
22
|
-
const nextProps = await next(props);
|
|
23
|
-
|
|
24
18
|
return {
|
|
25
19
|
...nextProps,
|
|
26
20
|
app: (
|
package/lib/spouts/rhHelp.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { Controller, Manager } from '@rest-hooks/core';
|
|
3
|
-
export declare function createPersistedStore(managers?: Manager[]): readonly [({ children }: {
|
|
4
|
-
children: React.ReactNode;
|
|
5
|
-
}) => JSX.Element, Controller, import("redux").Store<import("rest-hooks").State<unknown>, import("rest-hooks").ActionTypes> & {
|
|
6
|
-
dispatch: unknown;
|
|
7
|
-
}];
|
|
8
|
-
//# sourceMappingURL=rhHelp.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rhHelp.d.ts","sourceRoot":"","sources":["../../src/spouts/rhHelp.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,UAAU,EAGV,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAI1B,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE;cAYA,MAAM,SAAS;;;GAYvE"}
|
package/lib/spouts/rhHelp.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
exports.__esModule = true;
|
|
5
|
-
exports.createPersistedStore = createPersistedStore;
|
|
6
|
-
var _jsx2 = _interopRequireDefault(require("@babel/runtime/helpers/jsx"));
|
|
7
|
-
var _react = _interopRequireDefault(require("react"));
|
|
8
|
-
var _restHooks = require("rest-hooks");
|
|
9
|
-
var _core = require("@rest-hooks/core");
|
|
10
|
-
var _redux = require("redux");
|
|
11
|
-
// TODO: Rework this and upstream to rest hooks
|
|
12
|
-
function createPersistedStore(managers) {
|
|
13
|
-
var _managers;
|
|
14
|
-
const controller = new _core.Controller();
|
|
15
|
-
managers = (_managers = managers) != null ? _managers : [new _core.NetworkManager()];
|
|
16
|
-
const reducer = (0, _core.createReducer)(controller);
|
|
17
|
-
const enhancer = (0, _redux.applyMiddleware)(...(0, _core.applyManager)(managers, controller), _restHooks.PromiseifyMiddleware);
|
|
18
|
-
const store = (0, _redux.createStore)(reducer, _core.initialState, enhancer);
|
|
19
|
-
managers.forEach(manager => manager.init == null ? void 0 : manager.init(store.getState()));
|
|
20
|
-
const selector = state => state;
|
|
21
|
-
function ServerCacheProvider({
|
|
22
|
-
children
|
|
23
|
-
}) {
|
|
24
|
-
return /*#__PURE__*/(0, _jsx2.default)(_restHooks.ExternalCacheProvider, {
|
|
25
|
-
store: store,
|
|
26
|
-
selector: selector,
|
|
27
|
-
controller: controller
|
|
28
|
-
}, void 0, children);
|
|
29
|
-
}
|
|
30
|
-
return [ServerCacheProvider, controller, store];
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVQZXJzaXN0ZWRTdG9yZSIsIm1hbmFnZXJzIiwiY29udHJvbGxlciIsIkNvbnRyb2xsZXIiLCJOZXR3b3JrTWFuYWdlciIsInJlZHVjZXIiLCJjcmVhdGVSZWR1Y2VyIiwiZW5oYW5jZXIiLCJhcHBseU1pZGRsZXdhcmUiLCJhcHBseU1hbmFnZXIiLCJQcm9taXNlaWZ5TWlkZGxld2FyZSIsInN0b3JlIiwiY3JlYXRlU3RvcmUiLCJpbml0aWFsU3RhdGUiLCJmb3JFYWNoIiwibWFuYWdlciIsImluaXQiLCJnZXRTdGF0ZSIsInNlbGVjdG9yIiwic3RhdGUiLCJTZXJ2ZXJDYWNoZVByb3ZpZGVyIiwiY2hpbGRyZW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL3JoSGVscC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXh0ZXJuYWxDYWNoZVByb3ZpZGVyLCBQcm9taXNlaWZ5TWlkZGxld2FyZSB9IGZyb20gJ3Jlc3QtaG9va3MnO1xuaW1wb3J0IHtcbiAgQ29udHJvbGxlcixcbiAgY3JlYXRlUmVkdWNlcixcbiAgaW5pdGlhbFN0YXRlLFxuICBNYW5hZ2VyLFxuICBhcHBseU1hbmFnZXIsXG4gIE5ldHdvcmtNYW5hZ2VyLFxufSBmcm9tICdAcmVzdC1ob29rcy9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZVN0b3JlLCBhcHBseU1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCc7XG5cbi8vIFRPRE86IFJld29yayB0aGlzIGFuZCB1cHN0cmVhbSB0byByZXN0IGhvb2tzXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGVyc2lzdGVkU3RvcmUobWFuYWdlcnM/OiBNYW5hZ2VyW10pIHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyKCk7XG4gIG1hbmFnZXJzID0gbWFuYWdlcnMgPz8gW25ldyBOZXR3b3JrTWFuYWdlcigpXTtcbiAgY29uc3QgcmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoY29udHJvbGxlcik7XG4gIGNvbnN0IGVuaGFuY2VyID0gYXBwbHlNaWRkbGV3YXJlKFxuICAgIC4uLmFwcGx5TWFuYWdlcihtYW5hZ2VycywgY29udHJvbGxlciksXG4gICAgUHJvbWlzZWlmeU1pZGRsZXdhcmUgYXMgYW55LFxuICApO1xuICBjb25zdCBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSBhcyBhbnksIGVuaGFuY2VyKTtcbiAgbWFuYWdlcnMuZm9yRWFjaChtYW5hZ2VyID0+IG1hbmFnZXIuaW5pdD8uKHN0b3JlLmdldFN0YXRlKCkpKTtcblxuICBjb25zdCBzZWxlY3RvciA9IChzdGF0ZTogYW55KSA9PiBzdGF0ZTtcbiAgZnVuY3Rpb24gU2VydmVyQ2FjaGVQcm92aWRlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHRlcm5hbENhY2hlUHJvdmlkZXJcbiAgICAgICAgc3RvcmU9e3N0b3JlfVxuICAgICAgICBzZWxlY3Rvcj17c2VsZWN0b3J9XG4gICAgICAgIGNvbnRyb2xsZXI9e2NvbnRyb2xsZXJ9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvRXh0ZXJuYWxDYWNoZVByb3ZpZGVyPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFtTZXJ2ZXJDYWNoZVByb3ZpZGVyLCBjb250cm9sbGVyLCBzdG9yZV0gYXMgY29uc3Q7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBUUE7QUFFQTtBQUNPLFNBQVNBLG9CQUFvQixDQUFDQyxRQUFvQixFQUFFO0VBQUE7RUFDekQsTUFBTUMsVUFBVSxHQUFHLElBQUlDLGdCQUFVLEVBQUU7RUFDbkNGLFFBQVEsZ0JBQUdBLFFBQVEsd0JBQUksQ0FBQyxJQUFJRyxvQkFBYyxFQUFFLENBQUM7RUFDN0MsTUFBTUMsT0FBTyxHQUFHLElBQUFDLG1CQUFhLEVBQUNKLFVBQVUsQ0FBQztFQUN6QyxNQUFNSyxRQUFRLEdBQUcsSUFBQUMsc0JBQWUsRUFDOUIsR0FBRyxJQUFBQyxrQkFBWSxFQUFDUixRQUFRLEVBQUVDLFVBQVUsQ0FBQyxFQUNyQ1EsK0JBQW9CLENBQ3JCO0VBQ0QsTUFBTUMsS0FBSyxHQUFHLElBQUFDLGtCQUFXLEVBQUNQLE9BQU8sRUFBRVEsa0JBQVksRUFBU04sUUFBUSxDQUFDO0VBQ2pFTixRQUFRLENBQUNhLE9BQU8sQ0FBQ0MsT0FBTyxJQUFJQSxPQUFPLENBQUNDLElBQUksb0JBQVpELE9BQU8sQ0FBQ0MsSUFBSSxDQUFHTCxLQUFLLENBQUNNLFFBQVEsRUFBRSxDQUFDLENBQUM7RUFFN0QsTUFBTUMsUUFBUSxHQUFJQyxLQUFVLElBQUtBLEtBQUs7RUFDdEMsU0FBU0MsbUJBQW1CLENBQUM7SUFBRUM7RUFBd0MsQ0FBQyxFQUFFO0lBQ3hFLG9CQUNFLG1CQUFDLGdDQUFxQjtNQUNwQixLQUFLLEVBQUVWLEtBQU07TUFDYixRQUFRLEVBQUVPLFFBQVM7TUFDbkIsVUFBVSxFQUFFaEI7SUFBVyxXQUV0Qm1CLFFBQVEsQ0FDYTtFQUU1QjtFQUNBLE9BQU8sQ0FBQ0QsbUJBQW1CLEVBQUVsQixVQUFVLEVBQUVTLEtBQUssQ0FBQztBQUNqRCJ9
|
package/src/spouts/rhHelp.tsx
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { ExternalCacheProvider, PromiseifyMiddleware } from 'rest-hooks';
|
|
2
|
-
import {
|
|
3
|
-
Controller,
|
|
4
|
-
createReducer,
|
|
5
|
-
initialState,
|
|
6
|
-
Manager,
|
|
7
|
-
applyManager,
|
|
8
|
-
NetworkManager,
|
|
9
|
-
} from '@rest-hooks/core';
|
|
10
|
-
import { createStore, applyMiddleware } from 'redux';
|
|
11
|
-
|
|
12
|
-
// TODO: Rework this and upstream to rest hooks
|
|
13
|
-
export function createPersistedStore(managers?: Manager[]) {
|
|
14
|
-
const controller = new Controller();
|
|
15
|
-
managers = managers ?? [new NetworkManager()];
|
|
16
|
-
const reducer = createReducer(controller);
|
|
17
|
-
const enhancer = applyMiddleware(
|
|
18
|
-
...applyManager(managers, controller),
|
|
19
|
-
PromiseifyMiddleware as any,
|
|
20
|
-
);
|
|
21
|
-
const store = createStore(reducer, initialState as any, enhancer);
|
|
22
|
-
managers.forEach(manager => manager.init?.(store.getState()));
|
|
23
|
-
|
|
24
|
-
const selector = (state: any) => state;
|
|
25
|
-
function ServerCacheProvider({ children }: { children: React.ReactNode }) {
|
|
26
|
-
return (
|
|
27
|
-
<ExternalCacheProvider
|
|
28
|
-
store={store}
|
|
29
|
-
selector={selector}
|
|
30
|
-
controller={controller}
|
|
31
|
-
>
|
|
32
|
-
{children}
|
|
33
|
-
</ExternalCacheProvider>
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
return [ServerCacheProvider, controller, store] as const;
|
|
37
|
-
}
|