@anansi/core 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/client.js +29 -21
- package/dist/client.js.map +1 -1
- package/dist/server.js +205 -30
- package/dist/server.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -2
- package/lib/index.server.d.ts +1 -0
- package/lib/index.server.d.ts.map +1 -1
- package/lib/index.server.js +6 -2
- package/lib/laySpouts.d.ts.map +1 -1
- package/lib/laySpouts.js +11 -2
- package/lib/scripts/startDevserver.d.ts.map +1 -1
- package/lib/scripts/startDevserver.js +5 -8
- package/lib/spouts/DocumentComponent.d.ts +6 -1
- package/lib/spouts/DocumentComponent.d.ts.map +1 -1
- package/lib/spouts/DocumentComponent.js +32 -9
- package/lib/spouts/csp.d.ts +5 -0
- package/lib/spouts/csp.d.ts.map +1 -0
- package/lib/spouts/csp.js +20 -0
- package/lib/spouts/document.d.ts +1 -1
- package/lib/spouts/document.d.ts.map +1 -1
- package/lib/spouts/document.js +3 -3
- package/lib/spouts/document.server.d.ts +3 -0
- package/lib/spouts/document.server.d.ts.map +1 -1
- package/lib/spouts/document.server.js +5 -2
- package/lib/spouts/json.d.ts +5 -0
- package/lib/spouts/json.d.ts.map +1 -0
- package/lib/spouts/json.js +22 -0
- package/lib/spouts/json.server.d.ts +13 -0
- package/lib/spouts/json.server.d.ts.map +1 -0
- package/lib/spouts/json.server.js +74 -0
- package/lib/spouts/restHooks.d.ts +1 -1
- package/lib/spouts/restHooks.d.ts.map +1 -1
- package/lib/spouts/restHooks.js +5 -9
- package/lib/spouts/restHooks.server.d.ts +41 -1
- package/lib/spouts/restHooks.server.d.ts.map +1 -1
- package/lib/spouts/restHooks.server.js +6 -3
- package/lib/spouts/rhHelp.d.ts +40 -0
- package/lib/spouts/rhHelp.d.ts.map +1 -0
- package/lib/spouts/rhHelp.js +47 -0
- package/lib/spouts/router.d.ts +1 -1
- package/lib/spouts/router.d.ts.map +1 -1
- package/lib/spouts/router.js +3 -3
- package/lib/spouts/types.d.ts +1 -0
- package/lib/spouts/types.d.ts.map +1 -1
- package/lib/spouts/types.js +1 -1
- package/package.json +2 -2
- package/src/index.server.ts +1 -0
- package/src/index.ts +1 -0
- package/src/laySpouts.tsx +5 -1
- package/src/scripts/startDevserver.ts +4 -6
- package/src/spouts/DocumentComponent.tsx +29 -6
- package/src/spouts/csp.ts +25 -0
- package/src/spouts/document.server.tsx +6 -0
- package/src/spouts/document.tsx +5 -3
- package/src/spouts/json.server.tsx +77 -0
- package/src/spouts/json.tsx +25 -0
- package/src/spouts/restHooks.server.tsx +7 -3
- package/src/spouts/restHooks.tsx +12 -7
- package/src/spouts/rhHelp.tsx +37 -0
- package/src/spouts/router.tsx +5 -3
- package/src/spouts/types.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
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.11.0](https://github.com/ntucker/anansi/compare/@anansi/core@0.10.0...@anansi/core@0.11.0) (2022-06-12)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### 🚀 Features
|
|
10
|
+
|
|
11
|
+
* Add CSP support ([#1541](https://github.com/ntucker/anansi/issues/1541)) ([e8a7415](https://github.com/ntucker/anansi/commit/e8a7415db892d725b76a2d7d451670437d6fb8eb))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### 💅 Enhancement
|
|
15
|
+
|
|
16
|
+
* Multi-module server side devserver ([b1b6f87](https://github.com/ntucker/anansi/commit/b1b6f873f2a50a9af05683a80d587ac87d90f8f9))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
6
20
|
## [0.10.0](https://github.com/ntucker/anansi/compare/@anansi/core@0.9.0...@anansi/core@0.10.0) (2022-06-09)
|
|
7
21
|
|
|
8
22
|
|
package/dist/client.js
CHANGED
|
@@ -51,6 +51,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
51
51
|
|
|
52
52
|
// EXPORTS
|
|
53
53
|
__webpack_require__.d(__webpack_exports__, {
|
|
54
|
+
"JSONSpout": () => (/* reexport */ JSONSpout),
|
|
54
55
|
"documentSpout": () => (/* reexport */ documentSpout),
|
|
55
56
|
"floodSpouts": () => (/* reexport */ floodSpouts),
|
|
56
57
|
"restHooksSpout": () => (/* reexport */ restHooksSpout),
|
|
@@ -74,8 +75,8 @@ async function floodSpouts(spouts, {
|
|
|
74
75
|
;// CONCATENATED MODULE: ./src/spouts/document.tsx
|
|
75
76
|
function documentSpout(options) {
|
|
76
77
|
return function (next) {
|
|
77
|
-
return async
|
|
78
|
-
const nextProps = await next();
|
|
78
|
+
return async initData => {
|
|
79
|
+
const nextProps = await next(initData);
|
|
79
80
|
return nextProps;
|
|
80
81
|
};
|
|
81
82
|
};
|
|
@@ -85,20 +86,17 @@ const external_react_namespaceObject = require("react");
|
|
|
85
86
|
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_namespaceObject);
|
|
86
87
|
;// CONCATENATED MODULE: external "@rest-hooks/core"
|
|
87
88
|
const core_namespaceObject = require("@rest-hooks/core");
|
|
88
|
-
;// CONCATENATED MODULE: external "@rest-hooks/ssr"
|
|
89
|
-
const ssr_namespaceObject = require("@rest-hooks/ssr");
|
|
90
89
|
;// CONCATENATED MODULE: ./src/spouts/restHooks.tsx
|
|
91
90
|
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.tsx";
|
|
92
91
|
|
|
93
92
|
|
|
94
|
-
|
|
95
93
|
function restHooksSpout(options = {
|
|
96
94
|
getManagers: () => [new core_namespaceObject.NetworkManager()]
|
|
97
95
|
}) {
|
|
98
96
|
return function (next) {
|
|
99
|
-
return async
|
|
100
|
-
const data =
|
|
101
|
-
const nextProps = await next();
|
|
97
|
+
return async initData => {
|
|
98
|
+
const data = initData.resthooks;
|
|
99
|
+
const nextProps = await next(initData);
|
|
102
100
|
return { ...nextProps,
|
|
103
101
|
app: /*#__PURE__*/external_react_default().createElement(core_namespaceObject.CacheProvider, {
|
|
104
102
|
initialState: data,
|
|
@@ -106,18 +104,10 @@ function restHooksSpout(options = {
|
|
|
106
104
|
__self: this,
|
|
107
105
|
__source: {
|
|
108
106
|
fileName: _jsxFileName,
|
|
109
|
-
lineNumber:
|
|
107
|
+
lineNumber: 28,
|
|
110
108
|
columnNumber: 11
|
|
111
109
|
}
|
|
112
|
-
}, nextProps.app
|
|
113
|
-
data: data,
|
|
114
|
-
__self: this,
|
|
115
|
-
__source: {
|
|
116
|
-
fileName: _jsxFileName,
|
|
117
|
-
lineNumber: 24,
|
|
118
|
-
columnNumber: 13
|
|
119
|
-
}
|
|
120
|
-
}))
|
|
110
|
+
}, nextProps.app)
|
|
121
111
|
};
|
|
122
112
|
};
|
|
123
113
|
};
|
|
@@ -150,11 +140,11 @@ function routerSpout(options) {
|
|
|
150
140
|
};
|
|
151
141
|
|
|
152
142
|
return function (next) {
|
|
153
|
-
return async
|
|
143
|
+
return async initData => {
|
|
154
144
|
const history = (0,external_history_namespaceObject.createBrowserHistory)();
|
|
155
145
|
const router = options.createRouter(history);
|
|
156
146
|
const matchedRoutes = router.getMatchedRoutes(history.location.pathname);
|
|
157
|
-
const nextProps = await next();
|
|
147
|
+
const nextProps = await next(initData);
|
|
158
148
|
const Router = createRouteComponent(router);
|
|
159
149
|
return { ...nextProps,
|
|
160
150
|
matchedRoutes,
|
|
@@ -163,7 +153,7 @@ function routerSpout(options) {
|
|
|
163
153
|
__self: this,
|
|
164
154
|
__source: {
|
|
165
155
|
fileName: router_jsxFileName,
|
|
166
|
-
lineNumber:
|
|
156
|
+
lineNumber: 48,
|
|
167
157
|
columnNumber: 14
|
|
168
158
|
}
|
|
169
159
|
}, nextProps.app)
|
|
@@ -171,11 +161,29 @@ function routerSpout(options) {
|
|
|
171
161
|
};
|
|
172
162
|
};
|
|
173
163
|
}
|
|
164
|
+
;// CONCATENATED MODULE: ./src/spouts/json.tsx
|
|
165
|
+
function JSONSpout({
|
|
166
|
+
id = 'anansi-json'
|
|
167
|
+
} = {}) {
|
|
168
|
+
return function (next) {
|
|
169
|
+
return async () => {
|
|
170
|
+
const initData = getDatafromDOM(id);
|
|
171
|
+
const nextProps = await next(initData);
|
|
172
|
+
return nextProps;
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function getDatafromDOM(id) {
|
|
178
|
+
const element = document.querySelector(`#${id}`);
|
|
179
|
+
return element !== null && element !== void 0 && element.innerHTML ? JSON.parse(element === null || element === void 0 ? void 0 : element.innerHTML) : undefined;
|
|
180
|
+
}
|
|
174
181
|
;// CONCATENATED MODULE: ./src/index.ts
|
|
175
182
|
|
|
176
183
|
|
|
177
184
|
|
|
178
185
|
|
|
186
|
+
|
|
179
187
|
module.exports = __webpack_exports__;
|
|
180
188
|
/******/ })()
|
|
181
189
|
;
|
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
|
|
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;;ACDA;AAIA;AAGA;AACA;AAEA;AACA;AACA;AACA;;ACvBA;;;ACAA;;;;ACAA;AAWA;AAGA;AAAA;AAEA;AAGA;AACA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAHA;AAQA;AACA;AACA;;AClCA;;ACAA;;;ACAA;AACA;AACA;AAOA;AAMA;AAGA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;;AAEA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJA;AAMA;AACA;AACA;;AC5CA;AACA;AADA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;ACxBA;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/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: () => 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 { ResolveProps } from './types';\n\ntype NeededProps = {\n matchedRoutes: Route<any>[];\n title?: string;\n} & ResolveProps;\n\nexport default function documentSpout(options: {\n head?: React.ReactNode;\n title: string;\n}) {\n return function <T extends NeededProps>(\n next: (initData: Record<string, unknown>) => Promise<T>,\n ) {\n return async (initData: Record<string, unknown>) => {\n const nextProps = await next(initData);\n\n return nextProps;\n };\n };\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@rest-hooks/core\");","import {\n CacheProvider,\n Manager,\n NetworkManager,\n State,\n} from '@rest-hooks/core';\n\nimport type { ResolveProps } from './types';\n\ntype NeededProps = ResolveProps;\n\nexport default function restHooksSpout(\n options: {\n getManagers: () => Manager[];\n } = { getManagers: () => [new NetworkManager()] },\n) {\n return function <T extends NeededProps>(\n next: (initData: Record<string, unknown>) => Promise<T>,\n ) {\n return async (initData: Record<string, unknown>) => {\n const data = initData.resthooks as State<unknown>;\n\n const nextProps = await next(initData);\n\n return {\n ...nextProps,\n app: (\n <CacheProvider initialState={data} managers={options.getManagers()}>\n {nextProps.app}\n </CacheProvider>\n ),\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 { ResolveProps, CreateRouter } from './types';\n\ntype NeededProps = ResolveProps;\n\nexport default function routerSpout<ResolveWith>(options: {\n resolveWith?: any;\n useResolveWith: () => ResolveWith;\n createRouter: CreateRouter<ResolveWith>;\n onChange?: (update: Update, callback: () => void | undefined) => void;\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 function <T extends NeededProps>(\n next: (initData: Record<string, unknown>) => Promise<T>,\n ) {\n return async (initData: Record<string, unknown>) => {\n const history = createBrowserHistory();\n const router = options.createRouter(history);\n const matchedRoutes = router.getMatchedRoutes(history.location.pathname);\n\n const nextProps = await next(initData);\n\n const Router = createRouteComponent(router);\n return {\n ...nextProps,\n matchedRoutes,\n router,\n app: <Router>{nextProps.app}</Router>,\n };\n };\n };\n}\n","import React from 'react';\nimport type { Route } from '@anansi/router';\n\nimport type { ResolveProps } from './types';\n\ntype NeededProps = ResolveProps;\n\nexport default function JSONSpout({\n id = 'anansi-json',\n}: { id?: string } = {}) {\n return function <T extends NeededProps>(\n next: (initData: Record<string, unknown>) => Promise<T>,\n ) {\n return async () => {\n const initData = getDatafromDOM(id);\n const nextProps = await next(initData);\n\n return nextProps;\n };\n };\n}\nfunction getDatafromDOM(id: string): Record<string, unknown> {\n const element = document.querySelector(`#${id}`);\n return element?.innerHTML ? JSON.parse(element?.innerHTML) : undefined;\n}\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';\n"],"names":[],"sourceRoot":""}
|
package/dist/server.js
CHANGED
|
@@ -51,6 +51,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
51
51
|
|
|
52
52
|
// EXPORTS
|
|
53
53
|
__webpack_require__.d(__webpack_exports__, {
|
|
54
|
+
"JSONSpout": () => (/* reexport */ JSONSpout),
|
|
54
55
|
"documentSpout": () => (/* reexport */ DocumentSpout),
|
|
55
56
|
"laySpouts": () => (/* reexport */ laySpouts),
|
|
56
57
|
"prefetchSpout": () => (/* reexport */ prefetchSpout),
|
|
@@ -60,18 +61,24 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
60
61
|
|
|
61
62
|
;// CONCATENATED MODULE: external "react-dom/server"
|
|
62
63
|
const server_namespaceObject = require("react-dom/server");
|
|
64
|
+
;// CONCATENATED MODULE: external "crypto"
|
|
65
|
+
const external_crypto_namespaceObject = require("crypto");
|
|
66
|
+
var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto_namespaceObject);
|
|
63
67
|
;// CONCATENATED MODULE: ./src/laySpouts.tsx
|
|
64
68
|
|
|
69
|
+
|
|
65
70
|
function laySpouts(spouts, {
|
|
66
71
|
timeoutMS = 200
|
|
67
72
|
} = {}) {
|
|
68
73
|
const render = async (clientManifest, req, res) => {
|
|
74
|
+
const nonce = external_crypto_default().randomBytes(16).toString('base64');
|
|
69
75
|
const {
|
|
70
76
|
app
|
|
71
77
|
} = await spouts({
|
|
72
78
|
clientManifest,
|
|
73
79
|
req,
|
|
74
|
-
res
|
|
80
|
+
res,
|
|
81
|
+
nonce
|
|
75
82
|
});
|
|
76
83
|
let didError = false;
|
|
77
84
|
const {
|
|
@@ -95,6 +102,8 @@ function laySpouts(spouts, {
|
|
|
95
102
|
|};
|
|
96
103
|
*/
|
|
97
104
|
{
|
|
105
|
+
nonce,
|
|
106
|
+
|
|
98
107
|
//bootstrapScripts: assets.filter(asset => asset.endsWith('.js')),
|
|
99
108
|
onShellReady() {
|
|
100
109
|
//managers.forEach(manager => manager.cleanup());
|
|
@@ -127,31 +136,77 @@ function laySpouts(spouts, {
|
|
|
127
136
|
;// CONCATENATED MODULE: external "react"
|
|
128
137
|
const external_react_namespaceObject = require("react");
|
|
129
138
|
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_namespaceObject);
|
|
139
|
+
;// CONCATENATED MODULE: ./src/spouts/csp.ts
|
|
140
|
+
// TODO: memoize this
|
|
141
|
+
function buildPolicy(policyObj) {
|
|
142
|
+
return Object.keys(policyObj).map(key => {
|
|
143
|
+
const val = Array.isArray(policyObj[key]) ? [...new Set(policyObj[key]).values()].filter(v => v).join(' ') : policyObj[key]; // move strict dynamic to the end of the policy if it exists to be backwards compatible with csp2
|
|
144
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic
|
|
145
|
+
|
|
146
|
+
if (typeof val === 'string' && val.includes("'strict-dynamic'")) {
|
|
147
|
+
const newVal = `${val.replace(/\s?'strict-dynamic'\s?/gi, ' ').trim()} 'strict-dynamic'`;
|
|
148
|
+
return `${key} ${newVal}`;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return `${key} ${val}`;
|
|
152
|
+
}).join('; ');
|
|
153
|
+
}
|
|
130
154
|
;// CONCATENATED MODULE: ./src/spouts/DocumentComponent.tsx
|
|
131
155
|
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/DocumentComponent.tsx",
|
|
132
156
|
_process$env$WEBPACK_;
|
|
133
157
|
|
|
134
158
|
|
|
159
|
+
|
|
135
160
|
function Document({
|
|
136
161
|
assets,
|
|
137
162
|
head,
|
|
138
163
|
children,
|
|
139
164
|
title,
|
|
140
165
|
rootId,
|
|
141
|
-
charSet
|
|
166
|
+
charSet,
|
|
167
|
+
csPolicy,
|
|
168
|
+
nonce,
|
|
169
|
+
scripts
|
|
142
170
|
}) {
|
|
171
|
+
let cspMeta = null;
|
|
172
|
+
|
|
173
|
+
if (csPolicy) {
|
|
174
|
+
// add nonce to policy
|
|
175
|
+
const policy = { ...csPolicy
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
if (nonce) {
|
|
179
|
+
if (typeof policy['script-src'] === 'string') {
|
|
180
|
+
policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
|
|
181
|
+
} else {
|
|
182
|
+
policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
cspMeta = /*#__PURE__*/external_react_default().createElement("meta", {
|
|
187
|
+
httpEquiv: "Content-Security-Policy",
|
|
188
|
+
content: buildPolicy(policy),
|
|
189
|
+
__self: this,
|
|
190
|
+
__source: {
|
|
191
|
+
fileName: _jsxFileName,
|
|
192
|
+
lineNumber: 41,
|
|
193
|
+
columnNumber: 7
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
143
198
|
return /*#__PURE__*/external_react_default().createElement("html", {
|
|
144
199
|
__self: this,
|
|
145
200
|
__source: {
|
|
146
201
|
fileName: _jsxFileName,
|
|
147
|
-
lineNumber:
|
|
202
|
+
lineNumber: 45,
|
|
148
203
|
columnNumber: 5
|
|
149
204
|
}
|
|
150
205
|
}, /*#__PURE__*/external_react_default().createElement("head", {
|
|
151
206
|
__self: this,
|
|
152
207
|
__source: {
|
|
153
208
|
fileName: _jsxFileName,
|
|
154
|
-
lineNumber:
|
|
209
|
+
lineNumber: 46,
|
|
155
210
|
columnNumber: 7
|
|
156
211
|
}
|
|
157
212
|
}, /*#__PURE__*/external_react_default().createElement("meta", {
|
|
@@ -159,31 +214,31 @@ function Document({
|
|
|
159
214
|
__self: this,
|
|
160
215
|
__source: {
|
|
161
216
|
fileName: _jsxFileName,
|
|
162
|
-
lineNumber:
|
|
217
|
+
lineNumber: 47,
|
|
163
218
|
columnNumber: 9
|
|
164
219
|
}
|
|
165
|
-
}), head, assets.map((asset, i) => /*#__PURE__*/external_react_default().createElement("link", {
|
|
220
|
+
}), cspMeta, head, assets.map((asset, i) => /*#__PURE__*/external_react_default().createElement("link", {
|
|
166
221
|
key: i,
|
|
167
222
|
rel: "preload",
|
|
168
223
|
...asset,
|
|
169
224
|
__self: this,
|
|
170
225
|
__source: {
|
|
171
226
|
fileName: _jsxFileName,
|
|
172
|
-
lineNumber:
|
|
227
|
+
lineNumber: 51,
|
|
173
228
|
columnNumber: 11
|
|
174
229
|
}
|
|
175
230
|
})), /*#__PURE__*/external_react_default().createElement("title", {
|
|
176
231
|
__self: this,
|
|
177
232
|
__source: {
|
|
178
233
|
fileName: _jsxFileName,
|
|
179
|
-
lineNumber:
|
|
234
|
+
lineNumber: 53,
|
|
180
235
|
columnNumber: 9
|
|
181
236
|
}
|
|
182
237
|
}, title)), /*#__PURE__*/external_react_default().createElement("body", {
|
|
183
238
|
__self: this,
|
|
184
239
|
__source: {
|
|
185
240
|
fileName: _jsxFileName,
|
|
186
|
-
lineNumber:
|
|
241
|
+
lineNumber: 55,
|
|
187
242
|
columnNumber: 7
|
|
188
243
|
}
|
|
189
244
|
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
@@ -191,20 +246,10 @@ function Document({
|
|
|
191
246
|
__self: this,
|
|
192
247
|
__source: {
|
|
193
248
|
fileName: _jsxFileName,
|
|
194
|
-
lineNumber:
|
|
249
|
+
lineNumber: 56,
|
|
195
250
|
columnNumber: 9
|
|
196
251
|
}
|
|
197
|
-
}, children),
|
|
198
|
-
dangerouslySetInnerHTML: {
|
|
199
|
-
__html: `assetManifest = ${JSON.stringify(assets)};`
|
|
200
|
-
},
|
|
201
|
-
__self: this,
|
|
202
|
-
__source: {
|
|
203
|
-
fileName: _jsxFileName,
|
|
204
|
-
lineNumber: 31,
|
|
205
|
-
columnNumber: 9
|
|
206
|
-
}
|
|
207
|
-
}), assets.filter(({
|
|
252
|
+
}, children), scripts, assets.filter(({
|
|
208
253
|
href
|
|
209
254
|
}) => href.endsWith('.js')).map(({
|
|
210
255
|
href
|
|
@@ -215,7 +260,7 @@ function Document({
|
|
|
215
260
|
__self: this,
|
|
216
261
|
__source: {
|
|
217
262
|
fileName: _jsxFileName,
|
|
218
|
-
lineNumber:
|
|
263
|
+
lineNumber: 61,
|
|
219
264
|
columnNumber: 13
|
|
220
265
|
}
|
|
221
266
|
}))));
|
|
@@ -227,7 +272,7 @@ Document.defaultProps = {
|
|
|
227
272
|
__self: undefined,
|
|
228
273
|
__source: {
|
|
229
274
|
fileName: _jsxFileName,
|
|
230
|
-
lineNumber:
|
|
275
|
+
lineNumber: 70,
|
|
231
276
|
columnNumber: 7
|
|
232
277
|
}
|
|
233
278
|
}), /*#__PURE__*/external_react_default().createElement("link", {
|
|
@@ -236,12 +281,13 @@ Document.defaultProps = {
|
|
|
236
281
|
__self: undefined,
|
|
237
282
|
__source: {
|
|
238
283
|
fileName: _jsxFileName,
|
|
239
|
-
lineNumber:
|
|
284
|
+
lineNumber: 71,
|
|
240
285
|
columnNumber: 7
|
|
241
286
|
}
|
|
242
287
|
})),
|
|
243
288
|
charSet: 'utf-8',
|
|
244
|
-
rootId: 'anansi-root'
|
|
289
|
+
rootId: 'anansi-root',
|
|
290
|
+
scripts: null
|
|
245
291
|
};
|
|
246
292
|
;// CONCATENATED MODULE: ./src/spouts/document.server.tsx
|
|
247
293
|
var document_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/document.server.tsx";
|
|
@@ -290,10 +336,13 @@ function DocumentSpout(options) {
|
|
|
290
336
|
title: (_nextProps$title = nextProps.title) != null ? _nextProps$title : options.title,
|
|
291
337
|
assets: assets,
|
|
292
338
|
rootId: options.rootId,
|
|
339
|
+
nonce: props.nonce,
|
|
340
|
+
csPolicy: options.csPolicy,
|
|
341
|
+
scripts: nextProps.scripts,
|
|
293
342
|
__self: this,
|
|
294
343
|
__source: {
|
|
295
344
|
fileName: document_server_jsxFileName,
|
|
296
|
-
lineNumber:
|
|
345
|
+
lineNumber: 56,
|
|
297
346
|
columnNumber: 14
|
|
298
347
|
}
|
|
299
348
|
}, nextProps.app)
|
|
@@ -311,8 +360,51 @@ function childrenAssets(chunk) {
|
|
|
311
360
|
}
|
|
312
361
|
;// CONCATENATED MODULE: external "@rest-hooks/core"
|
|
313
362
|
const core_namespaceObject = require("@rest-hooks/core");
|
|
314
|
-
;// CONCATENATED MODULE: external "
|
|
315
|
-
const
|
|
363
|
+
;// CONCATENATED MODULE: external "rest-hooks"
|
|
364
|
+
const external_rest_hooks_namespaceObject = require("rest-hooks");
|
|
365
|
+
;// CONCATENATED MODULE: external "redux"
|
|
366
|
+
const external_redux_namespaceObject = require("redux");
|
|
367
|
+
;// CONCATENATED MODULE: ./src/spouts/rhHelp.tsx
|
|
368
|
+
var rhHelp_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/rhHelp.tsx";
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
// TODO: Rework this and upstream to rest hooks
|
|
373
|
+
|
|
374
|
+
function createPersistedStore(managers) {
|
|
375
|
+
var _managers;
|
|
376
|
+
|
|
377
|
+
const controller = new core_namespaceObject.Controller();
|
|
378
|
+
managers = (_managers = managers) != null ? _managers : [new core_namespaceObject.NetworkManager()];
|
|
379
|
+
const reducer = (0,core_namespaceObject.createReducer)(controller);
|
|
380
|
+
const enhancer = (0,external_redux_namespaceObject.applyMiddleware)(...(0,core_namespaceObject.applyManager)(managers, controller), external_rest_hooks_namespaceObject.PromiseifyMiddleware);
|
|
381
|
+
const store = (0,external_redux_namespaceObject.createStore)(reducer, core_namespaceObject.initialState, enhancer);
|
|
382
|
+
managers.forEach(manager => {
|
|
383
|
+
var _manager$init;
|
|
384
|
+
|
|
385
|
+
return (_manager$init = manager.init) === null || _manager$init === void 0 ? void 0 : _manager$init.call(manager, store.getState());
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
const selector = state => state;
|
|
389
|
+
|
|
390
|
+
function ServerCacheProvider({
|
|
391
|
+
children
|
|
392
|
+
}) {
|
|
393
|
+
return /*#__PURE__*/external_react_default().createElement(external_rest_hooks_namespaceObject.ExternalCacheProvider, {
|
|
394
|
+
store: store,
|
|
395
|
+
selector: selector,
|
|
396
|
+
controller: controller,
|
|
397
|
+
__self: this,
|
|
398
|
+
__source: {
|
|
399
|
+
fileName: rhHelp_jsxFileName,
|
|
400
|
+
lineNumber: 27,
|
|
401
|
+
columnNumber: 7
|
|
402
|
+
}
|
|
403
|
+
}, children);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
return [ServerCacheProvider, controller, store];
|
|
407
|
+
}
|
|
316
408
|
;// CONCATENATED MODULE: ./src/spouts/restHooks.server.tsx
|
|
317
409
|
var restHooks_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.server.tsx";
|
|
318
410
|
|
|
@@ -323,15 +415,18 @@ function restHooksSpout(options = {
|
|
|
323
415
|
}) {
|
|
324
416
|
return function (next) {
|
|
325
417
|
return async props => {
|
|
326
|
-
const [ServerCacheProvider, controller] =
|
|
418
|
+
const [ServerCacheProvider, controller, store] = createPersistedStore(options.getManagers());
|
|
327
419
|
const nextProps = await next(props);
|
|
328
420
|
return { ...nextProps,
|
|
329
421
|
controller,
|
|
422
|
+
initData: { ...nextProps.initData,
|
|
423
|
+
resthooks: () => store.getState()
|
|
424
|
+
},
|
|
330
425
|
app: /*#__PURE__*/external_react_default().createElement(ServerCacheProvider, {
|
|
331
426
|
__self: this,
|
|
332
427
|
__source: {
|
|
333
428
|
fileName: restHooks_server_jsxFileName,
|
|
334
|
-
lineNumber:
|
|
429
|
+
lineNumber: 30,
|
|
335
430
|
columnNumber: 14
|
|
336
431
|
}
|
|
337
432
|
}, nextProps.app)
|
|
@@ -411,12 +506,92 @@ function prefetchSpout(field) {
|
|
|
411
506
|
};
|
|
412
507
|
};
|
|
413
508
|
}
|
|
509
|
+
;// CONCATENATED MODULE: ./src/spouts/json.server.tsx
|
|
510
|
+
var json_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/json.server.tsx";
|
|
511
|
+
|
|
512
|
+
function JSONSpout({
|
|
513
|
+
id = 'anansi-json'
|
|
514
|
+
} = {}) {
|
|
515
|
+
return function (next) {
|
|
516
|
+
return async props => {
|
|
517
|
+
var _nextProps$scripts;
|
|
518
|
+
|
|
519
|
+
const nextProps = await next(props);
|
|
520
|
+
const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
|
|
521
|
+
/*
|
|
522
|
+
Object.entries(nextProps.initData ?? {}).forEach(([key, data]) => {
|
|
523
|
+
try {
|
|
524
|
+
const encoded = JSON.stringify(data);
|
|
525
|
+
scripts.push(
|
|
526
|
+
<script
|
|
527
|
+
key={key}
|
|
528
|
+
id={`${id}-${key}`}
|
|
529
|
+
type="application/json"
|
|
530
|
+
dangerouslySetInnerHTML={{
|
|
531
|
+
__html: encoded,
|
|
532
|
+
}}
|
|
533
|
+
nonce={props.nonce}
|
|
534
|
+
/>,
|
|
535
|
+
);
|
|
536
|
+
} catch (e) {
|
|
537
|
+
// TODO: Use unified logging
|
|
538
|
+
console.error(e);
|
|
539
|
+
}
|
|
540
|
+
});*/
|
|
541
|
+
|
|
542
|
+
const Script = () => {
|
|
543
|
+
try {
|
|
544
|
+
var _nextProps$initData;
|
|
545
|
+
|
|
546
|
+
const data = {};
|
|
547
|
+
Object.entries((_nextProps$initData = nextProps.initData) != null ? _nextProps$initData : {}).forEach(([key, getData]) => {
|
|
548
|
+
data[key] = getData();
|
|
549
|
+
});
|
|
550
|
+
const encoded = JSON.stringify(data);
|
|
551
|
+
return /*#__PURE__*/external_react_default().createElement("script", {
|
|
552
|
+
key: id,
|
|
553
|
+
id: id,
|
|
554
|
+
type: "application/json",
|
|
555
|
+
dangerouslySetInnerHTML: {
|
|
556
|
+
__html: encoded
|
|
557
|
+
},
|
|
558
|
+
nonce: props.nonce,
|
|
559
|
+
__self: this,
|
|
560
|
+
__source: {
|
|
561
|
+
fileName: json_server_jsxFileName,
|
|
562
|
+
lineNumber: 52,
|
|
563
|
+
columnNumber: 13
|
|
564
|
+
}
|
|
565
|
+
});
|
|
566
|
+
} catch (e) {
|
|
567
|
+
// TODO: Use unified logging
|
|
568
|
+
console.error('Error serializing json');
|
|
569
|
+
console.error(e);
|
|
570
|
+
return null;
|
|
571
|
+
}
|
|
572
|
+
};
|
|
573
|
+
|
|
574
|
+
scripts.push( /*#__PURE__*/external_react_default().createElement(Script, {
|
|
575
|
+
__self: this,
|
|
576
|
+
__source: {
|
|
577
|
+
fileName: json_server_jsxFileName,
|
|
578
|
+
lineNumber: 69,
|
|
579
|
+
columnNumber: 20
|
|
580
|
+
}
|
|
581
|
+
}));
|
|
582
|
+
return { ...nextProps,
|
|
583
|
+
scripts
|
|
584
|
+
};
|
|
585
|
+
};
|
|
586
|
+
};
|
|
587
|
+
}
|
|
414
588
|
;// CONCATENATED MODULE: ./src/index.server.ts
|
|
415
589
|
|
|
416
590
|
|
|
417
591
|
|
|
418
592
|
|
|
419
593
|
|
|
594
|
+
|
|
420
595
|
module.exports = __webpack_exports__;
|
|
421
596
|
/******/ })()
|
|
422
597
|
;
|