@anansi/core 0.10.0 → 0.11.2
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 +38 -0
- package/dist/client.js +29 -21
- package/dist/client.js.map +1 -1
- package/dist/server.js +206 -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 +21 -10
- package/lib/spouts/DocumentComponent.d.ts +6 -1
- package/lib/spouts/DocumentComponent.d.ts.map +1 -1
- package/lib/spouts/DocumentComponent.js +33 -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 +3 -3
- package/src/index.server.ts +1 -0
- package/src/index.ts +1 -0
- package/src/laySpouts.tsx +5 -1
- package/src/scripts/startDevserver.ts +21 -7
- package/src/spouts/DocumentComponent.tsx +34 -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,44 @@
|
|
|
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.2](https://github.com/ntucker/anansi/compare/@anansi/core@0.11.1...@anansi/core@0.11.2) (2022-06-13)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### 💅 Enhancement
|
|
10
|
+
|
|
11
|
+
* Do not override 'unsafe-inline' with nonce for CSP ([cfbd2bd](https://github.com/ntucker/anansi/commit/cfbd2bdfa69ae97ef2db6a824496888420251371))
|
|
12
|
+
* Use 'text' to get inline JSON ([9ecdb07](https://github.com/ntucker/anansi/commit/9ecdb074d01e6f09c28a685433105cf0d6f711cc))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### 📦 Package
|
|
16
|
+
|
|
17
|
+
* Update `webpack-cli` to v4.10.0 ([#1543](https://github.com/ntucker/anansi/issues/1543)) ([298cb01](https://github.com/ntucker/anansi/commit/298cb018db2975fb5c926c48d2145d7c1f4515b9))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### [0.11.1](https://github.com/ntucker/anansi/compare/@anansi/core@0.11.0...@anansi/core@0.11.1) (2022-06-13)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### 🐛 Bug Fix
|
|
25
|
+
|
|
26
|
+
* Use call user-config devServer.setupMiddleware ([99acd8c](https://github.com/ntucker/anansi/commit/99acd8c9386bfc338ef8733d19a734b2a8be21dd))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## [0.11.0](https://github.com/ntucker/anansi/compare/@anansi/core@0.10.0...@anansi/core@0.11.0) (2022-06-12)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### 🚀 Features
|
|
34
|
+
|
|
35
|
+
* Add CSP support ([#1541](https://github.com/ntucker/anansi/issues/1541)) ([e8a7415](https://github.com/ntucker/anansi/commit/e8a7415db892d725b76a2d7d451670437d6fb8eb))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
### 💅 Enhancement
|
|
39
|
+
|
|
40
|
+
* Multi-module server side devserver ([b1b6f87](https://github.com/ntucker/anansi/commit/b1b6f873f2a50a9af05683a80d587ac87d90f8f9))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
6
44
|
## [0.10.0](https://github.com/ntucker/anansi/compare/@anansi/core@0.9.0...@anansi/core@0.10.0) (2022-06-09)
|
|
7
45
|
|
|
8
46
|
|
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.text ? JSON.parse(element === null || element === void 0 ? void 0 : element.text) : 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: HTMLScriptElement | null = document.querySelector(`#${id}`);\n return element?.text ? JSON.parse(element?.text) : 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,78 @@ 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 && ( // nonces negate 'unsafe-inline' so do not add it if that directive exists
|
|
179
|
+
!policy['script-src'] || !policy['script-src'].includes("'unsafe-inline'"))) {
|
|
180
|
+
if (typeof policy['script-src'] === 'string') {
|
|
181
|
+
policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
|
|
182
|
+
} else {
|
|
183
|
+
policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
cspMeta = /*#__PURE__*/external_react_default().createElement("meta", {
|
|
188
|
+
httpEquiv: "Content-Security-Policy",
|
|
189
|
+
content: buildPolicy(policy),
|
|
190
|
+
__self: this,
|
|
191
|
+
__source: {
|
|
192
|
+
fileName: _jsxFileName,
|
|
193
|
+
lineNumber: 46,
|
|
194
|
+
columnNumber: 7
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
|
|
143
199
|
return /*#__PURE__*/external_react_default().createElement("html", {
|
|
144
200
|
__self: this,
|
|
145
201
|
__source: {
|
|
146
202
|
fileName: _jsxFileName,
|
|
147
|
-
lineNumber:
|
|
203
|
+
lineNumber: 50,
|
|
148
204
|
columnNumber: 5
|
|
149
205
|
}
|
|
150
206
|
}, /*#__PURE__*/external_react_default().createElement("head", {
|
|
151
207
|
__self: this,
|
|
152
208
|
__source: {
|
|
153
209
|
fileName: _jsxFileName,
|
|
154
|
-
lineNumber:
|
|
210
|
+
lineNumber: 51,
|
|
155
211
|
columnNumber: 7
|
|
156
212
|
}
|
|
157
213
|
}, /*#__PURE__*/external_react_default().createElement("meta", {
|
|
@@ -159,31 +215,31 @@ function Document({
|
|
|
159
215
|
__self: this,
|
|
160
216
|
__source: {
|
|
161
217
|
fileName: _jsxFileName,
|
|
162
|
-
lineNumber:
|
|
218
|
+
lineNumber: 52,
|
|
163
219
|
columnNumber: 9
|
|
164
220
|
}
|
|
165
|
-
}), head, assets.map((asset, i) => /*#__PURE__*/external_react_default().createElement("link", {
|
|
221
|
+
}), cspMeta, head, assets.map((asset, i) => /*#__PURE__*/external_react_default().createElement("link", {
|
|
166
222
|
key: i,
|
|
167
223
|
rel: "preload",
|
|
168
224
|
...asset,
|
|
169
225
|
__self: this,
|
|
170
226
|
__source: {
|
|
171
227
|
fileName: _jsxFileName,
|
|
172
|
-
lineNumber:
|
|
228
|
+
lineNumber: 56,
|
|
173
229
|
columnNumber: 11
|
|
174
230
|
}
|
|
175
231
|
})), /*#__PURE__*/external_react_default().createElement("title", {
|
|
176
232
|
__self: this,
|
|
177
233
|
__source: {
|
|
178
234
|
fileName: _jsxFileName,
|
|
179
|
-
lineNumber:
|
|
235
|
+
lineNumber: 58,
|
|
180
236
|
columnNumber: 9
|
|
181
237
|
}
|
|
182
238
|
}, title)), /*#__PURE__*/external_react_default().createElement("body", {
|
|
183
239
|
__self: this,
|
|
184
240
|
__source: {
|
|
185
241
|
fileName: _jsxFileName,
|
|
186
|
-
lineNumber:
|
|
242
|
+
lineNumber: 60,
|
|
187
243
|
columnNumber: 7
|
|
188
244
|
}
|
|
189
245
|
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
@@ -191,20 +247,10 @@ function Document({
|
|
|
191
247
|
__self: this,
|
|
192
248
|
__source: {
|
|
193
249
|
fileName: _jsxFileName,
|
|
194
|
-
lineNumber:
|
|
250
|
+
lineNumber: 61,
|
|
195
251
|
columnNumber: 9
|
|
196
252
|
}
|
|
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(({
|
|
253
|
+
}, children), scripts, assets.filter(({
|
|
208
254
|
href
|
|
209
255
|
}) => href.endsWith('.js')).map(({
|
|
210
256
|
href
|
|
@@ -215,7 +261,7 @@ function Document({
|
|
|
215
261
|
__self: this,
|
|
216
262
|
__source: {
|
|
217
263
|
fileName: _jsxFileName,
|
|
218
|
-
lineNumber:
|
|
264
|
+
lineNumber: 66,
|
|
219
265
|
columnNumber: 13
|
|
220
266
|
}
|
|
221
267
|
}))));
|
|
@@ -227,7 +273,7 @@ Document.defaultProps = {
|
|
|
227
273
|
__self: undefined,
|
|
228
274
|
__source: {
|
|
229
275
|
fileName: _jsxFileName,
|
|
230
|
-
lineNumber:
|
|
276
|
+
lineNumber: 75,
|
|
231
277
|
columnNumber: 7
|
|
232
278
|
}
|
|
233
279
|
}), /*#__PURE__*/external_react_default().createElement("link", {
|
|
@@ -236,12 +282,13 @@ Document.defaultProps = {
|
|
|
236
282
|
__self: undefined,
|
|
237
283
|
__source: {
|
|
238
284
|
fileName: _jsxFileName,
|
|
239
|
-
lineNumber:
|
|
285
|
+
lineNumber: 76,
|
|
240
286
|
columnNumber: 7
|
|
241
287
|
}
|
|
242
288
|
})),
|
|
243
289
|
charSet: 'utf-8',
|
|
244
|
-
rootId: 'anansi-root'
|
|
290
|
+
rootId: 'anansi-root',
|
|
291
|
+
scripts: null
|
|
245
292
|
};
|
|
246
293
|
;// CONCATENATED MODULE: ./src/spouts/document.server.tsx
|
|
247
294
|
var document_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/document.server.tsx";
|
|
@@ -290,10 +337,13 @@ function DocumentSpout(options) {
|
|
|
290
337
|
title: (_nextProps$title = nextProps.title) != null ? _nextProps$title : options.title,
|
|
291
338
|
assets: assets,
|
|
292
339
|
rootId: options.rootId,
|
|
340
|
+
nonce: props.nonce,
|
|
341
|
+
csPolicy: options.csPolicy,
|
|
342
|
+
scripts: nextProps.scripts,
|
|
293
343
|
__self: this,
|
|
294
344
|
__source: {
|
|
295
345
|
fileName: document_server_jsxFileName,
|
|
296
|
-
lineNumber:
|
|
346
|
+
lineNumber: 56,
|
|
297
347
|
columnNumber: 14
|
|
298
348
|
}
|
|
299
349
|
}, nextProps.app)
|
|
@@ -311,8 +361,51 @@ function childrenAssets(chunk) {
|
|
|
311
361
|
}
|
|
312
362
|
;// CONCATENATED MODULE: external "@rest-hooks/core"
|
|
313
363
|
const core_namespaceObject = require("@rest-hooks/core");
|
|
314
|
-
;// CONCATENATED MODULE: external "
|
|
315
|
-
const
|
|
364
|
+
;// CONCATENATED MODULE: external "rest-hooks"
|
|
365
|
+
const external_rest_hooks_namespaceObject = require("rest-hooks");
|
|
366
|
+
;// CONCATENATED MODULE: external "redux"
|
|
367
|
+
const external_redux_namespaceObject = require("redux");
|
|
368
|
+
;// CONCATENATED MODULE: ./src/spouts/rhHelp.tsx
|
|
369
|
+
var rhHelp_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/rhHelp.tsx";
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
// TODO: Rework this and upstream to rest hooks
|
|
374
|
+
|
|
375
|
+
function createPersistedStore(managers) {
|
|
376
|
+
var _managers;
|
|
377
|
+
|
|
378
|
+
const controller = new core_namespaceObject.Controller();
|
|
379
|
+
managers = (_managers = managers) != null ? _managers : [new core_namespaceObject.NetworkManager()];
|
|
380
|
+
const reducer = (0,core_namespaceObject.createReducer)(controller);
|
|
381
|
+
const enhancer = (0,external_redux_namespaceObject.applyMiddleware)(...(0,core_namespaceObject.applyManager)(managers, controller), external_rest_hooks_namespaceObject.PromiseifyMiddleware);
|
|
382
|
+
const store = (0,external_redux_namespaceObject.createStore)(reducer, core_namespaceObject.initialState, enhancer);
|
|
383
|
+
managers.forEach(manager => {
|
|
384
|
+
var _manager$init;
|
|
385
|
+
|
|
386
|
+
return (_manager$init = manager.init) === null || _manager$init === void 0 ? void 0 : _manager$init.call(manager, store.getState());
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
const selector = state => state;
|
|
390
|
+
|
|
391
|
+
function ServerCacheProvider({
|
|
392
|
+
children
|
|
393
|
+
}) {
|
|
394
|
+
return /*#__PURE__*/external_react_default().createElement(external_rest_hooks_namespaceObject.ExternalCacheProvider, {
|
|
395
|
+
store: store,
|
|
396
|
+
selector: selector,
|
|
397
|
+
controller: controller,
|
|
398
|
+
__self: this,
|
|
399
|
+
__source: {
|
|
400
|
+
fileName: rhHelp_jsxFileName,
|
|
401
|
+
lineNumber: 27,
|
|
402
|
+
columnNumber: 7
|
|
403
|
+
}
|
|
404
|
+
}, children);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return [ServerCacheProvider, controller, store];
|
|
408
|
+
}
|
|
316
409
|
;// CONCATENATED MODULE: ./src/spouts/restHooks.server.tsx
|
|
317
410
|
var restHooks_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.server.tsx";
|
|
318
411
|
|
|
@@ -323,15 +416,18 @@ function restHooksSpout(options = {
|
|
|
323
416
|
}) {
|
|
324
417
|
return function (next) {
|
|
325
418
|
return async props => {
|
|
326
|
-
const [ServerCacheProvider, controller] =
|
|
419
|
+
const [ServerCacheProvider, controller, store] = createPersistedStore(options.getManagers());
|
|
327
420
|
const nextProps = await next(props);
|
|
328
421
|
return { ...nextProps,
|
|
329
422
|
controller,
|
|
423
|
+
initData: { ...nextProps.initData,
|
|
424
|
+
resthooks: () => store.getState()
|
|
425
|
+
},
|
|
330
426
|
app: /*#__PURE__*/external_react_default().createElement(ServerCacheProvider, {
|
|
331
427
|
__self: this,
|
|
332
428
|
__source: {
|
|
333
429
|
fileName: restHooks_server_jsxFileName,
|
|
334
|
-
lineNumber:
|
|
430
|
+
lineNumber: 30,
|
|
335
431
|
columnNumber: 14
|
|
336
432
|
}
|
|
337
433
|
}, nextProps.app)
|
|
@@ -411,12 +507,92 @@ function prefetchSpout(field) {
|
|
|
411
507
|
};
|
|
412
508
|
};
|
|
413
509
|
}
|
|
510
|
+
;// CONCATENATED MODULE: ./src/spouts/json.server.tsx
|
|
511
|
+
var json_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/json.server.tsx";
|
|
512
|
+
|
|
513
|
+
function JSONSpout({
|
|
514
|
+
id = 'anansi-json'
|
|
515
|
+
} = {}) {
|
|
516
|
+
return function (next) {
|
|
517
|
+
return async props => {
|
|
518
|
+
var _nextProps$scripts;
|
|
519
|
+
|
|
520
|
+
const nextProps = await next(props);
|
|
521
|
+
const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
|
|
522
|
+
/*
|
|
523
|
+
Object.entries(nextProps.initData ?? {}).forEach(([key, data]) => {
|
|
524
|
+
try {
|
|
525
|
+
const encoded = JSON.stringify(data);
|
|
526
|
+
scripts.push(
|
|
527
|
+
<script
|
|
528
|
+
key={key}
|
|
529
|
+
id={`${id}-${key}`}
|
|
530
|
+
type="application/json"
|
|
531
|
+
dangerouslySetInnerHTML={{
|
|
532
|
+
__html: encoded,
|
|
533
|
+
}}
|
|
534
|
+
nonce={props.nonce}
|
|
535
|
+
/>,
|
|
536
|
+
);
|
|
537
|
+
} catch (e) {
|
|
538
|
+
// TODO: Use unified logging
|
|
539
|
+
console.error(e);
|
|
540
|
+
}
|
|
541
|
+
});*/
|
|
542
|
+
|
|
543
|
+
const Script = () => {
|
|
544
|
+
try {
|
|
545
|
+
var _nextProps$initData;
|
|
546
|
+
|
|
547
|
+
const data = {};
|
|
548
|
+
Object.entries((_nextProps$initData = nextProps.initData) != null ? _nextProps$initData : {}).forEach(([key, getData]) => {
|
|
549
|
+
data[key] = getData();
|
|
550
|
+
});
|
|
551
|
+
const encoded = JSON.stringify(data);
|
|
552
|
+
return /*#__PURE__*/external_react_default().createElement("script", {
|
|
553
|
+
key: id,
|
|
554
|
+
id: id,
|
|
555
|
+
type: "application/json",
|
|
556
|
+
dangerouslySetInnerHTML: {
|
|
557
|
+
__html: encoded
|
|
558
|
+
},
|
|
559
|
+
nonce: props.nonce,
|
|
560
|
+
__self: this,
|
|
561
|
+
__source: {
|
|
562
|
+
fileName: json_server_jsxFileName,
|
|
563
|
+
lineNumber: 52,
|
|
564
|
+
columnNumber: 13
|
|
565
|
+
}
|
|
566
|
+
});
|
|
567
|
+
} catch (e) {
|
|
568
|
+
// TODO: Use unified logging
|
|
569
|
+
console.error('Error serializing json');
|
|
570
|
+
console.error(e);
|
|
571
|
+
return null;
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
|
|
575
|
+
scripts.push( /*#__PURE__*/external_react_default().createElement(Script, {
|
|
576
|
+
__self: this,
|
|
577
|
+
__source: {
|
|
578
|
+
fileName: json_server_jsxFileName,
|
|
579
|
+
lineNumber: 69,
|
|
580
|
+
columnNumber: 20
|
|
581
|
+
}
|
|
582
|
+
}));
|
|
583
|
+
return { ...nextProps,
|
|
584
|
+
scripts
|
|
585
|
+
};
|
|
586
|
+
};
|
|
587
|
+
};
|
|
588
|
+
}
|
|
414
589
|
;// CONCATENATED MODULE: ./src/index.server.ts
|
|
415
590
|
|
|
416
591
|
|
|
417
592
|
|
|
418
593
|
|
|
419
594
|
|
|
595
|
+
|
|
420
596
|
module.exports = __webpack_exports__;
|
|
421
597
|
/******/ })()
|
|
422
598
|
;
|