@anansi/core 0.16.6 → 0.16.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/2.chunk.js +20 -0
  3. package/dist/client.js +233 -285
  4. package/dist/package.json +1 -0
  5. package/dist/server.js +358 -496
  6. package/lib/floodSpouts.js +4 -8
  7. package/lib/index.d.ts +8 -8
  8. package/lib/index.d.ts.map +1 -1
  9. package/lib/index.js +7 -18
  10. package/lib/index.server.d.ts +10 -10
  11. package/lib/index.server.d.ts.map +1 -1
  12. package/lib/index.server.js +9 -22
  13. package/lib/laySpouts.d.ts +2 -2
  14. package/lib/laySpouts.d.ts.map +1 -1
  15. package/lib/laySpouts.js +6 -11
  16. package/lib/scripts/getProxyMiddlewares.js +1 -1
  17. package/lib/scripts/getWebpackConfig.d.ts +3 -0
  18. package/lib/scripts/getWebpackConfig.d.ts.map +1 -0
  19. package/lib/scripts/getWebpackConfig.js +22 -0
  20. package/lib/scripts/index.d.ts +2 -2
  21. package/lib/scripts/index.d.ts.map +1 -1
  22. package/lib/scripts/index.js +3 -3
  23. package/lib/scripts/package.json +1 -0
  24. package/lib/scripts/serve.d.ts +1 -1
  25. package/lib/scripts/serve.d.ts.map +1 -1
  26. package/lib/scripts/serve.js +8 -6
  27. package/lib/scripts/startDevserver.d.ts +1 -1
  28. package/lib/scripts/startDevserver.d.ts.map +1 -1
  29. package/lib/scripts/startDevserver.js +4 -6
  30. package/lib/spouts/DocumentComponent.d.ts +1 -1
  31. package/lib/spouts/DocumentComponent.d.ts.map +1 -1
  32. package/lib/spouts/DocumentComponent.js +14 -21
  33. package/lib/spouts/antd.server.d.ts +1 -1
  34. package/lib/spouts/antd.server.d.ts.map +1 -1
  35. package/lib/spouts/antd.server.js +8 -14
  36. package/lib/spouts/app.js +2 -7
  37. package/lib/spouts/app.server.d.ts +1 -1
  38. package/lib/spouts/app.server.d.ts.map +1 -1
  39. package/lib/spouts/app.server.js +2 -7
  40. package/lib/spouts/csp.js +2 -6
  41. package/lib/spouts/document.d.ts +1 -1
  42. package/lib/spouts/document.d.ts.map +1 -1
  43. package/lib/spouts/document.js +2 -6
  44. package/lib/spouts/document.server.d.ts +2 -2
  45. package/lib/spouts/document.server.d.ts.map +1 -1
  46. package/lib/spouts/document.server.js +10 -12
  47. package/lib/spouts/json.d.ts +1 -1
  48. package/lib/spouts/json.d.ts.map +1 -1
  49. package/lib/spouts/json.js +2 -6
  50. package/lib/spouts/json.server.d.ts +1 -1
  51. package/lib/spouts/json.server.d.ts.map +1 -1
  52. package/lib/spouts/json.server.js +6 -12
  53. package/lib/spouts/prefetch.server.d.ts +1 -1
  54. package/lib/spouts/prefetch.server.d.ts.map +1 -1
  55. package/lib/spouts/prefetch.server.js +2 -6
  56. package/lib/spouts/restHooks.d.ts +1 -1
  57. package/lib/spouts/restHooks.d.ts.map +1 -1
  58. package/lib/spouts/restHooks.js +6 -12
  59. package/lib/spouts/restHooks.provider.js +2 -7
  60. package/lib/spouts/restHooks.server.d.ts +1 -1
  61. package/lib/spouts/restHooks.server.d.ts.map +1 -1
  62. package/lib/spouts/restHooks.server.js +7 -13
  63. package/lib/spouts/router.d.ts +1 -1
  64. package/lib/spouts/router.d.ts.map +1 -1
  65. package/lib/spouts/router.js +9 -14
  66. package/lib/spouts/router.server.d.ts +1 -1
  67. package/lib/spouts/router.server.d.ts.map +1 -1
  68. package/lib/spouts/router.server.js +9 -14
  69. package/lib/spouts/types.js +1 -3
  70. package/package.json +14 -11
  71. package/src/index.server.ts +10 -10
  72. package/src/index.ts +8 -8
  73. package/src/laySpouts.tsx +2 -2
  74. package/src/scripts/getWebpackConfig.ts +22 -0
  75. package/src/scripts/index.ts +2 -2
  76. package/src/scripts/package.json +1 -0
  77. package/src/scripts/serve.ts +15 -12
  78. package/src/scripts/startDevserver.ts +5 -8
  79. package/src/spouts/DocumentComponent.tsx +3 -7
  80. package/src/spouts/antd.server.tsx +1 -1
  81. package/src/spouts/app.server.tsx +1 -1
  82. package/src/spouts/document.server.tsx +12 -4
  83. package/src/spouts/document.tsx +1 -2
  84. package/src/spouts/json.server.tsx +1 -1
  85. package/src/spouts/json.tsx +1 -1
  86. package/src/spouts/prefetch.server.tsx +1 -1
  87. package/src/spouts/restHooks.server.tsx +1 -1
  88. package/src/spouts/restHooks.tsx +2 -2
  89. package/src/spouts/router.server.tsx +1 -1
  90. package/src/spouts/router.tsx +1 -1
  91. package/dist/client.js.map +0 -1
  92. package/dist/server.js.map +0 -1
package/dist/server.js CHANGED
@@ -1,23 +1,156 @@
1
1
  /******/ (() => { // webpackBootstrap
2
- /******/ var __webpack_modules__ = ({
2
+ /******/ "use strict";
3
+ /******/ var __webpack_modules__ = ([
4
+ /* 0 */,
5
+ /* 1 */,
6
+ /* 2 */
7
+ /***/ ((module) => {
8
+
9
+ module.exports = require("@rest-hooks/react");
10
+
11
+ /***/ }),
12
+ /* 3 */
13
+ /***/ ((module) => {
14
+
15
+ module.exports = require("@rest-hooks/ssr");
3
16
 
4
- /***/ "./src/laySpouts.tsx":
5
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
17
+ /***/ }),
18
+ /* 4 */
19
+ /***/ ((module) => {
20
+
21
+ module.exports = require("@ant-design/cssinjs");
22
+
23
+ /***/ })
24
+ /******/ ]);
25
+ /************************************************************************/
26
+ /******/ // The module cache
27
+ /******/ var __webpack_module_cache__ = {};
28
+ /******/
29
+ /******/ // The require function
30
+ /******/ function __webpack_require__(moduleId) {
31
+ /******/ // Check if module is in cache
32
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
33
+ /******/ if (cachedModule !== undefined) {
34
+ /******/ return cachedModule.exports;
35
+ /******/ }
36
+ /******/ // Create a new module (and put it into the cache)
37
+ /******/ var module = __webpack_module_cache__[moduleId] = {
38
+ /******/ // no module.id needed
39
+ /******/ // no module.loaded needed
40
+ /******/ exports: {}
41
+ /******/ };
42
+ /******/
43
+ /******/ // Execute the module function
44
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
45
+ /******/
46
+ /******/ // Return the exports of the module
47
+ /******/ return module.exports;
48
+ /******/ }
49
+ /******/
50
+ /************************************************************************/
51
+ /******/ /* webpack/runtime/compat get default export */
52
+ /******/ (() => {
53
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
54
+ /******/ __webpack_require__.n = (module) => {
55
+ /******/ var getter = module && module.__esModule ?
56
+ /******/ () => (module['default']) :
57
+ /******/ () => (module);
58
+ /******/ __webpack_require__.d(getter, { a: getter });
59
+ /******/ return getter;
60
+ /******/ };
61
+ /******/ })();
62
+ /******/
63
+ /******/ /* webpack/runtime/create fake namespace object */
64
+ /******/ (() => {
65
+ /******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
66
+ /******/ var leafPrototypes;
67
+ /******/ // create a fake namespace object
68
+ /******/ // mode & 1: value is a module id, require it
69
+ /******/ // mode & 2: merge all properties of value into the ns
70
+ /******/ // mode & 4: return value when already ns object
71
+ /******/ // mode & 16: return value when it's Promise-like
72
+ /******/ // mode & 8|1: behave like require
73
+ /******/ __webpack_require__.t = function(value, mode) {
74
+ /******/ if(mode & 1) value = this(value);
75
+ /******/ if(mode & 8) return value;
76
+ /******/ if(typeof value === 'object' && value) {
77
+ /******/ if((mode & 4) && value.__esModule) return value;
78
+ /******/ if((mode & 16) && typeof value.then === 'function') return value;
79
+ /******/ }
80
+ /******/ var ns = Object.create(null);
81
+ /******/ __webpack_require__.r(ns);
82
+ /******/ var def = {};
83
+ /******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
84
+ /******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
85
+ /******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
86
+ /******/ }
87
+ /******/ def['default'] = () => (value);
88
+ /******/ __webpack_require__.d(ns, def);
89
+ /******/ return ns;
90
+ /******/ };
91
+ /******/ })();
92
+ /******/
93
+ /******/ /* webpack/runtime/define property getters */
94
+ /******/ (() => {
95
+ /******/ // define getter functions for harmony exports
96
+ /******/ __webpack_require__.d = (exports, definition) => {
97
+ /******/ for(var key in definition) {
98
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
99
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
100
+ /******/ }
101
+ /******/ }
102
+ /******/ };
103
+ /******/ })();
104
+ /******/
105
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
106
+ /******/ (() => {
107
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
108
+ /******/ })();
109
+ /******/
110
+ /******/ /* webpack/runtime/make namespace object */
111
+ /******/ (() => {
112
+ /******/ // define __esModule on exports
113
+ /******/ __webpack_require__.r = (exports) => {
114
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
115
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
116
+ /******/ }
117
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
118
+ /******/ };
119
+ /******/ })();
120
+ /******/
121
+ /************************************************************************/
122
+ var __webpack_exports__ = {};
123
+ // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
124
+ (() => {
125
+ // ESM COMPAT FLAG
126
+ __webpack_require__.r(__webpack_exports__);
127
+
128
+ // EXPORTS
129
+ __webpack_require__.d(__webpack_exports__, {
130
+ "JSONSpout": () => (/* reexport */ JSONSpout),
131
+ "antdSpout": () => (/* reexport */ antdSpout),
132
+ "appSpout": () => (/* reexport */ app_server),
133
+ "documentSpout": () => (/* reexport */ DocumentSpout),
134
+ "laySpouts": () => (/* reexport */ laySpouts),
135
+ "prefetchSpout": () => (/* reexport */ prefetchSpout),
136
+ "restHooksSpout": () => (/* reexport */ restHooksSpout),
137
+ "routerSpout": () => (/* reexport */ routerSpout)
138
+ });
6
139
 
7
- "use strict";
140
+ ;// CONCATENATED MODULE: external "crypto"
141
+ const external_crypto_namespaceObject = require("crypto");
142
+ var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto_namespaceObject);
143
+ ;// CONCATENATED MODULE: external "react-dom/server"
144
+ const server_namespaceObject = require("react-dom/server");
145
+ ;// CONCATENATED MODULE: ./src/laySpouts.tsx
8
146
 
9
147
 
10
- var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
11
- exports.__esModule = true;
12
- exports["default"] = laySpouts;
13
- var _crypto = _interopRequireDefault(__webpack_require__("crypto"));
14
- var _server = __webpack_require__("react-dom/server");
15
148
  function laySpouts(spouts, {
16
149
  timeoutMS = 10000,
17
150
  onError
18
151
  } = {}) {
19
152
  const render = async (clientManifest, req, res) => {
20
- const nonce = _crypto.default.randomBytes(16).toString('base64');
153
+ const nonce = external_crypto_default().randomBytes(16).toString('base64');
21
154
  try {
22
155
  const {
23
156
  app
@@ -31,7 +164,7 @@ function laySpouts(spouts, {
31
164
  const {
32
165
  pipe,
33
166
  abort
34
- } = (0, _server.renderToPipeableStream)(app, {
167
+ } = (0,server_namespaceObject.renderToPipeableStream)(app, {
35
168
  nonce,
36
169
  //bootstrapScripts: assets.filter(asset => asset.endsWith('.js')),
37
170
  onShellReady() {
@@ -64,22 +197,29 @@ function laySpouts(spouts, {
64
197
  };
65
198
  return render;
66
199
  }
200
+ ;// CONCATENATED MODULE: external "react"
201
+ const external_react_namespaceObject = require("react");
202
+ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_namespaceObject);
203
+ ;// CONCATENATED MODULE: ./src/spouts/csp.ts
204
+ // TODO: memoize this
205
+ function buildPolicy(policyObj) {
206
+ return Object.keys(policyObj).map(key => {
207
+ const val = Array.isArray(policyObj[key]) ? [...new Set(policyObj[key]).values()].filter(v => v).join(' ') : policyObj[key];
67
208
 
68
- /***/ }),
69
-
70
- /***/ "./src/spouts/DocumentComponent.tsx":
71
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
72
-
73
- "use strict";
74
-
75
-
76
- var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
77
- exports.__esModule = true;
78
- exports["default"] = Document;
79
- var _react = _interopRequireDefault(__webpack_require__("react"));
80
- var _csp = __webpack_require__("./src/spouts/csp.ts");
209
+ // move strict dynamic to the end of the policy if it exists to be backwards compatible with csp2
210
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic
211
+ if (typeof val === 'string' && val.includes("'strict-dynamic'")) {
212
+ const newVal = `${val.replace(/\s?'strict-dynamic'\s?/gi, ' ').trim()} 'strict-dynamic'`;
213
+ return `${key} ${newVal}`;
214
+ }
215
+ return `${key} ${val}`;
216
+ }).join('; ');
217
+ }
218
+ ;// CONCATENATED MODULE: ./src/spouts/DocumentComponent.tsx
81
219
  var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/DocumentComponent.tsx",
82
220
  _process$env$WEBPACK_;
221
+
222
+
83
223
  function Document({
84
224
  assets,
85
225
  head,
@@ -98,107 +238,111 @@ function Document({
98
238
  const policy = {
99
239
  ...csPolicy
100
240
  };
101
- if (nonce &&
102
- // nonces negate 'unsafe-inline' so do not add it in development to keep things easier
103
- "development" === 'production') {}
104
- cspMeta = /*#__PURE__*/_react.default.createElement("meta", {
241
+ if (nonce) {
242
+ if (typeof policy['script-src'] === 'string') {
243
+ policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
244
+ } else {
245
+ policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
246
+ }
247
+ }
248
+ cspMeta = /*#__PURE__*/external_react_default().createElement("meta", {
105
249
  httpEquiv: "Content-Security-Policy",
106
- content: (0, _csp.buildPolicy)(policy),
250
+ content: buildPolicy(policy),
107
251
  __self: this,
108
252
  __source: {
109
253
  fileName: _jsxFileName,
110
- lineNumber: 47,
254
+ lineNumber: 43,
111
255
  columnNumber: 7
112
256
  }
113
257
  });
114
258
  }
115
- return /*#__PURE__*/_react.default.createElement("html", {
259
+ return /*#__PURE__*/external_react_default().createElement("html", {
116
260
  __self: this,
117
261
  __source: {
118
262
  fileName: _jsxFileName,
119
- lineNumber: 51,
263
+ lineNumber: 47,
120
264
  columnNumber: 5
121
265
  }
122
- }, /*#__PURE__*/_react.default.createElement("head", {
266
+ }, /*#__PURE__*/external_react_default().createElement("head", {
123
267
  __self: this,
124
268
  __source: {
125
269
  fileName: _jsxFileName,
126
- lineNumber: 52,
270
+ lineNumber: 48,
127
271
  columnNumber: 7
128
272
  }
129
- }, /*#__PURE__*/_react.default.createElement("meta", {
273
+ }, /*#__PURE__*/external_react_default().createElement("meta", {
130
274
  charSet: charSet,
131
275
  __self: this,
132
276
  __source: {
133
277
  fileName: _jsxFileName,
134
- lineNumber: 53,
278
+ lineNumber: 49,
135
279
  columnNumber: 9
136
280
  }
137
- }), cspMeta, head, extraStyle, assets.map((asset, i) => /*#__PURE__*/_react.default.createElement("link", {
281
+ }), cspMeta, head, extraStyle, assets.map((asset, i) => /*#__PURE__*/external_react_default().createElement("link", {
138
282
  key: i,
139
283
  rel: "preload",
140
284
  ...asset,
141
285
  __self: this,
142
286
  __source: {
143
287
  fileName: _jsxFileName,
144
- lineNumber: 58,
288
+ lineNumber: 54,
145
289
  columnNumber: 11
146
290
  }
147
- })), /*#__PURE__*/_react.default.createElement("title", {
291
+ })), /*#__PURE__*/external_react_default().createElement("title", {
148
292
  __self: this,
149
293
  __source: {
150
294
  fileName: _jsxFileName,
151
- lineNumber: 60,
295
+ lineNumber: 56,
152
296
  columnNumber: 9
153
297
  }
154
- }, title)), /*#__PURE__*/_react.default.createElement("body", {
298
+ }, title)), /*#__PURE__*/external_react_default().createElement("body", {
155
299
  __self: this,
156
300
  __source: {
157
301
  fileName: _jsxFileName,
158
- lineNumber: 62,
302
+ lineNumber: 58,
159
303
  columnNumber: 7
160
304
  }
161
- }, /*#__PURE__*/_react.default.createElement("div", {
305
+ }, /*#__PURE__*/external_react_default().createElement("div", {
162
306
  id: rootId,
163
307
  __self: this,
164
308
  __source: {
165
309
  fileName: _jsxFileName,
166
- lineNumber: 63,
310
+ lineNumber: 59,
167
311
  columnNumber: 9
168
312
  }
169
313
  }, children), scripts, assets.filter(({
170
314
  href
171
315
  }) => href.endsWith('.js')).map(({
172
316
  href
173
- }, i) => /*#__PURE__*/_react.default.createElement("script", {
317
+ }, i) => /*#__PURE__*/external_react_default().createElement("script", {
174
318
  key: i,
175
319
  src: href,
176
320
  async: true,
177
321
  __self: this,
178
322
  __source: {
179
323
  fileName: _jsxFileName,
180
- lineNumber: 68,
324
+ lineNumber: 64,
181
325
  columnNumber: 13
182
326
  }
183
327
  }))));
184
328
  }
185
329
  Document.defaultProps = {
186
- head: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("meta", {
330
+ head: /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("meta", {
187
331
  name: "viewport",
188
332
  content: "width=device-width, initial-scale=1",
189
- __self: void 0,
333
+ __self: undefined,
190
334
  __source: {
191
335
  fileName: _jsxFileName,
192
- lineNumber: 77,
336
+ lineNumber: 73,
193
337
  columnNumber: 7
194
338
  }
195
- }), /*#__PURE__*/_react.default.createElement("link", {
339
+ }), /*#__PURE__*/external_react_default().createElement("link", {
196
340
  rel: "shortcut icon",
197
341
  href: `${(_process$env$WEBPACK_ = process.env.WEBPACK_PUBLIC_PATH) != null ? _process$env$WEBPACK_ : '/'}favicon.ico`,
198
- __self: void 0,
342
+ __self: undefined,
199
343
  __source: {
200
344
  fileName: _jsxFileName,
201
- lineNumber: 78,
345
+ lineNumber: 74,
202
346
  columnNumber: 7
203
347
  }
204
348
  })),
@@ -206,130 +350,13 @@ Document.defaultProps = {
206
350
  rootId: 'anansi-root',
207
351
  scripts: null
208
352
  };
353
+ ;// CONCATENATED MODULE: ./src/spouts/document.server.tsx
354
+ var document_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/document.server.tsx";
209
355
 
210
- /***/ }),
211
-
212
- /***/ "./src/spouts/antd.server.tsx":
213
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
214
-
215
- "use strict";
216
356
 
217
-
218
- var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
219
- exports.__esModule = true;
220
- exports["default"] = antdSpout;
221
- var _interopRequireWildcard2 = _interopRequireDefault(__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireWildcard.js"));
222
- var _react = _interopRequireDefault(__webpack_require__("react"));
223
- var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/antd.server.tsx";
224
- function antdSpout() {
225
- return next => async props => {
226
- var _nextProps$scripts;
227
- const {
228
- createCache,
229
- extractStyle,
230
- StyleProvider
231
- } = await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(__webpack_require__("@ant-design/cssinjs")));
232
- const cache = createCache();
233
- const nextProps = await next(props);
234
- const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
235
- const AntdSheets = () => {
236
- return /*#__PURE__*/_react.default.createElement("script", {
237
- dangerouslySetInnerHTML: {
238
- __html: `</script>${extractStyle(cache)}<script>`
239
- },
240
- __self: this,
241
- __source: {
242
- fileName: _jsxFileName,
243
- lineNumber: 28,
244
- columnNumber: 9
245
- }
246
- });
247
- };
248
- // unfortunately we have to inject this after the entire content has streamed in or it doesn't correctly populate
249
- // see: https://github.com/ant-design/cssinjs/issues/79
250
- scripts.push( /*#__PURE__*/_react.default.createElement(AntdSheets, {
251
- __self: this,
252
- __source: {
253
- fileName: _jsxFileName,
254
- lineNumber: 37,
255
- columnNumber: 18
256
- }
257
- }));
258
- return {
259
- ...nextProps,
260
- app: /*#__PURE__*/_react.default.createElement(StyleProvider, {
261
- cache: cache,
262
- __self: this,
263
- __source: {
264
- fileName: _jsxFileName,
265
- lineNumber: 41,
266
- columnNumber: 12
267
- }
268
- }, nextProps.app),
269
- scripts
270
- };
271
- };
272
- }
273
-
274
- /***/ }),
275
-
276
- /***/ "./src/spouts/app.server.tsx":
277
- /***/ ((__unused_webpack_module, exports) => {
278
-
279
- "use strict";
280
-
281
-
282
- exports.__esModule = true;
283
- exports["default"] = void 0;
284
- const appSpout = app => props => Promise.resolve({
285
- ...props,
286
- app
287
- });
288
- var _default = appSpout;
289
- exports["default"] = _default;
290
-
291
- /***/ }),
292
-
293
- /***/ "./src/spouts/csp.ts":
294
- /***/ ((__unused_webpack_module, exports) => {
295
-
296
- "use strict";
297
-
298
-
299
- exports.__esModule = true;
300
- exports.buildPolicy = buildPolicy;
301
- // TODO: memoize this
302
- function buildPolicy(policyObj) {
303
- return Object.keys(policyObj).map(key => {
304
- const val = Array.isArray(policyObj[key]) ? [...new Set(policyObj[key]).values()].filter(v => v).join(' ') : policyObj[key];
305
-
306
- // move strict dynamic to the end of the policy if it exists to be backwards compatible with csp2
307
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic
308
- if (typeof val === 'string' && val.includes("'strict-dynamic'")) {
309
- const newVal = `${val.replace(/\s?'strict-dynamic'\s?/gi, ' ').trim()} 'strict-dynamic'`;
310
- return `${key} ${newVal}`;
311
- }
312
- return `${key} ${val}`;
313
- }).join('; ');
314
- }
315
-
316
- /***/ }),
317
-
318
- /***/ "./src/spouts/document.server.tsx":
319
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
320
-
321
- "use strict";
322
-
323
-
324
- var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
325
- exports.__esModule = true;
326
- exports["default"] = DocumentSpout;
327
- var _react = _interopRequireDefault(__webpack_require__("react"));
328
- var _DocumentComponent = _interopRequireDefault(__webpack_require__("./src/spouts/DocumentComponent.tsx"));
329
- var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/document.server.tsx";
330
357
  function DocumentSpout(options) {
331
358
  return next => async props => {
332
- var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _nextProps$title;
359
+ var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _props$req, _nextProps$title;
333
360
  const nextProps = await next(props);
334
361
  const publicPath = props.clientManifest.publicPath;
335
362
  if (Object.keys((_props$clientManifest = (_props$clientManifest2 = props.clientManifest) == null ? void 0 : _props$clientManifest2.entrypoints) != null ? _props$clientManifest : {}).length < 1 || publicPath === undefined) throw new Error('Manifest missing entries needed');
@@ -363,21 +390,24 @@ function DocumentSpout(options) {
363
390
  } : {
364
391
  href: asset
365
392
  });
393
+ const nonce =
394
+ // nonces negate 'unsafe-inline' so do not add it in development to keep things easier
395
+ props.nonce && (process.env.NODE_ENV === 'production' || ((_props$req = props.req) == null ? void 0 : _props$req.protocol) !== 'http') ? props.nonce : undefined;
366
396
  return {
367
397
  ...nextProps,
368
- app: /*#__PURE__*/_react.default.createElement(_DocumentComponent.default, {
398
+ app: /*#__PURE__*/external_react_default().createElement(Document, {
369
399
  ...options,
370
400
  extraStyle: nextProps.extraStyle,
371
401
  title: (_nextProps$title = nextProps.title) != null ? _nextProps$title : options.title,
372
402
  assets: assets,
373
403
  rootId: options.rootId,
374
- nonce: props.nonce,
404
+ nonce: nonce,
375
405
  csPolicy: options.csPolicy,
376
406
  scripts: nextProps.scripts,
377
407
  __self: this,
378
408
  __source: {
379
- fileName: _jsxFileName,
380
- lineNumber: 77,
409
+ fileName: document_server_jsxFileName,
410
+ lineNumber: 85,
381
411
  columnNumber: 9
382
412
  }
383
413
  }, nextProps.app)
@@ -390,129 +420,16 @@ function childrenAssets(chunk) {
390
420
  return (_c$assets = c.assets) != null ? _c$assets : [];
391
421
  })) : [];
392
422
  }
423
+ ;// CONCATENATED MODULE: ./src/spouts/restHooks.server.tsx
424
+ var restHooks_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.server.tsx";
393
425
 
394
- /***/ }),
395
-
396
- /***/ "./src/spouts/json.server.tsx":
397
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
398
-
399
- "use strict";
400
-
401
-
402
- var _interopRequireWildcard = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
403
- exports.__esModule = true;
404
- exports["default"] = JSONSpout;
405
- var _react = _interopRequireWildcard(__webpack_require__("react"));
406
- var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/json.server.tsx";
407
- function JSONSpout({
408
- id = 'anansi-json'
409
- } = {}) {
410
- return next => async props => {
411
- var _nextProps$scripts, _nextProps$initData;
412
- const nextProps = await next(props);
413
- const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
414
- Object.entries((_nextProps$initData = nextProps.initData) != null ? _nextProps$initData : {}).forEach(([key, useData]) => {
415
- const globalId = `${id}.${key}`;
416
- const Script = () => {
417
- const data = useData();
418
- try {
419
- const encoded = JSON.stringify(data);
420
- return /*#__PURE__*/_react.default.createElement("script", {
421
- id: globalId,
422
- type: "application/json",
423
- dangerouslySetInnerHTML: {
424
- __html: encoded
425
- },
426
- nonce: props.nonce,
427
- __self: this,
428
- __source: {
429
- fileName: _jsxFileName,
430
- lineNumber: 29,
431
- columnNumber: 13
432
- }
433
- });
434
- } catch (e) {
435
- // TODO: Use unified logging
436
- console.error(`Error serializing json for ${key}`);
437
- console.error(e);
438
- return null;
439
- }
440
- };
441
- scripts.push( /*#__PURE__*/_react.default.createElement(_react.Suspense, {
442
- key: globalId,
443
- __self: this,
444
- __source: {
445
- fileName: _jsxFileName,
446
- lineNumber: 46,
447
- columnNumber: 9
448
- }
449
- }, /*#__PURE__*/_react.default.createElement(Script, {
450
- __self: this,
451
- __source: {
452
- fileName: _jsxFileName,
453
- lineNumber: 47,
454
- columnNumber: 11
455
- }
456
- })));
457
- });
458
- return {
459
- ...nextProps,
460
- scripts
461
- };
462
- };
463
- }
464
-
465
- /***/ }),
466
-
467
- /***/ "./src/spouts/prefetch.server.tsx":
468
- /***/ ((__unused_webpack_module, exports) => {
469
-
470
- "use strict";
471
-
472
-
473
- exports.__esModule = true;
474
- exports["default"] = prefetchSpout;
475
- function prefetchSpout(field) {
476
- return function (next) {
477
- return async props => {
478
- const nextProps = await next(props);
479
- try {
480
- const toFetch = [];
481
- nextProps.matchedRoutes.forEach(route => {
482
- if (typeof route.resolveData === 'function') {
483
- toFetch.push(route.resolveData(nextProps[field], route));
484
- }
485
- });
486
- await Promise.all(toFetch);
487
- } catch (e) {
488
- console.error(e);
489
- }
490
- return nextProps;
491
- };
492
- };
493
- }
494
-
495
- /***/ }),
496
-
497
- /***/ "./src/spouts/restHooks.server.tsx":
498
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
499
-
500
- "use strict";
501
-
502
-
503
- var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
504
- exports.__esModule = true;
505
- exports["default"] = restHooksSpout;
506
- var _interopRequireWildcard2 = _interopRequireDefault(__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireWildcard.js"));
507
- var _react = _interopRequireDefault(__webpack_require__("react"));
508
- var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.server.tsx";
509
426
  function restHooksSpout(options = {}) {
510
427
  return next => async props => {
511
428
  var _options$getManagers;
512
- const managers = (_options$getManagers = options == null ? void 0 : options.getManagers == null ? void 0 : options.getManagers()) != null ? _options$getManagers : [new (await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(__webpack_require__("@rest-hooks/react")))).NetworkManager()];
429
+ const managers = (_options$getManagers = options == null ? void 0 : options.getManagers == null ? void 0 : options.getManagers()) != null ? _options$getManagers : [new (await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 2, 23))).NetworkManager()];
513
430
  const {
514
431
  createPersistedStore
515
- } = await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(__webpack_require__("@rest-hooks/ssr")));
432
+ } = await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 3, 23));
516
433
  const [ServerCacheProvider, useReadyCacheState, controller, store] = createPersistedStore(managers);
517
434
  const nextProps = await next({
518
435
  ...props,
@@ -525,10 +442,10 @@ function restHooksSpout(options = {}) {
525
442
  ...nextProps.initData,
526
443
  resthooks: useReadyCacheState
527
444
  },
528
- app: /*#__PURE__*/_react.default.createElement(ServerCacheProvider, {
445
+ app: /*#__PURE__*/external_react_default().createElement(ServerCacheProvider, {
529
446
  __self: this,
530
447
  __source: {
531
- fileName: _jsxFileName,
448
+ fileName: restHooks_server_jsxFileName,
532
449
  lineNumber: 34,
533
450
  columnNumber: 12
534
451
  }
@@ -539,33 +456,78 @@ function restHooksSpout(options = {}) {
539
456
  };
540
457
  };
541
458
  }
459
+ ;// CONCATENATED MODULE: ./src/spouts/antd.server.tsx
460
+ var antd_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/antd.server.tsx";
542
461
 
543
- /***/ }),
544
-
545
- /***/ "./src/spouts/router.server.tsx":
546
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
462
+ function antdSpout() {
463
+ return next => async props => {
464
+ var _nextProps$scripts;
465
+ const {
466
+ createCache,
467
+ extractStyle,
468
+ StyleProvider
469
+ } = await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 4, 23));
470
+ const cache = createCache();
471
+ const nextProps = await next(props);
472
+ const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
473
+ const AntdSheets = () => {
474
+ return /*#__PURE__*/external_react_default().createElement("script", {
475
+ dangerouslySetInnerHTML: {
476
+ __html: `</script>${extractStyle(cache)}<script>`
477
+ },
478
+ __self: this,
479
+ __source: {
480
+ fileName: antd_server_jsxFileName,
481
+ lineNumber: 28,
482
+ columnNumber: 9
483
+ }
484
+ });
485
+ };
486
+ // unfortunately we have to inject this after the entire content has streamed in or it doesn't correctly populate
487
+ // see: https://github.com/ant-design/cssinjs/issues/79
488
+ scripts.push( /*#__PURE__*/external_react_default().createElement(AntdSheets, {
489
+ __self: this,
490
+ __source: {
491
+ fileName: antd_server_jsxFileName,
492
+ lineNumber: 37,
493
+ columnNumber: 18
494
+ }
495
+ }));
496
+ return {
497
+ ...nextProps,
498
+ app: /*#__PURE__*/external_react_default().createElement(StyleProvider, {
499
+ cache: cache,
500
+ __self: this,
501
+ __source: {
502
+ fileName: antd_server_jsxFileName,
503
+ lineNumber: 41,
504
+ columnNumber: 12
505
+ }
506
+ }, nextProps.app),
507
+ scripts
508
+ };
509
+ };
510
+ }
511
+ ;// CONCATENATED MODULE: external "@anansi/router"
512
+ const router_namespaceObject = require("@anansi/router");
513
+ ;// CONCATENATED MODULE: external "history"
514
+ const external_history_namespaceObject = require("history");
515
+ ;// CONCATENATED MODULE: ./src/spouts/router.server.tsx
516
+ var router_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/router.server.tsx";
547
517
 
548
- "use strict";
549
518
 
550
519
 
551
- var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
552
- exports.__esModule = true;
553
- exports["default"] = routerSpout;
554
- var _router = __webpack_require__("@anansi/router");
555
- var _history = __webpack_require__("history");
556
- var _react = _interopRequireDefault(__webpack_require__("react"));
557
- var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/router.server.tsx";
558
520
  function routerSpout(options) {
559
521
  const createRouteComponent = router => function Router({
560
522
  children
561
523
  }) {
562
524
  const resolveWith = options.useResolveWith();
563
- return /*#__PURE__*/_react.default.createElement(_router.RouteProvider, {
525
+ return /*#__PURE__*/external_react_default().createElement(router_namespaceObject.RouteProvider, {
564
526
  router: router,
565
527
  resolveWith: resolveWith,
566
528
  __self: this,
567
529
  __source: {
568
- fileName: _jsxFileName,
530
+ fileName: router_server_jsxFileName,
569
531
  lineNumber: 26,
570
532
  columnNumber: 9
571
533
  }
@@ -573,7 +535,7 @@ function routerSpout(options) {
573
535
  };
574
536
  return next => async props => {
575
537
  const url = props.req.url || '';
576
- const router = options.createRouter((0, _history.createMemoryHistory)({
538
+ const router = options.createRouter((0,external_history_namespaceObject.createMemoryHistory)({
577
539
  initialEntries: [url]
578
540
  }));
579
541
  const matchedRoutes = router.getMatchedRoutes(url);
@@ -585,10 +547,10 @@ function routerSpout(options) {
585
547
  const Router = createRouteComponent(router);
586
548
  return {
587
549
  ...nextProps,
588
- app: /*#__PURE__*/_react.default.createElement(Router, {
550
+ app: /*#__PURE__*/external_react_default().createElement(Router, {
589
551
  __self: this,
590
552
  __source: {
591
- fileName: _jsxFileName,
553
+ fileName: router_server_jsxFileName,
592
554
  lineNumber: 49,
593
555
  columnNumber: 12
594
556
  }
@@ -599,204 +561,104 @@ function routerSpout(options) {
599
561
  };
600
562
  };
601
563
  }
602
-
603
- /***/ }),
604
-
605
- /***/ "@anansi/router":
606
- /***/ ((module) => {
607
-
608
- "use strict";
609
- module.exports = require("@anansi/router");
610
-
611
- /***/ }),
612
-
613
- /***/ "@ant-design/cssinjs":
614
- /***/ ((module) => {
615
-
616
- "use strict";
617
- module.exports = require("@ant-design/cssinjs");
618
-
619
- /***/ }),
620
-
621
- /***/ "@rest-hooks/react":
622
- /***/ ((module) => {
623
-
624
- "use strict";
625
- module.exports = require("@rest-hooks/react");
626
-
627
- /***/ }),
628
-
629
- /***/ "@rest-hooks/ssr":
630
- /***/ ((module) => {
631
-
632
- "use strict";
633
- module.exports = require("@rest-hooks/ssr");
634
-
635
- /***/ }),
636
-
637
- /***/ "history":
638
- /***/ ((module) => {
639
-
640
- "use strict";
641
- module.exports = require("history");
642
-
643
- /***/ }),
644
-
645
- /***/ "react":
646
- /***/ ((module) => {
647
-
648
- "use strict";
649
- module.exports = require("react");
650
-
651
- /***/ }),
652
-
653
- /***/ "react-dom/server":
654
- /***/ ((module) => {
655
-
656
- "use strict";
657
- module.exports = require("react-dom/server");
658
-
659
- /***/ }),
660
-
661
- /***/ "crypto":
662
- /***/ ((module) => {
663
-
664
- "use strict";
665
- module.exports = require("crypto");
666
-
667
- /***/ }),
668
-
669
- /***/ "../../node_modules/@babel/runtime/helpers/interopRequireDefault.js":
670
- /***/ ((module) => {
671
-
672
- function _interopRequireDefault(obj) {
673
- return obj && obj.__esModule ? obj : {
674
- "default": obj
564
+ ;// CONCATENATED MODULE: ./src/spouts/prefetch.server.tsx
565
+ function prefetchSpout(field) {
566
+ return function (next) {
567
+ return async props => {
568
+ const nextProps = await next(props);
569
+ try {
570
+ const toFetch = [];
571
+ nextProps.matchedRoutes.forEach(route => {
572
+ if (typeof route.resolveData === 'function') {
573
+ toFetch.push(route.resolveData(nextProps[field], route));
574
+ }
575
+ });
576
+ await Promise.all(toFetch);
577
+ } catch (e) {
578
+ console.error(e);
579
+ }
580
+ return nextProps;
581
+ };
675
582
  };
676
583
  }
677
- module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
678
-
679
- /***/ }),
584
+ ;// CONCATENATED MODULE: ./src/spouts/json.server.tsx
585
+ var json_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/json.server.tsx";
680
586
 
681
- /***/ "../../node_modules/@babel/runtime/helpers/interopRequireWildcard.js":
682
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
683
-
684
- var _typeof = (__webpack_require__("../../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
685
- function _getRequireWildcardCache(nodeInterop) {
686
- if (typeof WeakMap !== "function") return null;
687
- var cacheBabelInterop = new WeakMap();
688
- var cacheNodeInterop = new WeakMap();
689
- return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {
690
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
691
- })(nodeInterop);
692
- }
693
- function _interopRequireWildcard(obj, nodeInterop) {
694
- if (!nodeInterop && obj && obj.__esModule) {
695
- return obj;
696
- }
697
- if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") {
587
+ function JSONSpout({
588
+ id = 'anansi-json'
589
+ } = {}) {
590
+ return next => async props => {
591
+ var _nextProps$scripts, _nextProps$initData;
592
+ const nextProps = await next(props);
593
+ const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
594
+ Object.entries((_nextProps$initData = nextProps.initData) != null ? _nextProps$initData : {}).forEach(([key, useData]) => {
595
+ const globalId = `${id}.${key}`;
596
+ const Script = () => {
597
+ const data = useData();
598
+ try {
599
+ const encoded = JSON.stringify(data);
600
+ return /*#__PURE__*/external_react_default().createElement("script", {
601
+ id: globalId,
602
+ type: "application/json",
603
+ dangerouslySetInnerHTML: {
604
+ __html: encoded
605
+ },
606
+ nonce: props.nonce,
607
+ __self: this,
608
+ __source: {
609
+ fileName: json_server_jsxFileName,
610
+ lineNumber: 29,
611
+ columnNumber: 13
612
+ }
613
+ });
614
+ } catch (e) {
615
+ // TODO: Use unified logging
616
+ console.error(`Error serializing json for ${key}`);
617
+ console.error(e);
618
+ return null;
619
+ }
620
+ };
621
+ scripts.push( /*#__PURE__*/external_react_default().createElement(external_react_namespaceObject.Suspense, {
622
+ key: globalId,
623
+ __self: this,
624
+ __source: {
625
+ fileName: json_server_jsxFileName,
626
+ lineNumber: 46,
627
+ columnNumber: 9
628
+ }
629
+ }, /*#__PURE__*/external_react_default().createElement(Script, {
630
+ __self: this,
631
+ __source: {
632
+ fileName: json_server_jsxFileName,
633
+ lineNumber: 47,
634
+ columnNumber: 11
635
+ }
636
+ })));
637
+ });
698
638
  return {
699
- "default": obj
639
+ ...nextProps,
640
+ scripts
700
641
  };
701
- }
702
- var cache = _getRequireWildcardCache(nodeInterop);
703
- if (cache && cache.has(obj)) {
704
- return cache.get(obj);
705
- }
706
- var newObj = {};
707
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
708
- for (var key in obj) {
709
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
710
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
711
- if (desc && (desc.get || desc.set)) {
712
- Object.defineProperty(newObj, key, desc);
713
- } else {
714
- newObj[key] = obj[key];
715
- }
716
- }
717
- }
718
- newObj["default"] = obj;
719
- if (cache) {
720
- cache.set(obj, newObj);
721
- }
722
- return newObj;
642
+ };
723
643
  }
724
- module.exports = _interopRequireWildcard, module.exports.__esModule = true, module.exports["default"] = module.exports;
644
+ ;// CONCATENATED MODULE: ./src/spouts/app.server.tsx
645
+ const appSpout = app => props => Promise.resolve({
646
+ ...props,
647
+ app
648
+ });
649
+ /* harmony default export */ const app_server = (appSpout);
650
+ ;// CONCATENATED MODULE: ./src/index.server.ts
651
+
652
+
725
653
 
726
- /***/ }),
727
654
 
728
- /***/ "../../node_modules/@babel/runtime/helpers/typeof.js":
729
- /***/ ((module) => {
730
655
 
731
- function _typeof(obj) {
732
- "@babel/helpers - typeof";
733
656
 
734
- return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
735
- return typeof obj;
736
- } : function (obj) {
737
- return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
738
- }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj);
739
- }
740
- module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
741
657
 
742
- /***/ })
743
658
 
744
- /******/ });
745
- /************************************************************************/
746
- /******/ // The module cache
747
- /******/ var __webpack_module_cache__ = {};
748
- /******/
749
- /******/ // The require function
750
- /******/ function __webpack_require__(moduleId) {
751
- /******/ // Check if module is in cache
752
- /******/ var cachedModule = __webpack_module_cache__[moduleId];
753
- /******/ if (cachedModule !== undefined) {
754
- /******/ return cachedModule.exports;
755
- /******/ }
756
- /******/ // Create a new module (and put it into the cache)
757
- /******/ var module = __webpack_module_cache__[moduleId] = {
758
- /******/ // no module.id needed
759
- /******/ // no module.loaded needed
760
- /******/ exports: {}
761
- /******/ };
762
- /******/
763
- /******/ // Execute the module function
764
- /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
765
- /******/
766
- /******/ // Return the exports of the module
767
- /******/ return module.exports;
768
- /******/ }
769
- /******/
770
- /************************************************************************/
771
- var __webpack_exports__ = {};
772
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
773
- (() => {
774
- "use strict";
775
- var exports = __webpack_exports__;
776
-
777
-
778
- var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
779
- exports.__esModule = true;
780
- exports.routerSpout = exports.restHooksSpout = exports.prefetchSpout = exports.laySpouts = exports.documentSpout = exports.appSpout = exports.antdSpout = exports.JSONSpout = void 0;
781
- var _laySpouts = _interopRequireDefault(__webpack_require__("./src/laySpouts.tsx"));
782
- exports.laySpouts = _laySpouts.default;
783
- var _document = _interopRequireDefault(__webpack_require__("./src/spouts/document.server.tsx"));
784
- exports.documentSpout = _document.default;
785
- var _restHooks = _interopRequireDefault(__webpack_require__("./src/spouts/restHooks.server.tsx"));
786
- exports.restHooksSpout = _restHooks.default;
787
- var _antd = _interopRequireDefault(__webpack_require__("./src/spouts/antd.server.tsx"));
788
- exports.antdSpout = _antd.default;
789
- var _router = _interopRequireDefault(__webpack_require__("./src/spouts/router.server.tsx"));
790
- exports.routerSpout = _router.default;
791
- var _prefetch = _interopRequireDefault(__webpack_require__("./src/spouts/prefetch.server.tsx"));
792
- exports.prefetchSpout = _prefetch.default;
793
- var _json = _interopRequireDefault(__webpack_require__("./src/spouts/json.server.tsx"));
794
- exports.JSONSpout = _json.default;
795
- var _app = _interopRequireDefault(__webpack_require__("./src/spouts/app.server.tsx"));
796
- exports.appSpout = _app.default;
797
659
  })();
798
660
 
799
661
  module.exports = __webpack_exports__;
800
662
  /******/ })()
801
663
  ;
802
- //# sourceMappingURL=server.js.map
664
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUssQ0FBQ3pFLEtBQU07WUFBQWlELE1BQUE7WUFBQUMsUUFBQTtjQUFBQyxRQUFBLEVBQUFDLHVCQUFBO2NBQUFDLFVBQUE7Y0FBQUMsWUFBQTtZQUFBO1VBQUEsRUFDbkI7UUFFTixDQUFDLENBQUMsT0FBTzNDLENBQUMsRUFBRTtVQUNWO1VBQ0FDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFFLDhCQUE2Qk8sR0FBSSxFQUFDLENBQUM7VUFDbERSLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDRixDQUFDLENBQUM7VUFDaEIsT0FBTyxJQUFJO1FBQ2I7TUFDRixDQUFDO01BQ0Q4QixPQUFPLENBQUNtRCxJQUFJLGVBQ1YvQyxzQ0FBQSxDQUFDcUcsdUNBQVE7UUFBQzlILEdBQUcsRUFBRW1JLFFBQVM7UUFBQXRHLE1BQUE7UUFBQUMsUUFBQTtVQUFBQyxRQUFBLEVBQUFDLHVCQUFBO1VBQUFDLFVBQUE7VUFBQUMsWUFBQTtRQUFBO01BQUEsZ0JBQ3RCVCxzQ0FBQSxDQUFDMkcsTUFBTTtRQUFBdkcsTUFBQTtRQUFBQyxRQUFBO1VBQUFDLFFBQUEsRUFBQUMsdUJBQUE7VUFBQUMsVUFBQTtVQUFBQyxZQUFBO1FBQUE7TUFBQSxFQUFHLENBQ0QsQ0FDWjtJQUNILENBQUMsQ0FBQztJQUVGLE9BQU87TUFDTCxHQUFHMkIsU0FBUztNQUNaeEM7SUFDRixDQUFDO0VBQ0gsQ0FBQztBQUNIOztBQ3REQSxNQUFNcUgsUUFBUSxHQUNYM0osR0FBZ0IsSUFDT3NFLEtBQVEsSUFDOUJ1RSxPQUFPLENBQUNlLE9BQU8sQ0FBQztFQUFFLEdBQUd0RixLQUFLO0VBQUV0RTtBQUFJLENBQUMsQ0FBQztBQUV0QyxpREFBZTJKLFFBQVE7O0FDUCtCO0FBQ2lCO0FBQ0U7QUFDVjtBQUNJO0FBQ0k7QUFDUiIsInNvdXJjZXMiOlsid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcIkByZXN0LWhvb2tzL3JlYWN0XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQHJlc3QtaG9va3Mvc3NyXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQGFudC1kZXNpZ24vY3NzaW5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9jcmVhdGUgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1kb20vc2VydmVyXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL2xheVNwb3V0cy50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2NzcC50cyIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL0RvY3VtZW50Q29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2RvY3VtZW50LnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9yZXN0SG9va3Muc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FudGQuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAYW5hbnNpL3JvdXRlclwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImhpc3RvcnlcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL3JvdXRlci5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvcHJlZmV0Y2guc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2pzb24uc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FwcC5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9pbmRleC5zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHJlc3QtaG9va3MvcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHJlc3QtaG9va3Mvc3NyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBhbnQtZGVzaWduL2Nzc2luanNcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwidmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mID8gKG9iaikgPT4gKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKSA6IChvYmopID0+IChvYmouX19wcm90b19fKTtcbnZhciBsZWFmUHJvdG90eXBlcztcbi8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLy8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLy8gbW9kZSAmIDE2OiByZXR1cm4gdmFsdWUgd2hlbiBpdCdzIFByb21pc2UtbGlrZVxuLy8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuX193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcblx0aWYobW9kZSAmIDEpIHZhbHVlID0gdGhpcyh2YWx1ZSk7XG5cdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG5cdGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUpIHtcblx0XHRpZigobW9kZSAmIDQpICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcblx0XHRpZigobW9kZSAmIDE2KSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlO1xuXHR9XG5cdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG5cdHZhciBkZWYgPSB7fTtcblx0bGVhZlByb3RvdHlwZXMgPSBsZWFmUHJvdG90eXBlcyB8fCBbbnVsbCwgZ2V0UHJvdG8oe30pLCBnZXRQcm90byhbXSksIGdldFByb3RvKGdldFByb3RvKV07XG5cdGZvcih2YXIgY3VycmVudCA9IG1vZGUgJiAyICYmIHZhbHVlOyB0eXBlb2YgY3VycmVudCA9PSAnb2JqZWN0JyAmJiAhfmxlYWZQcm90b3R5cGVzLmluZGV4T2YoY3VycmVudCk7IGN1cnJlbnQgPSBnZXRQcm90byhjdXJyZW50KSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2goKGtleSkgPT4gKGRlZltrZXldID0gKCkgPT4gKHZhbHVlW2tleV0pKSk7XG5cdH1cblx0ZGVmWydkZWZhdWx0J10gPSAoKSA9PiAodmFsdWUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGRlZik7XG5cdHJldHVybiBucztcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3QtZG9tL3NlcnZlclwiKTsiLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyByZW5kZXJUb1BpcGVhYmxlU3RyZWFtIGFzIHJlYWN0UmVuZGVyIH0gZnJvbSAncmVhY3QtZG9tL3NlcnZlcic7XG5cbmltcG9ydCB0eXBlIHsgUmVuZGVyIH0gZnJvbSAnLi9zY3JpcHRzL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxheVNwb3V0cyhcbiAgc3BvdXRzOiAocHJvcHM6IFNlcnZlclByb3BzKSA9PiBQcm9taXNlPHtcbiAgICBhcHA6IEpTWC5FbGVtZW50O1xuICB9PixcbiAge1xuICAgIHRpbWVvdXRNUyA9IDEwMDAwLFxuICAgIG9uRXJyb3IsXG4gIH06IHsgdGltZW91dE1TPzogbnVtYmVyOyBvbkVycm9yPzogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkIH0gPSB7fSxcbikge1xuICBjb25zdCByZW5kZXI6IFJlbmRlciA9IGFzeW5jIChjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMpID0+IHtcbiAgICBjb25zdCBub25jZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYXBwIH0gPSBhd2FpdCBzcG91dHMoeyBjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMsIG5vbmNlIH0pO1xuXG4gICAgICBsZXQgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHsgcGlwZSwgYWJvcnQgfSA9IHJlYWN0UmVuZGVyKGFwcCwge1xuICAgICAgICBub25jZSxcbiAgICAgICAgLy9ib290c3RyYXBTY3JpcHRzOiBhc3NldHMuZmlsdGVyKGFzc2V0ID0+IGFzc2V0LmVuZHNXaXRoKCcuanMnKSksXG4gICAgICAgIG9uU2hlbGxSZWFkeSgpIHtcbiAgICAgICAgICAvL21hbmFnZXJzLmZvckVhY2gobWFuYWdlciA9PiBtYW5hZ2VyLmNsZWFudXAoKSk7XG4gICAgICAgICAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgYmVmb3JlIHdlIHN0YXJ0ZWQgc3RyZWFtaW5nLCB3ZSBzZXQgdGhlIGVycm9yIGNvZGUgYXBwcm9wcmlhdGVseS5cbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGRpZEVycm9yID8gNTAwIDogMjAwO1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2hlbGxFcnJvcigpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yKGU6IGFueSkge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIC8vcGlwZShyZXMpOyBSZW1vdmluZyB0aGlzIGF2b2lkcywgXCJSZWFjdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBwaXBpbmcgdG8gb25lIHdyaXRhYmxlIHN0cmVhbS5cIlxuICAgICAgICAgIGlmIChvbkVycm9yKSBvbkVycm9yKGUpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICAvLyBBYmFuZG9uIGFuZCBzd2l0Y2ggdG8gY2xpZW50IHJlbmRlcmluZyBpZiBlbm91Z2ggdGltZSBwYXNzZXMuXG4gICAgICAvLyBUcnkgbG93ZXJpbmcgdGhpcyB0byBzZWUgdGhlIGNsaWVudCByZWNvdmVyLlxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4gKGFib3J0IGFzIGFueSkoYFRpbWVvdXQgb2YgJHt0aW1lb3V0TVN9bXMgZXhjZWVkZWRgKSxcbiAgICAgICAgdGltZW91dE1TLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBpZiAob25FcnJvcikgb25FcnJvcihlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xuICByZXR1cm4gcmVuZGVyO1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJleHBvcnQgaW50ZXJmYWNlIFBvbGljeSB7XG4gIFtkaXJlY3RpdmU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG4vLyBUT0RPOiBtZW1vaXplIHRoaXNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbGljeShwb2xpY3lPYmo6IFBvbGljeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocG9saWN5T2JqKVxuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IEFycmF5LmlzQXJyYXkocG9saWN5T2JqW2tleV0pXG4gICAgICAgID8gWy4uLm5ldyBTZXQocG9saWN5T2JqW2tleV0pLnZhbHVlcygpXS5maWx0ZXIodiA9PiB2KS5qb2luKCcgJylcbiAgICAgICAgOiBwb2xpY3lPYmpba2V5XTtcblxuICAgICAgLy8gbW92ZSBzdHJpY3QgZHluYW1pYyB0byB0aGUgZW5kIG9mIHRoZSBwb2xpY3kgaWYgaXQgZXhpc3RzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggY3NwMlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3NjcmlwdC1zcmMjc3RyaWN0LWR5bmFtaWNcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoXCInc3RyaWN0LWR5bmFtaWMnXCIpKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGAke3ZhbFxuICAgICAgICAgIC5yZXBsYWNlKC9cXHM/J3N0cmljdC1keW5hbWljJ1xccz8vZ2ksICcgJylcbiAgICAgICAgICAudHJpbSgpfSAnc3RyaWN0LWR5bmFtaWMnYDtcbiAgICAgICAgcmV0dXJuIGAke2tleX0gJHtuZXdWYWx9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2tleX0gJHt2YWx9YDtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBQb2xpY3kgfSBmcm9tICcuL2NzcC5qcyc7XG5pbXBvcnQgeyBidWlsZFBvbGljeSB9IGZyb20gJy4vY3NwLmpzJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYXNzZXRzOiB7IGhyZWY6IHN0cmluZzsgYXM/OiBzdHJpbmc7IHJlbD86IHN0cmluZyB9W107XG4gIGhlYWQ6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZXh0cmFTdHlsZTogUmVhY3QuUmVhY3ROb2RlO1xuICBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZDogc3RyaW5nO1xuICBjaGFyU2V0OiBzdHJpbmc7XG4gIGNzUG9saWN5PzogUG9saWN5O1xuICBub25jZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50KHtcbiAgYXNzZXRzLFxuICBoZWFkLFxuICBjaGlsZHJlbixcbiAgdGl0bGUsXG4gIHJvb3RJZCxcbiAgY2hhclNldCxcbiAgY3NQb2xpY3ksXG4gIG5vbmNlLFxuICBzY3JpcHRzLFxuICBleHRyYVN0eWxlLFxufTogUHJvcHMpIHtcbiAgbGV0IGNzcE1ldGE6IG51bGwgfCBSZWFjdC5SZWFjdE5vZGUgPSBudWxsO1xuICBpZiAoY3NQb2xpY3kpIHtcbiAgICAvLyBhZGQgbm9uY2UgdG8gcG9saWN5XG4gICAgY29uc3QgcG9saWN5ID0ge1xuICAgICAgLi4uY3NQb2xpY3ksXG4gICAgfTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgIGlmICh0eXBlb2YgcG9saWN5WydzY3JpcHQtc3JjJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gW3BvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9saWN5WydzY3JpcHQtc3JjJ10gPSBbLi4ucG9saWN5WydzY3JpcHQtc3JjJ10sIGAnbm9uY2UtJHtub25jZX0nYF07XG4gICAgICB9XG4gICAgfVxuICAgIGNzcE1ldGEgPSAoXG4gICAgICA8bWV0YSBodHRwRXF1aXY9XCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiIGNvbnRlbnQ9e2J1aWxkUG9saWN5KHBvbGljeSl9IC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxodG1sPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJTZXQ9e2NoYXJTZXR9IC8+XG4gICAgICAgIHtjc3BNZXRhfVxuICAgICAgICB7aGVhZH1cbiAgICAgICAge2V4dHJhU3R5bGV9XG4gICAgICAgIHthc3NldHMubWFwKChhc3NldCwgaSkgPT4gKFxuICAgICAgICAgIDxsaW5rIGtleT17aX0gcmVsPVwicHJlbG9hZFwiIHsuLi5hc3NldH0gLz5cbiAgICAgICAgKSl9XG4gICAgICAgIDx0aXRsZT57dGl0bGV9PC90aXRsZT5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPXtyb290SWR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAge3NjcmlwdHN9XG4gICAgICAgIHthc3NldHNcbiAgICAgICAgICAuZmlsdGVyKCh7IGhyZWYgfSkgPT4gaHJlZi5lbmRzV2l0aCgnLmpzJykpXG4gICAgICAgICAgLm1hcCgoeyBocmVmIH0sIGkpID0+IChcbiAgICAgICAgICAgIDxzY3JpcHQga2V5PXtpfSBzcmM9e2hyZWZ9IGFzeW5jIC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuRG9jdW1lbnQuZGVmYXVsdFByb3BzID0ge1xuICBoZWFkOiAoXG4gICAgPD5cbiAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiIC8+XG4gICAgICA8bGlua1xuICAgICAgICByZWw9XCJzaG9ydGN1dCBpY29uXCJcbiAgICAgICAgaHJlZj17YCR7cHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCA/PyAnLyd9ZmF2aWNvbi5pY29gfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKSxcbiAgY2hhclNldDogJ3V0Zi04JyxcbiAgcm9vdElkOiAnYW5hbnNpLXJvb3QnLFxuICBzY3JpcHRzOiBudWxsLFxufTtcbiIsImltcG9ydCB0eXBlIHsgUm91dGUgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3RhdHNDaHVua0dyb3VwIH0gZnJvbSAnd2VicGFjayc7XG5cbmltcG9ydCB0eXBlIHsgUG9saWN5IH0gZnJvbSAnLi9jc3AuanMnO1xuaW1wb3J0IERvY3VtZW50IGZyb20gJy4vRG9jdW1lbnRDb21wb25lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPGFueT5bXTtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbiAgZXh0cmFTdHlsZT86IFJlYWN0LlJlYWN0Tm9kZVtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnRTcG91dChvcHRpb25zOiB7XG4gIGhlYWQ/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZD86IHN0cmluZztcbiAgY2hhclNldD86IHN0cmluZztcbiAgY3NQb2xpY3k/OiBQb2xpY3k7XG59KTogU2VydmVyU3BvdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBOZWVkZWROZXh0PiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHB1YmxpY1BhdGggPSBwcm9wcy5jbGllbnRNYW5pZmVzdC5wdWJsaWNQYXRoO1xuXG4gICAgaWYgKFxuICAgICAgT2JqZWN0LmtleXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5sZW5ndGggPCAxIHx8XG4gICAgICBwdWJsaWNQYXRoID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbmlmZXN0IG1pc3NpbmcgZW50cmllcyBuZWVkZWQnKTtcblxuICAgIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIHRoaXMgcGFja2FnZSBmb3IgYnVpbGQgc3RhdHMgaW4gZnV0dXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC90cmVlL21haW4vcGFja2FnZXMvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrXG4gICAgY29uc3QgYXNzZXRNYXAgPSAoYXNzZXRzOiB7IG5hbWU6IHN0cmluZzsgc2l6ZT86IG51bWJlciB9W10pID0+XG4gICAgICBhc3NldHMubWFwKCh7IG5hbWUgfSkgPT4gYCR7cHVibGljUGF0aH0ke25hbWV9YCk7XG5cbiAgICBjb25zdCBhc3NldExpc3Q6IHN0cmluZ1tdID0gW107XG4gICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdD8uZW50cnlwb2ludHMgPz8ge30pLmZvckVhY2goXG4gICAgICBlbnRyeXBvaW50ID0+IHtcbiAgICAgICAgYXNzZXRMaXN0LnB1c2goLi4uYXNzZXRNYXAoZW50cnlwb2ludC5hc3NldHMgPz8gW10pKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICBuZXcgU2V0KFxuICAgICAgYXNzZXRNYXAoXG4gICAgICAgIE9iamVjdC52YWx1ZXMocHJvcHMuY2xpZW50TWFuaWZlc3QubmFtZWRDaHVua0dyb3VwcyA/PyB7fSlcbiAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT5cbiAgICAgICAgICAgIG5leHRQcm9wcy5tYXRjaGVkUm91dGVzLnNvbWUocm91dGUgPT4gbmFtZT8uaW5jbHVkZXMocm91dGUubmFtZSkpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuZmxhdE1hcChjaHVuayA9PiBbXG4gICAgICAgICAgICAuLi4oY2h1bmsuYXNzZXRzID8/IFtdKSxcbiAgICAgICAgICAgIC8vIGFueSBjaHVuayBwcmVsb2Fkc1xuICAgICAgICAgICAgLi4uY2hpbGRyZW5Bc3NldHMoY2h1bmspLFxuICAgICAgICAgIF0pLFxuICAgICAgKSxcbiAgICApLmZvckVhY2goYXNzZXQgPT4gYXNzZXRMaXN0LnB1c2goYXNzZXQpKTtcblxuICAgIC8vIGZpbmQgYWRkaXRpb25hbCBhc3NldHMgdG8gcHJlbG9hZCBiYXNlZCBvbiBtYXRjaGVkIHJvdXRlXG4gICAgY29uc3QgYXNzZXRzOiB7XG4gICAgICBocmVmOiBzdHJpbmc7XG4gICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB9W10gPSBhc3NldExpc3RcbiAgICAgIC5maWx0ZXIoYXNzZXQgPT4gIWFzc2V0LmVuZHNXaXRoKCcuaG90LXVwZGF0ZS5qcycpKVxuICAgICAgLm1hcChhc3NldCA9PlxuICAgICAgICBhc3NldC5lbmRzV2l0aCgnLmNzcycpXG4gICAgICAgICAgPyB7IGhyZWY6IGFzc2V0LCByZWw6ICdzdHlsZXNoZWV0JyB9XG4gICAgICAgICAgOiBhc3NldC5lbmRzV2l0aCgnLmpzJylcbiAgICAgICAgICA/IHsgaHJlZjogYXNzZXQsIGFzOiAnc2NyaXB0JyB9XG4gICAgICAgICAgOiB7IGhyZWY6IGFzc2V0IH0sXG4gICAgICApO1xuICAgIGNvbnN0IG5vbmNlID1cbiAgICAgIC8vIG5vbmNlcyBuZWdhdGUgJ3Vuc2FmZS1pbmxpbmUnIHNvIGRvIG5vdCBhZGQgaXQgaW4gZGV2ZWxvcG1lbnQgdG8ga2VlcCB0aGluZ3MgZWFzaWVyXG4gICAgICBwcm9wcy5ub25jZSAmJlxuICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgfHxcbiAgICAgICAgKHByb3BzLnJlcSBhcyBSZXF1ZXN0KT8ucHJvdG9jb2wgIT09ICdodHRwJylcbiAgICAgICAgPyBwcm9wcy5ub25jZVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IChcbiAgICAgICAgPERvY3VtZW50XG4gICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgZXh0cmFTdHlsZT17bmV4dFByb3BzLmV4dHJhU3R5bGV9XG4gICAgICAgICAgdGl0bGU9e25leHRQcm9wcy50aXRsZSA/PyBvcHRpb25zLnRpdGxlfVxuICAgICAgICAgIGFzc2V0cz17YXNzZXRzfVxuICAgICAgICAgIHJvb3RJZD17b3B0aW9ucy5yb290SWR9XG4gICAgICAgICAgbm9uY2U9e25vbmNlfVxuICAgICAgICAgIGNzUG9saWN5PXtvcHRpb25zLmNzUG9saWN5fVxuICAgICAgICAgIHNjcmlwdHM9e25leHRQcm9wcy5zY3JpcHRzfVxuICAgICAgICA+XG4gICAgICAgICAge25leHRQcm9wcy5hcHB9XG4gICAgICAgIDwvRG9jdW1lbnQ+XG4gICAgICApLFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuQXNzZXRzKGNodW5rOiBTdGF0c0NodW5rR3JvdXApIHtcbiAgcmV0dXJuIGNodW5rLmNoaWxkcmVuXG4gICAgPyBPYmplY3QudmFsdWVzKGNodW5rLmNoaWxkcmVuKS5mbGF0TWFwKHByZWxvYWQgPT5cbiAgICAgICAgcHJlbG9hZC5mbGF0TWFwKGMgPT4gYy5hc3NldHMgPz8gW10pLFxuICAgICAgKVxuICAgIDogW107XG59XG4iLCJpbXBvcnQgeyB0eXBlIENvbnRyb2xsZXIsIHR5cGUgTWFuYWdlciwgdHlwZSBTdGF0ZSB9IGZyb20gJ0ByZXN0LWhvb2tzL3JlYWN0JztcbmltcG9ydCB0eXBlIHsgU3RvcmUgfSBmcm9tICdyZWR1eCc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzdEhvb2tzU3BvdXQoXG4gIG9wdGlvbnM6IHtcbiAgICBnZXRNYW5hZ2Vycz86ICgpID0+IE1hbmFnZXJbXTtcbiAgfSA9IHt9LFxuKTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB7IGNvbnRyb2xsZXI6IENvbnRyb2xsZXIgfSAmIHsgc3RvcmU6IFN0b3JlPFN0YXRlPHVua25vd24+PiB9LFxuICB7IGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47IHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXSB9XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG1hbmFnZXJzID0gb3B0aW9ucz8uZ2V0TWFuYWdlcnM/LigpID8/IFtcbiAgICAgIG5ldyAoYXdhaXQgaW1wb3J0KCdAcmVzdC1ob29rcy9yZWFjdCcpKS5OZXR3b3JrTWFuYWdlcigpLFxuICAgIF07XG4gICAgY29uc3QgeyBjcmVhdGVQZXJzaXN0ZWRTdG9yZSB9ID0gYXdhaXQgaW1wb3J0KCdAcmVzdC1ob29rcy9zc3InKTtcbiAgICBjb25zdCBbU2VydmVyQ2FjaGVQcm92aWRlciwgdXNlUmVhZHlDYWNoZVN0YXRlLCBjb250cm9sbGVyLCBzdG9yZV0gPVxuICAgICAgY3JlYXRlUGVyc2lzdGVkU3RvcmUobWFuYWdlcnMpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dCh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGNvbnRyb2xsZXIsXG4gICAgICBzdG9yZSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgaW5pdERhdGE6IHtcbiAgICAgICAgLi4ubmV4dFByb3BzLmluaXREYXRhLFxuICAgICAgICByZXN0aG9va3M6IHVzZVJlYWR5Q2FjaGVTdGF0ZSxcbiAgICAgIH0sXG4gICAgICBhcHA6IDxTZXJ2ZXJDYWNoZVByb3ZpZGVyPntuZXh0UHJvcHMuYXBwfTwvU2VydmVyQ2FjaGVQcm92aWRlcj4sXG4gICAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byBvbmx5IGluamVjdCBpbiBuZXh0IGFuZCBub3QgaGF2ZSB0byBhbHNvIHB1dCBoZXJlXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgc3RvcmUsXG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWROZXh0ID0ge1xuICBpbml0RGF0YT86IFJlY29yZDxzdHJpbmcsICgpID0+IHVua25vd24+O1xuICBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW107XG4gIGV4dHJhU3R5bGU/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFudGRTcG91dCgpOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBOZWVkZWROZXh0XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgY3JlYXRlQ2FjaGUsIGV4dHJhY3RTdHlsZSwgU3R5bGVQcm92aWRlciB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgJ0BhbnQtZGVzaWduL2Nzc2luanMnXG4gICAgKTtcbiAgICBjb25zdCBjYWNoZSA9IGNyZWF0ZUNhY2hlKCk7XG5cbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZVtdID0gbmV4dFByb3BzLnNjcmlwdHMgPz8gW107XG5cbiAgICBjb25zdCBBbnRkU2hlZXRzID0gKCk6IEpTWC5FbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzY3JpcHRcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgX19odG1sOiBgPC9zY3JpcHQ+JHtleHRyYWN0U3R5bGUoY2FjaGUpfTxzY3JpcHQ+YCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9O1xuICAgIC8vIHVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byBpbmplY3QgdGhpcyBhZnRlciB0aGUgZW50aXJlIGNvbnRlbnQgaGFzIHN0cmVhbWVkIGluIG9yIGl0IGRvZXNuJ3QgY29ycmVjdGx5IHBvcHVsYXRlXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9jc3NpbmpzL2lzc3Vlcy83OVxuICAgIHNjcmlwdHMucHVzaCg8QW50ZFNoZWV0cyAvPik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiA8U3R5bGVQcm92aWRlciBjYWNoZT17Y2FjaGV9PntuZXh0UHJvcHMuYXBwfTwvU3R5bGVQcm92aWRlcj4sXG4gICAgICBzY3JpcHRzLFxuICAgIH07XG4gIH07XG59XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcIkBhbmFuc2kvcm91dGVyXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiaGlzdG9yeVwiKTsiLCJpbXBvcnQgeyBSb3V0ZSwgUm91dGVQcm92aWRlciwgUm91dGVDb250cm9sbGVyIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IHsgY3JlYXRlTWVtb3J5SGlzdG9yeSB9IGZyb20gJ2hpc3RvcnknO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBDcmVhdGVSb3V0ZXIsIFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJvdXRlclNwb3V0PFJlc29sdmVXaXRoPihvcHRpb25zOiB7XG4gIHJlc29sdmVXaXRoPzogYW55O1xuICB1c2VSZXNvbHZlV2l0aDogKCkgPT4gUmVzb2x2ZVdpdGg7XG4gIGNyZWF0ZVJvdXRlcjogQ3JlYXRlUm91dGVyPFJlc29sdmVXaXRoPjtcbn0pOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHtcbiAgICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSZXNvbHZlV2l0aD5bXTtcbiAgfSAmIHtcbiAgICByb3V0ZXI6IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxSZXNvbHZlV2l0aCwgYW55Pj47XG4gIH1cbj4ge1xuICBjb25zdCBjcmVhdGVSb3V0ZUNvbXBvbmVudCA9IChcbiAgICByb3V0ZXI6IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxSZXNvbHZlV2l0aCwgYW55Pj4sXG4gICkgPT5cbiAgICBmdW5jdGlvbiBSb3V0ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICAgICAgY29uc3QgcmVzb2x2ZVdpdGggPSBvcHRpb25zLnVzZVJlc29sdmVXaXRoKCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSb3V0ZVByb3ZpZGVyIHJvdXRlcj17cm91dGVyfSByZXNvbHZlV2l0aD17cmVzb2x2ZVdpdGh9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9Sb3V0ZVByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9O1xuXG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCB1cmwgPSBwcm9wcy5yZXEudXJsIHx8ICcnO1xuICAgIGNvbnN0IHJvdXRlciA9IG9wdGlvbnMuY3JlYXRlUm91dGVyKFxuICAgICAgY3JlYXRlTWVtb3J5SGlzdG9yeSh7IGluaXRpYWxFbnRyaWVzOiBbdXJsXSB9KSxcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoPltdID0gcm91dGVyLmdldE1hdGNoZWRSb3V0ZXModXJsKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBtYXRjaGVkUm91dGVzLFxuICAgICAgcm91dGVyLFxuICAgIH0pO1xuXG4gICAgY29uc3QgUm91dGVyID0gY3JlYXRlUm91dGVDb21wb25lbnQocm91dGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IDxSb3V0ZXI+e25leHRQcm9wcy5hcHB9PC9Sb3V0ZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5cbmltcG9ydCB0eXBlIHsgUmVzb2x2ZVByb3BzLCBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZFByb3BzPFJvdXRlV2l0aD4gPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJvdXRlV2l0aD5bXTtcbn0gJiBSZXNvbHZlUHJvcHM7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByZWZldGNoU3BvdXQ8RiBleHRlbmRzIHN0cmluZz4oZmllbGQ6IEYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxcbiAgICBSb3V0ZVdpdGgsXG4gICAgTiBleHRlbmRzIE5lZWRlZFByb3BzPFJvdXRlV2l0aD4sXG4gICAgSSBleHRlbmRzIFNlcnZlclByb3BzLFxuICA+KFxuICAgIG5leHQ6IChwcm9wczogSSkgPT4gUHJvbWlzZTxcbiAgICAgIHtcbiAgICAgICAgW0sgaW4gRl06IFJvdXRlV2l0aDtcbiAgICAgIH0gJiBOXG4gICAgPixcbiAgKSB7XG4gICAgcmV0dXJuIGFzeW5jIChwcm9wczogSSkgPT4ge1xuICAgICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRvRmV0Y2g6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuICAgICAgICBuZXh0UHJvcHMubWF0Y2hlZFJvdXRlcy5mb3JFYWNoKHJvdXRlID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJvdXRlLnJlc29sdmVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0b0ZldGNoLnB1c2gocm91dGUucmVzb2x2ZURhdGEobmV4dFByb3BzW2ZpZWxkXSwgcm91dGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0b0ZldGNoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0UHJvcHM7XG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEpTT05TcG91dCh7XG4gIGlkID0gJ2FuYW5zaS1qc29uJyxcbn06IHsgaWQ/OiBzdHJpbmcgfSA9IHt9KTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmVlZGVkTmV4dFxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZVtdID0gbmV4dFByb3BzLnNjcmlwdHMgPz8gW107XG5cbiAgICBPYmplY3QuZW50cmllcyhuZXh0UHJvcHMuaW5pdERhdGEgPz8ge30pLmZvckVhY2goKFtrZXksIHVzZURhdGFdKSA9PiB7XG4gICAgICBjb25zdCBnbG9iYWxJZCA9IGAke2lkfS4ke2tleX1gO1xuICAgICAgY29uc3QgU2NyaXB0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB1c2VEYXRhKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW5jb2RlZCA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICAgIGlkPXtnbG9iYWxJZH1cbiAgICAgICAgICAgICAgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgIF9faHRtbDogZW5jb2RlZCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gVE9ETzogVXNlIHVuaWZpZWQgbG9nZ2luZ1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHNlcmlhbGl6aW5nIGpzb24gZm9yICR7a2V5fWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzY3JpcHRzLnB1c2goXG4gICAgICAgIDxTdXNwZW5zZSBrZXk9e2dsb2JhbElkfT5cbiAgICAgICAgICA8U2NyaXB0IC8+XG4gICAgICAgIDwvU3VzcGVuc2U+LFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBzY3JpcHRzLFxuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgeyBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jb25zdCBhcHBTcG91dCA9XG4gIChhcHA6IEpTWC5FbGVtZW50KSA9PlxuICA8UCBleHRlbmRzIFNlcnZlclByb3BzPihwcm9wczogUCkgPT5cbiAgICBQcm9taXNlLnJlc29sdmUoeyAuLi5wcm9wcywgYXBwIH0pO1xuXG5leHBvcnQgZGVmYXVsdCBhcHBTcG91dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgbGF5U3BvdXRzIH0gZnJvbSAnLi9sYXlTcG91dHMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvZG9jdW1lbnQuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVzdEhvb2tzU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9yZXN0SG9va3Muc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYW50ZFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvYW50ZC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByb3V0ZXJTcG91dCB9IGZyb20gJy4vc3BvdXRzL3JvdXRlci5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmVmZXRjaFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcHJlZmV0Y2guc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSlNPTlNwb3V0IH0gZnJvbSAnLi9zcG91dHMvanNvbi5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcHBTcG91dCB9IGZyb20gJy4vc3BvdXRzL2FwcC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vc3BvdXRzL3R5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgYXMgU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG4iXSwibmFtZXMiOlsiY3J5cHRvIiwicmVuZGVyVG9QaXBlYWJsZVN0cmVhbSIsInJlYWN0UmVuZGVyIiwibGF5U3BvdXRzIiwic3BvdXRzIiwidGltZW91dE1TIiwib25FcnJvciIsInJlbmRlciIsImNsaWVudE1hbmlmZXN0IiwicmVxIiwicmVzIiwibm9uY2UiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiYXBwIiwiZGlkRXJyb3IiLCJwaXBlIiwiYWJvcnQiLCJvblNoZWxsUmVhZHkiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwib25TaGVsbEVycm9yIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsInNldFRpbWVvdXQiLCJidWlsZFBvbGljeSIsInBvbGljeU9iaiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJTZXQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJ2Iiwiam9pbiIsImluY2x1ZGVzIiwibmV3VmFsIiwicmVwbGFjZSIsInRyaW0iLCJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsImNzUG9saWN5Iiwic2NyaXB0cyIsImV4dHJhU3R5bGUiLCJjc3BNZXRhIiwicG9saWN5IiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiaHR0cEVxdWl2IiwiY29udGVudCIsIl9fc2VsZiIsIl9fc291cmNlIiwiZmlsZU5hbWUiLCJfanN4RmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwiYXNzZXQiLCJpIiwicmVsIiwiaWQiLCJocmVmIiwiZW5kc1dpdGgiLCJzcmMiLCJhc3luYyIsImRlZmF1bHRQcm9wcyIsIkZyYWdtZW50IiwibmFtZSIsIl9wcm9jZXNzJGVudiRXRUJQQUNLXyIsInByb2Nlc3MiLCJlbnYiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwiRG9jdW1lbnRTcG91dCIsIm9wdGlvbnMiLCJuZXh0IiwicHJvcHMiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3QiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3QyIiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0MyIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdDQiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3Q1IiwiX3Byb3BzJHJlcSIsIl9uZXh0UHJvcHMkdGl0bGUiLCJuZXh0UHJvcHMiLCJwdWJsaWNQYXRoIiwiZW50cnlwb2ludHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJFcnJvciIsImFzc2V0TWFwIiwiYXNzZXRMaXN0IiwiZm9yRWFjaCIsImVudHJ5cG9pbnQiLCJfZW50cnlwb2ludCRhc3NldHMiLCJwdXNoIiwibmFtZWRDaHVua0dyb3VwcyIsIm1hdGNoZWRSb3V0ZXMiLCJzb21lIiwicm91dGUiLCJmbGF0TWFwIiwiY2h1bmsiLCJfY2h1bmskYXNzZXRzIiwiY2hpbGRyZW5Bc3NldHMiLCJhcyIsIk5PREVfRU5WIiwicHJvdG9jb2wiLCJwcmVsb2FkIiwiYyIsIl9jJGFzc2V0cyIsInJlc3RIb29rc1Nwb3V0IiwiX29wdGlvbnMkZ2V0TWFuYWdlcnMiLCJtYW5hZ2VycyIsImdldE1hbmFnZXJzIiwiTmV0d29ya01hbmFnZXIiLCJjcmVhdGVQZXJzaXN0ZWRTdG9yZSIsIlNlcnZlckNhY2hlUHJvdmlkZXIiLCJ1c2VSZWFkeUNhY2hlU3RhdGUiLCJjb250cm9sbGVyIiwic3RvcmUiLCJpbml0RGF0YSIsInJlc3Rob29rcyIsImFudGRTcG91dCIsIl9uZXh0UHJvcHMkc2NyaXB0cyIsImNyZWF0ZUNhY2hlIiwiZXh0cmFjdFN0eWxlIiwiU3R5bGVQcm92aWRlciIsImNhY2hlIiwiQW50ZFNoZWV0cyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiUm91dGVQcm92aWRlciIsImNyZWF0ZU1lbW9yeUhpc3RvcnkiLCJyb3V0ZXJTcG91dCIsImNyZWF0ZVJvdXRlQ29tcG9uZW50Iiwicm91dGVyIiwiUm91dGVyIiwicmVzb2x2ZVdpdGgiLCJ1c2VSZXNvbHZlV2l0aCIsInVybCIsImNyZWF0ZVJvdXRlciIsImluaXRpYWxFbnRyaWVzIiwiZ2V0TWF0Y2hlZFJvdXRlcyIsInByZWZldGNoU3BvdXQiLCJmaWVsZCIsInRvRmV0Y2giLCJyZXNvbHZlRGF0YSIsIlByb21pc2UiLCJhbGwiLCJTdXNwZW5zZSIsIkpTT05TcG91dCIsIl9uZXh0UHJvcHMkaW5pdERhdGEiLCJlbnRyaWVzIiwidXNlRGF0YSIsImdsb2JhbElkIiwiU2NyaXB0IiwiZGF0YSIsImVuY29kZWQiLCJKU09OIiwic3RyaW5naWZ5IiwidHlwZSIsImFwcFNwb3V0IiwicmVzb2x2ZSIsImRlZmF1bHQiLCJkb2N1bWVudFNwb3V0Il0sInNvdXJjZVJvb3QiOiIifQ==