@anansi/core 0.14.28 → 0.14.30
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 +12 -0
- package/dist/client.js +11 -14
- package/dist/client.js.map +1 -1
- package/dist/server.js +39 -53
- package/dist/server.js.map +1 -1
- package/lib/floodSpouts.js +1 -4
- package/lib/index.js +1 -14
- package/lib/index.server.js +1 -16
- package/lib/laySpouts.js +5 -15
- package/lib/scripts/getProxyMiddlewares.js +11 -20
- package/lib/scripts/index.js +1 -6
- package/lib/scripts/serve.js +18 -53
- package/lib/scripts/startDevserver.js +33 -70
- package/lib/spouts/DocumentComponent.js +5 -14
- package/lib/spouts/app.js +3 -4
- package/lib/spouts/app.server.js +3 -4
- package/lib/spouts/csp.js +4 -5
- package/lib/spouts/document.js +1 -2
- package/lib/spouts/document.server.js +12 -17
- package/lib/spouts/json.js +4 -6
- package/lib/spouts/json.server.js +3 -10
- package/lib/spouts/prefetch.server.js +1 -4
- package/lib/spouts/restHooks.js +3 -10
- package/lib/spouts/restHooks.server.js +7 -10
- package/lib/spouts/rhHelp.js +1 -12
- package/lib/spouts/router.js +5 -10
- package/lib/spouts/router.server.js +5 -10
- package/package.json +6 -6
|
@@ -2,72 +2,52 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
-
|
|
6
5
|
exports.__esModule = true;
|
|
7
6
|
exports.default = startDevServer;
|
|
8
|
-
|
|
9
7
|
var _util = require("util");
|
|
10
|
-
|
|
11
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
12
|
-
|
|
13
9
|
var _path = _interopRequireDefault(require("path"));
|
|
14
|
-
|
|
15
10
|
var _webpack = _interopRequireDefault(require("webpack"));
|
|
16
|
-
|
|
17
11
|
var _memfs = require("memfs");
|
|
18
|
-
|
|
19
12
|
var _tmp = _interopRequireDefault(require("tmp"));
|
|
20
|
-
|
|
21
13
|
var _sourceMapSupport = _interopRequireDefault(require("source-map-support"));
|
|
22
|
-
|
|
23
14
|
var _unionfs = require("unionfs");
|
|
24
|
-
|
|
25
15
|
var _webpackDevServer = _interopRequireDefault(require("webpack-dev-server"));
|
|
26
|
-
|
|
27
16
|
var _runtime = _interopRequireDefault(require("webpack/lib/logging/runtime"));
|
|
28
|
-
|
|
29
17
|
var _fsRequire = require("fs-require");
|
|
30
|
-
|
|
31
18
|
require("cross-fetch/polyfill");
|
|
32
|
-
|
|
33
19
|
// run directly from node
|
|
34
20
|
if (require.main === module) {
|
|
35
21
|
const entrypoint = process.argv[2];
|
|
36
|
-
|
|
37
22
|
if (!entrypoint) {
|
|
38
23
|
console.log(`Usage: start-anansi <entrypoint-file>`);
|
|
39
24
|
process.exit(-1);
|
|
40
25
|
}
|
|
41
|
-
|
|
42
26
|
startDevServer(entrypoint);
|
|
43
27
|
}
|
|
44
|
-
|
|
45
28
|
function startDevServer(entrypoint, env = {}) {
|
|
46
29
|
var _webpackConfigs$, _webpackConfigs$$devS;
|
|
47
|
-
|
|
48
30
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
49
|
-
const webpackConfig = require(require.resolve(
|
|
31
|
+
const webpackConfig = require(require.resolve(
|
|
32
|
+
// TODO: use normal resolution algorithm to find webpack file
|
|
50
33
|
_path.default.join(process.cwd(), 'webpack.config')));
|
|
34
|
+
const log = _runtime.default.getLogger('anansi-devserver');
|
|
51
35
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
36
|
+
// Set up in memory filesystem
|
|
55
37
|
const volume = new _memfs.Volume();
|
|
56
38
|
const fs = (0, _memfs.createFsFromVolume)(volume);
|
|
57
|
-
|
|
58
39
|
_unionfs.ufs.use(_fs.default).use(fs);
|
|
59
|
-
|
|
60
40
|
const fsRequire = (0, _fsRequire.createFsRequire)(_unionfs.ufs);
|
|
61
41
|
const readFile = (0, _util.promisify)(_unionfs.ufs.readFile);
|
|
62
|
-
let server;
|
|
42
|
+
let server;
|
|
63
43
|
|
|
44
|
+
// Generate a temporary file so we can hot reload from the root of the application
|
|
64
45
|
function hotEntry(entryPath) {
|
|
65
46
|
// eslint-disable-next-line
|
|
66
47
|
// @ts-ignore for some reason it's not picking up that other options are optional
|
|
67
48
|
const generatedEntrypoint = _tmp.default.fileSync({
|
|
68
49
|
postfix: '.js'
|
|
69
50
|
});
|
|
70
|
-
|
|
71
51
|
_fs.default.writeSync(generatedEntrypoint.fd, `
|
|
72
52
|
import entry from "${_path.default.resolve(process.cwd(), entryPath)}";
|
|
73
53
|
|
|
@@ -77,39 +57,36 @@ function startDevServer(entrypoint, env = {}) {
|
|
|
77
57
|
|
|
78
58
|
export default entry;
|
|
79
59
|
`);
|
|
80
|
-
|
|
81
60
|
return generatedEntrypoint;
|
|
82
61
|
}
|
|
83
|
-
|
|
84
|
-
|
|
62
|
+
const webpackConfigs = [webpackConfig({
|
|
63
|
+
...env,
|
|
85
64
|
entrypath: hotEntry(entrypoint).name,
|
|
86
65
|
name: 'client'
|
|
87
66
|
}, {
|
|
88
67
|
mode: 'development'
|
|
89
|
-
}), webpackConfig({
|
|
68
|
+
}), webpackConfig({
|
|
69
|
+
...env,
|
|
90
70
|
entrypath: entrypoint.replace('.tsx', '.server.tsx'),
|
|
91
71
|
name: 'server',
|
|
92
72
|
BROWSERSLIST_ENV: 'current node'
|
|
93
73
|
}, {
|
|
94
74
|
mode: 'development',
|
|
95
75
|
target: 'node'
|
|
96
|
-
})];
|
|
76
|
+
})];
|
|
97
77
|
|
|
78
|
+
// initialize the webpack compiler
|
|
98
79
|
const compiler = (0, _webpack.default)(webpackConfigs);
|
|
99
|
-
|
|
100
80
|
_sourceMapSupport.default.install({
|
|
101
81
|
hookRequire: true
|
|
102
82
|
});
|
|
103
|
-
|
|
104
83
|
function getServerBundle(serverStats) {
|
|
105
84
|
var _serverJson$outputPat;
|
|
106
|
-
|
|
107
85
|
const serverJson = serverStats.toJson({
|
|
108
86
|
assets: true
|
|
109
87
|
});
|
|
110
88
|
return _path.default.join((_serverJson$outputPat = serverJson.outputPath) != null ? _serverJson$outputPat : '', 'server.js');
|
|
111
89
|
}
|
|
112
|
-
|
|
113
90
|
function handleErrors(fn) {
|
|
114
91
|
return async function (req, res, next) {
|
|
115
92
|
try {
|
|
@@ -119,47 +96,40 @@ function startDevServer(entrypoint, env = {}) {
|
|
|
119
96
|
}
|
|
120
97
|
};
|
|
121
98
|
}
|
|
122
|
-
|
|
123
99
|
let initRender = [];
|
|
124
|
-
|
|
125
100
|
let render = (...args) => new Promise(resolve => {
|
|
126
101
|
var _initRender;
|
|
127
|
-
|
|
128
102
|
(_initRender = initRender) == null ? void 0 : _initRender.push({
|
|
129
103
|
args,
|
|
130
104
|
resolve
|
|
131
105
|
});
|
|
132
106
|
});
|
|
133
|
-
|
|
134
107
|
function importRender(stats) {
|
|
135
108
|
var _clientStats$compilat, _clientStats$compilat2, _serverStats$compilat, _serverStats$compilat2;
|
|
136
|
-
|
|
137
109
|
const [clientStats, serverStats] = stats;
|
|
138
|
-
|
|
139
110
|
if (clientStats != null && (_clientStats$compilat = clientStats.compilation) != null && (_clientStats$compilat2 = _clientStats$compilat.errors) != null && _clientStats$compilat2.length || serverStats != null && (_serverStats$compilat = serverStats.compilation) != null && (_serverStats$compilat2 = _serverStats$compilat.errors) != null && _serverStats$compilat2.length) {
|
|
140
111
|
log.error('Errors for client build: ' + clientStats.compilation.errors);
|
|
141
|
-
log.error('Errors for server build: ' + serverStats.compilation.errors);
|
|
142
|
-
|
|
112
|
+
log.error('Errors for server build: ' + serverStats.compilation.errors);
|
|
113
|
+
// first time, rather than re-render
|
|
143
114
|
if (Array.isArray(initRender)) {
|
|
144
115
|
process.exit(-1);
|
|
145
116
|
}
|
|
146
|
-
|
|
147
117
|
log.error('Above compiler errors blocking reload');
|
|
148
118
|
return;
|
|
149
119
|
} else {
|
|
150
120
|
log.info('Launching SSR');
|
|
151
|
-
}
|
|
152
|
-
|
|
121
|
+
}
|
|
153
122
|
|
|
123
|
+
// ASSETS
|
|
154
124
|
const clientManifest = clientStats.toJson();
|
|
155
|
-
const serverEntry = getServerBundle(serverStats);
|
|
156
|
-
|
|
125
|
+
const serverEntry = getServerBundle(serverStats);
|
|
126
|
+
// reload modules
|
|
157
127
|
Object.keys(fsRequire.cache).forEach(key => {
|
|
158
128
|
delete fsRequire.cache[key];
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
render = fsRequire(serverEntry).default.bind(undefined, clientManifest);
|
|
162
|
-
|
|
129
|
+
});
|
|
130
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
131
|
+
render = fsRequire(serverEntry).default.bind(undefined, clientManifest);
|
|
132
|
+
// SERVER SIDE ENTRYPOINT
|
|
163
133
|
if (Array.isArray(initRender)) {
|
|
164
134
|
initRender.forEach(async init => {
|
|
165
135
|
try {
|
|
@@ -174,23 +144,24 @@ function startDevServer(entrypoint, env = {}) {
|
|
|
174
144
|
initRender = undefined;
|
|
175
145
|
}
|
|
176
146
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
{
|
|
180
|
-
|
|
181
|
-
|
|
147
|
+
const devServer = new _webpackDevServer.default(
|
|
148
|
+
// write to memory filesystem so we can import
|
|
149
|
+
{
|
|
150
|
+
...webpackConfigs[0].devServer,
|
|
151
|
+
devMiddleware: {
|
|
152
|
+
...((_webpackConfigs$ = webpackConfigs[0]) == null ? void 0 : (_webpackConfigs$$devS = _webpackConfigs$.devServer) == null ? void 0 : _webpackConfigs$$devS.devMiddleware),
|
|
153
|
+
outputFileSystem: {
|
|
154
|
+
...fs,
|
|
182
155
|
join: _path.default.join
|
|
183
156
|
}
|
|
184
157
|
},
|
|
185
158
|
setupMiddlewares: (middlewares, devServer) => {
|
|
186
159
|
var _webpackConfigs$0$dev, _webpackConfigs$0$dev2, _devServer$app, _webpackConfigs$0$dev3;
|
|
187
|
-
|
|
188
160
|
if (!devServer) {
|
|
189
161
|
throw new Error('webpack-dev-server is not defined');
|
|
190
162
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
163
|
+
const otherRoutes = [process.env.WEBPACK_PUBLIC_PATH, ...Object.keys((_webpackConfigs$0$dev = (_webpackConfigs$0$dev2 = webpackConfigs[0].devServer) == null ? void 0 : _webpackConfigs$0$dev2.proxy) != null ? _webpackConfigs$0$dev : {})];
|
|
164
|
+
// serve SSR for non-WEBPACK_PUBLIC_PATH
|
|
194
165
|
(_devServer$app = devServer.app) == null ? void 0 : _devServer$app.get(new RegExp(`^(?!${otherRoutes.join('|')})`), handleErrors(async function (req, res) {
|
|
195
166
|
if (req.url.endsWith('favicon.ico')) {
|
|
196
167
|
res.statusCode = 404;
|
|
@@ -198,21 +169,17 @@ function startDevServer(entrypoint, env = {}) {
|
|
|
198
169
|
res.send('not found');
|
|
199
170
|
return;
|
|
200
171
|
}
|
|
201
|
-
|
|
202
172
|
res.socket.on('error', error => {
|
|
203
173
|
console.error('Fatal', error);
|
|
204
174
|
});
|
|
205
175
|
await render(req, res);
|
|
206
176
|
}));
|
|
207
|
-
|
|
208
177
|
if ((_webpackConfigs$0$dev3 = webpackConfigs[0].devServer) != null && _webpackConfigs$0$dev3.setupMiddlewares) {
|
|
209
178
|
return webpackConfigs[0].devServer.setupMiddlewares(middlewares, devServer);
|
|
210
179
|
}
|
|
211
|
-
|
|
212
180
|
return middlewares;
|
|
213
181
|
}
|
|
214
182
|
}, compiler);
|
|
215
|
-
|
|
216
183
|
const runServer = async () => {
|
|
217
184
|
await devServer.start();
|
|
218
185
|
devServer.compiler.hooks.done.tap('Anansi Server', multiStats => {
|
|
@@ -220,9 +187,7 @@ function startDevServer(entrypoint, env = {}) {
|
|
|
220
187
|
log.error('stats not send');
|
|
221
188
|
process.exit(-1);
|
|
222
189
|
}
|
|
223
|
-
|
|
224
190
|
if (!Object.hasOwn(multiStats, 'stats')) return;
|
|
225
|
-
|
|
226
191
|
if (multiStats.stats.length > 1) {
|
|
227
192
|
try {
|
|
228
193
|
importRender(multiStats.stats);
|
|
@@ -235,13 +200,11 @@ function startDevServer(entrypoint, env = {}) {
|
|
|
235
200
|
}
|
|
236
201
|
});
|
|
237
202
|
};
|
|
238
|
-
|
|
239
203
|
const stopServer = async () => {
|
|
240
204
|
log.info('Stopping server...');
|
|
241
205
|
await devServer.stop();
|
|
242
206
|
log.info('Server closed');
|
|
243
207
|
};
|
|
244
|
-
|
|
245
208
|
process.on('SIGINT', () => {
|
|
246
209
|
log.warn('Received SIGINT, devserver shutting down');
|
|
247
210
|
stopServer();
|
|
@@ -249,4 +212,4 @@ function startDevServer(entrypoint, env = {}) {
|
|
|
249
212
|
});
|
|
250
213
|
runServer();
|
|
251
214
|
}
|
|
252
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImNvbnNvbGUiLCJsb2ciLCJleGl0Iiwic3RhcnREZXZTZXJ2ZXIiLCJlbnYiLCJ3ZWJwYWNrQ29uZmlnIiwicmVzb2x2ZSIsInBhdGgiLCJqb2luIiwiY3dkIiwibG9nZ2luZyIsImdldExvZ2dlciIsInZvbHVtZSIsIlZvbHVtZSIsImZzIiwiY3JlYXRlRnNGcm9tVm9sdW1lIiwidWZzIiwidXNlIiwiZGlza0ZzIiwiZnNSZXF1aXJlIiwiY3JlYXRlRnNSZXF1aXJlIiwicmVhZEZpbGUiLCJwcm9taXNpZnkiLCJzZXJ2ZXIiLCJob3RFbnRyeSIsImVudHJ5UGF0aCIsImdlbmVyYXRlZEVudHJ5cG9pbnQiLCJ0bXAiLCJmaWxlU3luYyIsInBvc3RmaXgiLCJ3cml0ZVN5bmMiLCJmZCIsIndlYnBhY2tDb25maWdzIiwiZW50cnlwYXRoIiwibmFtZSIsIm1vZGUiLCJyZXBsYWNlIiwiQlJPV1NFUlNMSVNUX0VOViIsInRhcmdldCIsImNvbXBpbGVyIiwid2VicGFjayIsInNvdXJjZU1hcFN1cHBvcnQiLCJpbnN0YWxsIiwiaG9va1JlcXVpcmUiLCJnZXRTZXJ2ZXJCdW5kbGUiLCJzZXJ2ZXJTdGF0cyIsInNlcnZlckpzb24iLCJ0b0pzb24iLCJhc3NldHMiLCJvdXRwdXRQYXRoIiwiaGFuZGxlRXJyb3JzIiwiZm4iLCJyZXEiLCJyZXMiLCJuZXh0IiwieCIsImluaXRSZW5kZXIiLCJyZW5kZXIiLCJhcmdzIiwiUHJvbWlzZSIsInB1c2giLCJpbXBvcnRSZW5kZXIiLCJzdGF0cyIsImNsaWVudFN0YXRzIiwiY29tcGlsYXRpb24iLCJlcnJvcnMiLCJsZW5ndGgiLCJlcnJvciIsIkFycmF5IiwiaXNBcnJheSIsImluZm8iLCJjbGllbnRNYW5pZmVzdCIsInNlcnZlckVudHJ5IiwiT2JqZWN0Iiwia2V5cyIsImNhY2hlIiwiZm9yRWFjaCIsImtleSIsImRlZmF1bHQiLCJiaW5kIiwidW5kZWZpbmVkIiwiaW5pdCIsImUiLCJkZXZTZXJ2ZXIiLCJXZWJwYWNrRGV2U2VydmVyIiwiZGV2TWlkZGxld2FyZSIsIm91dHB1dEZpbGVTeXN0ZW0iLCJzZXR1cE1pZGRsZXdhcmVzIiwibWlkZGxld2FyZXMiLCJFcnJvciIsIm90aGVyUm91dGVzIiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsInByb3h5IiwiYXBwIiwiZ2V0IiwiUmVnRXhwIiwidXJsIiwiZW5kc1dpdGgiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwic2VuZCIsInNvY2tldCIsIm9uIiwicnVuU2VydmVyIiwic3RhcnQiLCJob29rcyIsImRvbmUiLCJ0YXAiLCJtdWx0aVN0YXRzIiwiaGFzT3duIiwic3RvcFNlcnZlciIsInN0b3AiLCJ3YXJuIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvc3RhcnREZXZzZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcbmltcG9ydCBkaXNrRnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgd2VicGFjaywgeyBNdWx0aUNvbXBpbGVyIH0gZnJvbSAnd2VicGFjayc7XG5pbXBvcnQgeyBjcmVhdGVGc0Zyb21Wb2x1bWUsIFZvbHVtZSB9IGZyb20gJ21lbWZzJztcbmltcG9ydCB7IFNlcnZlciwgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHR5cGUgeyBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB0bXAgZnJvbSAndG1wJztcbmltcG9ydCBzb3VyY2VNYXBTdXBwb3J0IGZyb20gJ3NvdXJjZS1tYXAtc3VwcG9ydCc7XG5pbXBvcnQgeyB1ZnMgfSBmcm9tICd1bmlvbmZzJztcbmltcG9ydCBXZWJwYWNrRGV2U2VydmVyIGZyb20gJ3dlYnBhY2stZGV2LXNlcnZlcic7XG5pbXBvcnQgbG9nZ2luZyBmcm9tICd3ZWJwYWNrL2xpYi9sb2dnaW5nL3J1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlRnNSZXF1aXJlIH0gZnJvbSAnZnMtcmVxdWlyZSc7XG5cbmltcG9ydCAnY3Jvc3MtZmV0Y2gvcG9seWZpbGwnO1xuaW1wb3J0IHsgQm91bmRSZW5kZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gcnVuIGRpcmVjdGx5IGZyb20gbm9kZVxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGNvbnN0IGVudHJ5cG9pbnQgPSBwcm9jZXNzLmFyZ3ZbMl07XG5cbiAgaWYgKCFlbnRyeXBvaW50KSB7XG4gICAgY29uc29sZS5sb2coYFVzYWdlOiBzdGFydC1hbmFuc2kgPGVudHJ5cG9pbnQtZmlsZT5gKTtcbiAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICB9XG5cbiAgc3RhcnREZXZTZXJ2ZXIoZW50cnlwb2ludCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0RGV2U2VydmVyKFxuICBlbnRyeXBvaW50OiBzdHJpbmcsXG4gIGVudjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCB3ZWJwYWNrQ29uZmlnID0gcmVxdWlyZShyZXF1aXJlLnJlc29sdmUoXG4gICAgLy8gVE9ETzogdXNlIG5vcm1hbCByZXNvbHV0aW9uIGFsZ29yaXRobSB0byBmaW5kIHdlYnBhY2sgZmlsZVxuICAgIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcnKSxcbiAgKSk7XG5cbiAgY29uc3QgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2FuYW5zaS1kZXZzZXJ2ZXInKTtcblxuICAvLyBTZXQgdXAgaW4gbWVtb3J5IGZpbGVzeXN0ZW1cbiAgY29uc3Qgdm9sdW1lID0gbmV3IFZvbHVtZSgpO1xuICBjb25zdCBmcyA9IGNyZWF0ZUZzRnJvbVZvbHVtZSh2b2x1bWUpO1xuICB1ZnMudXNlKGRpc2tGcykudXNlKGZzIGFzIGFueSk7XG5cbiAgY29uc3QgZnNSZXF1aXJlID0gY3JlYXRlRnNSZXF1aXJlKHVmcyk7XG4gIGNvbnN0IHJlYWRGaWxlID0gcHJvbWlzaWZ5KHVmcy5yZWFkRmlsZSk7XG4gIGxldCBzZXJ2ZXI6IFNlcnZlciB8IHVuZGVmaW5lZDtcblxuICAvLyBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBmaWxlIHNvIHdlIGNhbiBob3QgcmVsb2FkIGZyb20gdGhlIHJvb3Qgb2YgdGhlIGFwcGxpY2F0aW9uXG4gIGZ1bmN0aW9uIGhvdEVudHJ5KGVudHJ5UGF0aDogc3RyaW5nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgLy8gQHRzLWlnbm9yZSBmb3Igc29tZSByZWFzb24gaXQncyBub3QgcGlja2luZyB1cCB0aGF0IG90aGVyIG9wdGlvbnMgYXJlIG9wdGlvbmFsXG4gICAgY29uc3QgZ2VuZXJhdGVkRW50cnlwb2ludCA9IHRtcC5maWxlU3luYyh7IHBvc3RmaXg6ICcuanMnIH0pO1xuICAgIGRpc2tGcy53cml0ZVN5bmMoXG4gICAgICBnZW5lcmF0ZWRFbnRyeXBvaW50LmZkLFxuICAgICAgYFxuICBpbXBvcnQgZW50cnkgZnJvbSBcIiR7cGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGVudHJ5UGF0aCl9XCI7XG5cbiAgaWYgKG1vZHVsZS5ob3QpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpO1xuICB9XG5cbiAgZXhwb3J0IGRlZmF1bHQgZW50cnk7XG4gICAgYCxcbiAgICApO1xuICAgIHJldHVybiBnZW5lcmF0ZWRFbnRyeXBvaW50O1xuICB9XG5cbiAgY29uc3Qgd2VicGFja0NvbmZpZ3MgPSBbXG4gICAgd2VicGFja0NvbmZpZyhcbiAgICAgIHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICBlbnRyeXBhdGg6IGhvdEVudHJ5KGVudHJ5cG9pbnQpLm5hbWUsXG4gICAgICAgIG5hbWU6ICdjbGllbnQnLFxuICAgICAgfSxcbiAgICAgIHsgbW9kZTogJ2RldmVsb3BtZW50JyB9LFxuICAgICksXG4gICAgd2VicGFja0NvbmZpZyhcbiAgICAgIHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICBlbnRyeXBhdGg6IGVudHJ5cG9pbnQucmVwbGFjZSgnLnRzeCcsICcuc2VydmVyLnRzeCcpLFxuICAgICAgICBuYW1lOiAnc2VydmVyJyxcbiAgICAgICAgQlJPV1NFUlNMSVNUX0VOVjogJ2N1cnJlbnQgbm9kZScsXG4gICAgICB9LFxuICAgICAgeyBtb2RlOiAnZGV2ZWxvcG1lbnQnLCB0YXJnZXQ6ICdub2RlJyB9LFxuICAgICksXG4gIF0gYXMgY29uc3Q7XG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgd2VicGFjayBjb21waWxlclxuICBjb25zdCBjb21waWxlcjogTXVsdGlDb21waWxlciA9IHdlYnBhY2sod2VicGFja0NvbmZpZ3MpO1xuXG4gIHNvdXJjZU1hcFN1cHBvcnQuaW5zdGFsbCh7IGhvb2tSZXF1aXJlOiB0cnVlIH0pO1xuXG4gIGZ1bmN0aW9uIGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0czogd2VicGFjay5TdGF0cykge1xuICAgIGNvbnN0IHNlcnZlckpzb24gPSBzZXJ2ZXJTdGF0cy50b0pzb24oeyBhc3NldHM6IHRydWUgfSk7XG4gICAgcmV0dXJuIHBhdGguam9pbihzZXJ2ZXJKc29uLm91dHB1dFBhdGggPz8gJycsICdzZXJ2ZXIuanMnKTtcbiAgfVxuICBmdW5jdGlvbiBoYW5kbGVFcnJvcnM8XG4gICAgRiBleHRlbmRzIChcbiAgICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICApID0+IFByb21pc2U8dm9pZD4sXG4gID4oZm46IEYpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgICAgcmVzOiBSZXNwb25zZSB8IFNlcnZlclJlc3BvbnNlLFxuICAgICAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKHJlcSwgcmVzKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgbmV4dCh4KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IGluaXRSZW5kZXI6XG4gICAgfCB7IGFyZ3M6IFBhcmFtZXRlcnM8Qm91bmRSZW5kZXI+OyByZXNvbHZlOiAoKSA9PiB2b2lkIH1bXVxuICAgIHwgdW5kZWZpbmVkID0gW107XG4gIGxldCByZW5kZXI6IEJvdW5kUmVuZGVyID0gKC4uLmFyZ3MpID0+XG4gICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpbml0UmVuZGVyPy5wdXNoKHsgYXJncywgcmVzb2x2ZSB9KTtcbiAgICB9KTtcblxuICBmdW5jdGlvbiBpbXBvcnRSZW5kZXIoc3RhdHM6IHdlYnBhY2suU3RhdHNbXSkge1xuICAgIGNvbnN0IFtjbGllbnRTdGF0cywgc2VydmVyU3RhdHNdID0gc3RhdHM7XG4gICAgaWYgKFxuICAgICAgY2xpZW50U3RhdHM/LmNvbXBpbGF0aW9uPy5lcnJvcnM/Lmxlbmd0aCB8fFxuICAgICAgc2VydmVyU3RhdHM/LmNvbXBpbGF0aW9uPy5lcnJvcnM/Lmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nLmVycm9yKCdFcnJvcnMgZm9yIGNsaWVudCBidWlsZDogJyArIGNsaWVudFN0YXRzLmNvbXBpbGF0aW9uLmVycm9ycyk7XG4gICAgICBsb2cuZXJyb3IoJ0Vycm9ycyBmb3Igc2VydmVyIGJ1aWxkOiAnICsgc2VydmVyU3RhdHMuY29tcGlsYXRpb24uZXJyb3JzKTtcbiAgICAgIC8vIGZpcnN0IHRpbWUsIHJhdGhlciB0aGFuIHJlLXJlbmRlclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdFJlbmRlcikpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcignQWJvdmUgY29tcGlsZXIgZXJyb3JzIGJsb2NraW5nIHJlbG9hZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbygnTGF1bmNoaW5nIFNTUicpO1xuICAgIH1cblxuICAgIC8vIEFTU0VUU1xuICAgIGNvbnN0IGNsaWVudE1hbmlmZXN0ID0gY2xpZW50U3RhdHMudG9Kc29uKCk7XG5cbiAgICBjb25zdCBzZXJ2ZXJFbnRyeSA9IGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0cyk7XG4gICAgLy8gcmVsb2FkIG1vZHVsZXNcbiAgICBPYmplY3Qua2V5cyhmc1JlcXVpcmUuY2FjaGUpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGRlbGV0ZSBmc1JlcXVpcmUuY2FjaGVba2V5XTtcbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIHJlbmRlciA9IChmc1JlcXVpcmUoc2VydmVyRW50cnkpIGFzIGFueSkuZGVmYXVsdC5iaW5kKFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xpZW50TWFuaWZlc3QsXG4gICAgKTtcbiAgICAvLyBTRVJWRVIgU0lERSBFTlRSWVBPSU5UXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdFJlbmRlcikpIHtcbiAgICAgIGluaXRSZW5kZXIuZm9yRWFjaChhc3luYyBpbml0ID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2cuaW5mbygnUmVzb2x2aW5nIHF1ZXVlZCByZXF1ZXN0cycpO1xuICAgICAgICAgIGF3YWl0IHJlbmRlciguLi5pbml0LmFyZ3MpO1xuICAgICAgICAgIGluaXQucmVzb2x2ZSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLmVycm9yKCdFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gcmVuZGVyIHF1ZXVlZCByZXF1ZXN0cycpO1xuICAgICAgICAgIGxvZy5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpbml0UmVuZGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRldlNlcnZlciA9IG5ldyBXZWJwYWNrRGV2U2VydmVyKFxuICAgIC8vIHdyaXRlIHRvIG1lbW9yeSBmaWxlc3lzdGVtIHNvIHdlIGNhbiBpbXBvcnRcbiAgICB7XG4gICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXIsXG4gICAgICBkZXZNaWRkbGV3YXJlOiB7XG4gICAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdPy5kZXZTZXJ2ZXI/LmRldk1pZGRsZXdhcmUsXG4gICAgICAgIG91dHB1dEZpbGVTeXN0ZW06IHtcbiAgICAgICAgICAuLi5mcyxcbiAgICAgICAgICBqb2luOiBwYXRoLmpvaW4gYXMgYW55LFxuICAgICAgICB9IGFzIGFueSBhcyB0eXBlb2YgZnMsXG4gICAgICB9LFxuICAgICAgc2V0dXBNaWRkbGV3YXJlczogKG1pZGRsZXdhcmVzLCBkZXZTZXJ2ZXIpID0+IHtcbiAgICAgICAgaWYgKCFkZXZTZXJ2ZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dlYnBhY2stZGV2LXNlcnZlciBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3RoZXJSb3V0ZXMgPSBbXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCxcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyh3ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXI/LnByb3h5ID8/IHt9KSxcbiAgICAgICAgXTtcbiAgICAgICAgLy8gc2VydmUgU1NSIGZvciBub24tV0VCUEFDS19QVUJMSUNfUEFUSFxuICAgICAgICBkZXZTZXJ2ZXIuYXBwPy5nZXQoXG4gICAgICAgICAgbmV3IFJlZ0V4cChgXig/ISR7b3RoZXJSb3V0ZXMuam9pbignfCcpfSlgKSxcbiAgICAgICAgICBoYW5kbGVFcnJvcnMoYXN5bmMgZnVuY3Rpb24gKHJlcTogYW55LCByZXM6IGFueSkge1xuICAgICAgICAgICAgaWYgKHJlcS51cmwuZW5kc1dpdGgoJ2Zhdmljb24uaWNvJykpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XG4gICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICAgICAgcmVzLnNlbmQoJ25vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMuc29ja2V0Lm9uKCdlcnJvcicsIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCcsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCByZW5kZXIocmVxLCByZXMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh3ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXI/LnNldHVwTWlkZGxld2FyZXMpIHtcbiAgICAgICAgICByZXR1cm4gd2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyLnNldHVwTWlkZGxld2FyZXMoXG4gICAgICAgICAgICBtaWRkbGV3YXJlcyxcbiAgICAgICAgICAgIGRldlNlcnZlcixcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmVzO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXBpbGVyLFxuICApO1xuICBjb25zdCBydW5TZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZGV2U2VydmVyLnN0YXJ0KCk7XG4gICAgZGV2U2VydmVyLmNvbXBpbGVyLmhvb2tzLmRvbmUudGFwKFxuICAgICAgJ0FuYW5zaSBTZXJ2ZXInLFxuICAgICAgKG11bHRpU3RhdHM6IHdlYnBhY2suTXVsdGlTdGF0cyB8IHdlYnBhY2suU3RhdHMpID0+IHtcbiAgICAgICAgaWYgKCFtdWx0aVN0YXRzKSB7XG4gICAgICAgICAgbG9nLmVycm9yKCdzdGF0cyBub3Qgc2VuZCcpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIU9iamVjdC5oYXNPd24obXVsdGlTdGF0cywgJ3N0YXRzJykpIHJldHVybjtcbiAgICAgICAgaWYgKChtdWx0aVN0YXRzIGFzIHdlYnBhY2suTXVsdGlTdGF0cykuc3RhdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbXBvcnRSZW5kZXIoKG11bHRpU3RhdHMgYXMgd2VicGFjay5NdWx0aVN0YXRzKS5zdGF0cyk7XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHNlcnZlIGVudHJ5cG9pbnQnKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy5lcnJvcignT25seSBjb21waWxlciBvbmUgc3RhdCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH07XG4gIGNvbnN0IHN0b3BTZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgbG9nLmluZm8oJ1N0b3BwaW5nIHNlcnZlci4uLicpO1xuICAgIGF3YWl0IGRldlNlcnZlci5zdG9wKCk7XG4gICAgbG9nLmluZm8oJ1NlcnZlciBjbG9zZWQnKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgbG9nLndhcm4oJ1JlY2VpdmVkIFNJR0lOVCwgZGV2c2VydmVyIHNodXR0aW5nIGRvd24nKTtcbiAgICBzdG9wU2VydmVyKCk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfSk7XG5cbiAgcnVuU2VydmVyKCk7XG59XG4iXSwi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
|
|
215
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImNvbnNvbGUiLCJsb2ciLCJleGl0Iiwic3RhcnREZXZTZXJ2ZXIiLCJlbnYiLCJ3ZWJwYWNrQ29uZmlnIiwicmVzb2x2ZSIsInBhdGgiLCJqb2luIiwiY3dkIiwibG9nZ2luZyIsImdldExvZ2dlciIsInZvbHVtZSIsIlZvbHVtZSIsImZzIiwiY3JlYXRlRnNGcm9tVm9sdW1lIiwidWZzIiwidXNlIiwiZGlza0ZzIiwiZnNSZXF1aXJlIiwiY3JlYXRlRnNSZXF1aXJlIiwicmVhZEZpbGUiLCJwcm9taXNpZnkiLCJzZXJ2ZXIiLCJob3RFbnRyeSIsImVudHJ5UGF0aCIsImdlbmVyYXRlZEVudHJ5cG9pbnQiLCJ0bXAiLCJmaWxlU3luYyIsInBvc3RmaXgiLCJ3cml0ZVN5bmMiLCJmZCIsIndlYnBhY2tDb25maWdzIiwiZW50cnlwYXRoIiwibmFtZSIsIm1vZGUiLCJyZXBsYWNlIiwiQlJPV1NFUlNMSVNUX0VOViIsInRhcmdldCIsImNvbXBpbGVyIiwid2VicGFjayIsInNvdXJjZU1hcFN1cHBvcnQiLCJpbnN0YWxsIiwiaG9va1JlcXVpcmUiLCJnZXRTZXJ2ZXJCdW5kbGUiLCJzZXJ2ZXJTdGF0cyIsInNlcnZlckpzb24iLCJ0b0pzb24iLCJhc3NldHMiLCJvdXRwdXRQYXRoIiwiaGFuZGxlRXJyb3JzIiwiZm4iLCJyZXEiLCJyZXMiLCJuZXh0IiwieCIsImluaXRSZW5kZXIiLCJyZW5kZXIiLCJhcmdzIiwiUHJvbWlzZSIsInB1c2giLCJpbXBvcnRSZW5kZXIiLCJzdGF0cyIsImNsaWVudFN0YXRzIiwiY29tcGlsYXRpb24iLCJlcnJvcnMiLCJsZW5ndGgiLCJlcnJvciIsIkFycmF5IiwiaXNBcnJheSIsImluZm8iLCJjbGllbnRNYW5pZmVzdCIsInNlcnZlckVudHJ5IiwiT2JqZWN0Iiwia2V5cyIsImNhY2hlIiwiZm9yRWFjaCIsImtleSIsImRlZmF1bHQiLCJiaW5kIiwidW5kZWZpbmVkIiwiaW5pdCIsImUiLCJkZXZTZXJ2ZXIiLCJXZWJwYWNrRGV2U2VydmVyIiwiZGV2TWlkZGxld2FyZSIsIm91dHB1dEZpbGVTeXN0ZW0iLCJzZXR1cE1pZGRsZXdhcmVzIiwibWlkZGxld2FyZXMiLCJFcnJvciIsIm90aGVyUm91dGVzIiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsInByb3h5IiwiYXBwIiwiZ2V0IiwiUmVnRXhwIiwidXJsIiwiZW5kc1dpdGgiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwic2VuZCIsInNvY2tldCIsIm9uIiwicnVuU2VydmVyIiwic3RhcnQiLCJob29rcyIsImRvbmUiLCJ0YXAiLCJtdWx0aVN0YXRzIiwiaGFzT3duIiwic3RvcFNlcnZlciIsInN0b3AiLCJ3YXJuIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvc3RhcnREZXZzZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcbmltcG9ydCBkaXNrRnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgd2VicGFjaywgeyBNdWx0aUNvbXBpbGVyIH0gZnJvbSAnd2VicGFjayc7XG5pbXBvcnQgeyBjcmVhdGVGc0Zyb21Wb2x1bWUsIFZvbHVtZSB9IGZyb20gJ21lbWZzJztcbmltcG9ydCB7IFNlcnZlciwgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHR5cGUgeyBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB0bXAgZnJvbSAndG1wJztcbmltcG9ydCBzb3VyY2VNYXBTdXBwb3J0IGZyb20gJ3NvdXJjZS1tYXAtc3VwcG9ydCc7XG5pbXBvcnQgeyB1ZnMgfSBmcm9tICd1bmlvbmZzJztcbmltcG9ydCBXZWJwYWNrRGV2U2VydmVyIGZyb20gJ3dlYnBhY2stZGV2LXNlcnZlcic7XG5pbXBvcnQgbG9nZ2luZyBmcm9tICd3ZWJwYWNrL2xpYi9sb2dnaW5nL3J1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlRnNSZXF1aXJlIH0gZnJvbSAnZnMtcmVxdWlyZSc7XG5cbmltcG9ydCAnY3Jvc3MtZmV0Y2gvcG9seWZpbGwnO1xuaW1wb3J0IHsgQm91bmRSZW5kZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gcnVuIGRpcmVjdGx5IGZyb20gbm9kZVxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGNvbnN0IGVudHJ5cG9pbnQgPSBwcm9jZXNzLmFyZ3ZbMl07XG5cbiAgaWYgKCFlbnRyeXBvaW50KSB7XG4gICAgY29uc29sZS5sb2coYFVzYWdlOiBzdGFydC1hbmFuc2kgPGVudHJ5cG9pbnQtZmlsZT5gKTtcbiAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICB9XG5cbiAgc3RhcnREZXZTZXJ2ZXIoZW50cnlwb2ludCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0RGV2U2VydmVyKFxuICBlbnRyeXBvaW50OiBzdHJpbmcsXG4gIGVudjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCB3ZWJwYWNrQ29uZmlnID0gcmVxdWlyZShyZXF1aXJlLnJlc29sdmUoXG4gICAgLy8gVE9ETzogdXNlIG5vcm1hbCByZXNvbHV0aW9uIGFsZ29yaXRobSB0byBmaW5kIHdlYnBhY2sgZmlsZVxuICAgIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcnKSxcbiAgKSk7XG5cbiAgY29uc3QgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2FuYW5zaS1kZXZzZXJ2ZXInKTtcblxuICAvLyBTZXQgdXAgaW4gbWVtb3J5IGZpbGVzeXN0ZW1cbiAgY29uc3Qgdm9sdW1lID0gbmV3IFZvbHVtZSgpO1xuICBjb25zdCBmcyA9IGNyZWF0ZUZzRnJvbVZvbHVtZSh2b2x1bWUpO1xuICB1ZnMudXNlKGRpc2tGcykudXNlKGZzIGFzIGFueSk7XG5cbiAgY29uc3QgZnNSZXF1aXJlID0gY3JlYXRlRnNSZXF1aXJlKHVmcyk7XG4gIGNvbnN0IHJlYWRGaWxlID0gcHJvbWlzaWZ5KHVmcy5yZWFkRmlsZSk7XG4gIGxldCBzZXJ2ZXI6IFNlcnZlciB8IHVuZGVmaW5lZDtcblxuICAvLyBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBmaWxlIHNvIHdlIGNhbiBob3QgcmVsb2FkIGZyb20gdGhlIHJvb3Qgb2YgdGhlIGFwcGxpY2F0aW9uXG4gIGZ1bmN0aW9uIGhvdEVudHJ5KGVudHJ5UGF0aDogc3RyaW5nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgLy8gQHRzLWlnbm9yZSBmb3Igc29tZSByZWFzb24gaXQncyBub3QgcGlja2luZyB1cCB0aGF0IG90aGVyIG9wdGlvbnMgYXJlIG9wdGlvbmFsXG4gICAgY29uc3QgZ2VuZXJhdGVkRW50cnlwb2ludCA9IHRtcC5maWxlU3luYyh7IHBvc3RmaXg6ICcuanMnIH0pO1xuICAgIGRpc2tGcy53cml0ZVN5bmMoXG4gICAgICBnZW5lcmF0ZWRFbnRyeXBvaW50LmZkLFxuICAgICAgYFxuICBpbXBvcnQgZW50cnkgZnJvbSBcIiR7cGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGVudHJ5UGF0aCl9XCI7XG5cbiAgaWYgKG1vZHVsZS5ob3QpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpO1xuICB9XG5cbiAgZXhwb3J0IGRlZmF1bHQgZW50cnk7XG4gICAgYCxcbiAgICApO1xuICAgIHJldHVybiBnZW5lcmF0ZWRFbnRyeXBvaW50O1xuICB9XG5cbiAgY29uc3Qgd2VicGFja0NvbmZpZ3MgPSBbXG4gICAgd2VicGFja0NvbmZpZyhcbiAgICAgIHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICBlbnRyeXBhdGg6IGhvdEVudHJ5KGVudHJ5cG9pbnQpLm5hbWUsXG4gICAgICAgIG5hbWU6ICdjbGllbnQnLFxuICAgICAgfSxcbiAgICAgIHsgbW9kZTogJ2RldmVsb3BtZW50JyB9LFxuICAgICksXG4gICAgd2VicGFja0NvbmZpZyhcbiAgICAgIHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICBlbnRyeXBhdGg6IGVudHJ5cG9pbnQucmVwbGFjZSgnLnRzeCcsICcuc2VydmVyLnRzeCcpLFxuICAgICAgICBuYW1lOiAnc2VydmVyJyxcbiAgICAgICAgQlJPV1NFUlNMSVNUX0VOVjogJ2N1cnJlbnQgbm9kZScsXG4gICAgICB9LFxuICAgICAgeyBtb2RlOiAnZGV2ZWxvcG1lbnQnLCB0YXJnZXQ6ICdub2RlJyB9LFxuICAgICksXG4gIF0gYXMgY29uc3Q7XG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgd2VicGFjayBjb21waWxlclxuICBjb25zdCBjb21waWxlcjogTXVsdGlDb21waWxlciA9IHdlYnBhY2sod2VicGFja0NvbmZpZ3MpO1xuXG4gIHNvdXJjZU1hcFN1cHBvcnQuaW5zdGFsbCh7IGhvb2tSZXF1aXJlOiB0cnVlIH0pO1xuXG4gIGZ1bmN0aW9uIGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0czogd2VicGFjay5TdGF0cykge1xuICAgIGNvbnN0IHNlcnZlckpzb24gPSBzZXJ2ZXJTdGF0cy50b0pzb24oeyBhc3NldHM6IHRydWUgfSk7XG4gICAgcmV0dXJuIHBhdGguam9pbihzZXJ2ZXJKc29uLm91dHB1dFBhdGggPz8gJycsICdzZXJ2ZXIuanMnKTtcbiAgfVxuICBmdW5jdGlvbiBoYW5kbGVFcnJvcnM8XG4gICAgRiBleHRlbmRzIChcbiAgICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICApID0+IFByb21pc2U8dm9pZD4sXG4gID4oZm46IEYpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgICAgcmVzOiBSZXNwb25zZSB8IFNlcnZlclJlc3BvbnNlLFxuICAgICAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKHJlcSwgcmVzKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgbmV4dCh4KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IGluaXRSZW5kZXI6XG4gICAgfCB7IGFyZ3M6IFBhcmFtZXRlcnM8Qm91bmRSZW5kZXI+OyByZXNvbHZlOiAoKSA9PiB2b2lkIH1bXVxuICAgIHwgdW5kZWZpbmVkID0gW107XG4gIGxldCByZW5kZXI6IEJvdW5kUmVuZGVyID0gKC4uLmFyZ3MpID0+XG4gICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpbml0UmVuZGVyPy5wdXNoKHsgYXJncywgcmVzb2x2ZSB9KTtcbiAgICB9KTtcblxuICBmdW5jdGlvbiBpbXBvcnRSZW5kZXIoc3RhdHM6IHdlYnBhY2suU3RhdHNbXSkge1xuICAgIGNvbnN0IFtjbGllbnRTdGF0cywgc2VydmVyU3RhdHNdID0gc3RhdHM7XG4gICAgaWYgKFxuICAgICAgY2xpZW50U3RhdHM/LmNvbXBpbGF0aW9uPy5lcnJvcnM/Lmxlbmd0aCB8fFxuICAgICAgc2VydmVyU3RhdHM/LmNvbXBpbGF0aW9uPy5lcnJvcnM/Lmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nLmVycm9yKCdFcnJvcnMgZm9yIGNsaWVudCBidWlsZDogJyArIGNsaWVudFN0YXRzLmNvbXBpbGF0aW9uLmVycm9ycyk7XG4gICAgICBsb2cuZXJyb3IoJ0Vycm9ycyBmb3Igc2VydmVyIGJ1aWxkOiAnICsgc2VydmVyU3RhdHMuY29tcGlsYXRpb24uZXJyb3JzKTtcbiAgICAgIC8vIGZpcnN0IHRpbWUsIHJhdGhlciB0aGFuIHJlLXJlbmRlclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdFJlbmRlcikpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcignQWJvdmUgY29tcGlsZXIgZXJyb3JzIGJsb2NraW5nIHJlbG9hZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbygnTGF1bmNoaW5nIFNTUicpO1xuICAgIH1cblxuICAgIC8vIEFTU0VUU1xuICAgIGNvbnN0IGNsaWVudE1hbmlmZXN0ID0gY2xpZW50U3RhdHMudG9Kc29uKCk7XG5cbiAgICBjb25zdCBzZXJ2ZXJFbnRyeSA9IGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0cyk7XG4gICAgLy8gcmVsb2FkIG1vZHVsZXNcbiAgICBPYmplY3Qua2V5cyhmc1JlcXVpcmUuY2FjaGUpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGRlbGV0ZSBmc1JlcXVpcmUuY2FjaGVba2V5XTtcbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIHJlbmRlciA9IChmc1JlcXVpcmUoc2VydmVyRW50cnkpIGFzIGFueSkuZGVmYXVsdC5iaW5kKFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xpZW50TWFuaWZlc3QsXG4gICAgKTtcbiAgICAvLyBTRVJWRVIgU0lERSBFTlRSWVBPSU5UXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdFJlbmRlcikpIHtcbiAgICAgIGluaXRSZW5kZXIuZm9yRWFjaChhc3luYyBpbml0ID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2cuaW5mbygnUmVzb2x2aW5nIHF1ZXVlZCByZXF1ZXN0cycpO1xuICAgICAgICAgIGF3YWl0IHJlbmRlciguLi5pbml0LmFyZ3MpO1xuICAgICAgICAgIGluaXQucmVzb2x2ZSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLmVycm9yKCdFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gcmVuZGVyIHF1ZXVlZCByZXF1ZXN0cycpO1xuICAgICAgICAgIGxvZy5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpbml0UmVuZGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRldlNlcnZlciA9IG5ldyBXZWJwYWNrRGV2U2VydmVyKFxuICAgIC8vIHdyaXRlIHRvIG1lbW9yeSBmaWxlc3lzdGVtIHNvIHdlIGNhbiBpbXBvcnRcbiAgICB7XG4gICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXIsXG4gICAgICBkZXZNaWRkbGV3YXJlOiB7XG4gICAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdPy5kZXZTZXJ2ZXI/LmRldk1pZGRsZXdhcmUsXG4gICAgICAgIG91dHB1dEZpbGVTeXN0ZW06IHtcbiAgICAgICAgICAuLi5mcyxcbiAgICAgICAgICBqb2luOiBwYXRoLmpvaW4gYXMgYW55LFxuICAgICAgICB9IGFzIGFueSBhcyB0eXBlb2YgZnMsXG4gICAgICB9LFxuICAgICAgc2V0dXBNaWRkbGV3YXJlczogKG1pZGRsZXdhcmVzLCBkZXZTZXJ2ZXIpID0+IHtcbiAgICAgICAgaWYgKCFkZXZTZXJ2ZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dlYnBhY2stZGV2LXNlcnZlciBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3RoZXJSb3V0ZXMgPSBbXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCxcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyh3ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXI/LnByb3h5ID8/IHt9KSxcbiAgICAgICAgXTtcbiAgICAgICAgLy8gc2VydmUgU1NSIGZvciBub24tV0VCUEFDS19QVUJMSUNfUEFUSFxuICAgICAgICBkZXZTZXJ2ZXIuYXBwPy5nZXQoXG4gICAgICAgICAgbmV3IFJlZ0V4cChgXig/ISR7b3RoZXJSb3V0ZXMuam9pbignfCcpfSlgKSxcbiAgICAgICAgICBoYW5kbGVFcnJvcnMoYXN5bmMgZnVuY3Rpb24gKHJlcTogYW55LCByZXM6IGFueSkge1xuICAgICAgICAgICAgaWYgKHJlcS51cmwuZW5kc1dpdGgoJ2Zhdmljb24uaWNvJykpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XG4gICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICAgICAgcmVzLnNlbmQoJ25vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMuc29ja2V0Lm9uKCdlcnJvcicsIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCcsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCByZW5kZXIocmVxLCByZXMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh3ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXI/LnNldHVwTWlkZGxld2FyZXMpIHtcbiAgICAgICAgICByZXR1cm4gd2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyLnNldHVwTWlkZGxld2FyZXMoXG4gICAgICAgICAgICBtaWRkbGV3YXJlcyxcbiAgICAgICAgICAgIGRldlNlcnZlcixcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmVzO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXBpbGVyLFxuICApO1xuICBjb25zdCBydW5TZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZGV2U2VydmVyLnN0YXJ0KCk7XG4gICAgZGV2U2VydmVyLmNvbXBpbGVyLmhvb2tzLmRvbmUudGFwKFxuICAgICAgJ0FuYW5zaSBTZXJ2ZXInLFxuICAgICAgKG11bHRpU3RhdHM6IHdlYnBhY2suTXVsdGlTdGF0cyB8IHdlYnBhY2suU3RhdHMpID0+IHtcbiAgICAgICAgaWYgKCFtdWx0aVN0YXRzKSB7XG4gICAgICAgICAgbG9nLmVycm9yKCdzdGF0cyBub3Qgc2VuZCcpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIU9iamVjdC5oYXNPd24obXVsdGlTdGF0cywgJ3N0YXRzJykpIHJldHVybjtcbiAgICAgICAgaWYgKChtdWx0aVN0YXRzIGFzIHdlYnBhY2suTXVsdGlTdGF0cykuc3RhdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbXBvcnRSZW5kZXIoKG11bHRpU3RhdHMgYXMgd2VicGFjay5NdWx0aVN0YXRzKS5zdGF0cyk7XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHNlcnZlIGVudHJ5cG9pbnQnKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy5lcnJvcignT25seSBjb21waWxlciBvbmUgc3RhdCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH07XG4gIGNvbnN0IHN0b3BTZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgbG9nLmluZm8oJ1N0b3BwaW5nIHNlcnZlci4uLicpO1xuICAgIGF3YWl0IGRldlNlcnZlci5zdG9wKCk7XG4gICAgbG9nLmluZm8oJ1NlcnZlciBjbG9zZWQnKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgbG9nLndhcm4oJ1JlY2VpdmVkIFNJR0lOVCwgZGV2c2VydmVyIHNodXR0aW5nIGRvd24nKTtcbiAgICBzdG9wU2VydmVyKCk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfSk7XG5cbiAgcnVuU2VydmVyKCk7XG59XG4iXSwi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
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
exports.__esModule = true;
|
|
6
5
|
exports.default = Document;
|
|
7
|
-
|
|
8
6
|
var _jsx2 = _interopRequireDefault(require("@babel/runtime/helpers/jsx"));
|
|
9
|
-
|
|
10
7
|
var _react = _interopRequireDefault(require("react"));
|
|
11
|
-
|
|
12
8
|
var _csp = require("./csp");
|
|
13
|
-
|
|
14
9
|
var _process$env$WEBPACK_;
|
|
15
|
-
|
|
16
10
|
function Document({
|
|
17
11
|
assets,
|
|
18
12
|
head,
|
|
@@ -25,13 +19,13 @@ function Document({
|
|
|
25
19
|
scripts
|
|
26
20
|
}) {
|
|
27
21
|
let cspMeta = null;
|
|
28
|
-
|
|
29
22
|
if (csPolicy) {
|
|
30
23
|
// add nonce to policy
|
|
31
|
-
const policy = {
|
|
24
|
+
const policy = {
|
|
25
|
+
...csPolicy
|
|
32
26
|
};
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
if (nonce && (
|
|
28
|
+
// nonces negate 'unsafe-inline' so do not add it if that directive exists
|
|
35
29
|
!policy['script-src'] || !policy['script-src'].includes("'unsafe-inline'"))) {
|
|
36
30
|
if (typeof policy['script-src'] === 'string') {
|
|
37
31
|
policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
|
|
@@ -39,13 +33,11 @@ function Document({
|
|
|
39
33
|
policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
|
|
40
34
|
}
|
|
41
35
|
}
|
|
42
|
-
|
|
43
36
|
cspMeta = /*#__PURE__*/(0, _jsx2.default)("meta", {
|
|
44
37
|
httpEquiv: "Content-Security-Policy",
|
|
45
38
|
content: (0, _csp.buildPolicy)(policy)
|
|
46
39
|
});
|
|
47
40
|
}
|
|
48
|
-
|
|
49
41
|
return /*#__PURE__*/(0, _jsx2.default)("html", {}, void 0, /*#__PURE__*/(0, _jsx2.default)("head", {}, void 0, /*#__PURE__*/(0, _jsx2.default)("meta", {
|
|
50
42
|
charSet: charSet
|
|
51
43
|
}), cspMeta, head, assets.map((asset, i) => /*#__PURE__*/_react.default.createElement("link", {
|
|
@@ -63,7 +55,6 @@ function Document({
|
|
|
63
55
|
async: true
|
|
64
56
|
}, i))));
|
|
65
57
|
}
|
|
66
|
-
|
|
67
58
|
Document.defaultProps = {
|
|
68
59
|
head: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/(0, _jsx2.default)("meta", {
|
|
69
60
|
name: "viewport",
|
|
@@ -76,4 +67,4 @@ Document.defaultProps = {
|
|
|
76
67
|
rootId: 'anansi-root',
|
|
77
68
|
scripts: null
|
|
78
69
|
};
|
|
79
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsImNzUG9saWN5Iiwibm9uY2UiLCJzY3JpcHRzIiwiY3NwTWV0YSIsInBvbGljeSIsImluY2x1ZGVzIiwiYnVpbGRQb2xpY3kiLCJtYXAiLCJhc3NldCIsImkiLCJmaWx0ZXIiLCJocmVmIiwiZW5kc1dpdGgiLCJkZWZhdWx0UHJvcHMiLCJwcm9jZXNzIiwiZW52IiwiV0VCUEFDS19QVUJMSUNfUEFUSCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvRG9jdW1lbnRDb21wb25lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUG9saWN5IH0gZnJvbSAnLi9jc3AnO1xuaW1wb3J0IHsgYnVpbGRQb2xpY3kgfSBmcm9tICcuL2NzcCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFzc2V0czogeyBocmVmOiBzdHJpbmc7IGFzPzogc3RyaW5nOyByZWw/OiBzdHJpbmcgfVtdO1xuICBoZWFkOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgcm9vdElkOiBzdHJpbmc7XG4gIGNoYXJTZXQ6IHN0cmluZztcbiAgY3NQb2xpY3k/OiBQb2xpY3k7XG4gIG5vbmNlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnQoe1xuICBhc3NldHMsXG4gIGhlYWQsXG4gIGNoaWxkcmVuLFxuICB0aXRsZSxcbiAgcm9vdElkLFxuICBjaGFyU2V0LFxuICBjc1BvbGljeSxcbiAgbm9uY2UsXG4gIHNjcmlwdHMsXG59OiBQcm9wcykge1xuICBsZXQgY3NwTWV0YTogbnVsbCB8IFJlYWN0LlJlYWN0Tm9kZSA9IG51bGw7XG4gIGlmIChjc1BvbGljeSkge1xuICAgIC8vIGFkZCBub25jZSB0byBwb2xpY3lcbiAgICBjb25zdCBwb2xpY3kgPSB7XG4gICAgICAuLi5jc1BvbGljeSxcbiAgICB9O1xuICAgIGlmIChcbiAgICAgIG5vbmNlICYmXG4gICAgICAvLyBub25jZXMgbmVnYXRlICd1bnNhZmUtaW5saW5lJyBzbyBkbyBub3QgYWRkIGl0IGlmIHRoYXQgZGlyZWN0aXZlIGV4aXN0c1xuICAgICAgKCFwb2xpY3lbJ3NjcmlwdC1zcmMnXSB8fFxuICAgICAgICAhcG9saWN5WydzY3JpcHQtc3JjJ10uaW5jbHVkZXMoXCIndW5zYWZlLWlubGluZSdcIikpXG4gICAgKSB7XG4gICAgICBpZiAodHlwZW9mIHBvbGljeVsnc2NyaXB0LXNyYyddID09PSAnc3RyaW5nJykge1xuICAgICAgICBwb2xpY3lbJ3NjcmlwdC1zcmMnXSA9IFtwb2xpY3lbJ3NjcmlwdC1zcmMnXSwgYCdub25jZS0ke25vbmNlfSdgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gWy4uLnBvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICAgICAgfVxuICAgIH1cbiAgICBjc3BNZXRhID0gKFxuICAgICAgPG1ldGEgaHR0cEVxdWl2PVwiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIiBjb250ZW50PXtidWlsZFBvbGljeShwb2xpY3kpfSAvPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8aHRtbD5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyU2V0PXtjaGFyU2V0fSAvPlxuICAgICAgICB7Y3NwTWV0YX1cbiAgICAgICAge2hlYWR9XG4gICAgICAgIHthc3NldHMubWFwKChhc3NldCwgaSkgPT4gKFxuICAgICAgICAgIDxsaW5rIGtleT17aX0gcmVsPVwicHJlbG9hZFwiIHsuLi5hc3NldH0gLz5cbiAgICAgICAgKSl9XG4gICAgICAgIDx0aXRsZT57dGl0bGV9PC90aXRsZT5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPXtyb290SWR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAge3NjcmlwdHN9XG4gICAgICAgIHthc3NldHNcbiAgICAgICAgICAuZmlsdGVyKCh7IGhyZWYgfSkgPT4gaHJlZi5lbmRzV2l0aCgnLmpzJykpXG4gICAgICAgICAgLm1hcCgoeyBocmVmIH0sIGkpID0+IChcbiAgICAgICAgICAgIDxzY3JpcHQga2V5PXtpfSBzcmM9e2hyZWZ9IGFzeW5jIC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuRG9jdW1lbnQuZGVmYXVsdFByb3BzID0ge1xuICBoZWFkOiAoXG4gICAgPD5cbiAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiIC8+XG4gICAgICA8bGlua1xuICAgICAgICByZWw9XCJzaG9ydGN1dCBpY29uXCJcbiAgICAgICAgaHJlZj17YCR7cHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCA/
|
|
70
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsImNzUG9saWN5Iiwibm9uY2UiLCJzY3JpcHRzIiwiY3NwTWV0YSIsInBvbGljeSIsImluY2x1ZGVzIiwiYnVpbGRQb2xpY3kiLCJtYXAiLCJhc3NldCIsImkiLCJmaWx0ZXIiLCJocmVmIiwiZW5kc1dpdGgiLCJkZWZhdWx0UHJvcHMiLCJwcm9jZXNzIiwiZW52IiwiV0VCUEFDS19QVUJMSUNfUEFUSCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvRG9jdW1lbnRDb21wb25lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUG9saWN5IH0gZnJvbSAnLi9jc3AnO1xuaW1wb3J0IHsgYnVpbGRQb2xpY3kgfSBmcm9tICcuL2NzcCc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFzc2V0czogeyBocmVmOiBzdHJpbmc7IGFzPzogc3RyaW5nOyByZWw/OiBzdHJpbmcgfVtdO1xuICBoZWFkOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgcm9vdElkOiBzdHJpbmc7XG4gIGNoYXJTZXQ6IHN0cmluZztcbiAgY3NQb2xpY3k/OiBQb2xpY3k7XG4gIG5vbmNlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnQoe1xuICBhc3NldHMsXG4gIGhlYWQsXG4gIGNoaWxkcmVuLFxuICB0aXRsZSxcbiAgcm9vdElkLFxuICBjaGFyU2V0LFxuICBjc1BvbGljeSxcbiAgbm9uY2UsXG4gIHNjcmlwdHMsXG59OiBQcm9wcykge1xuICBsZXQgY3NwTWV0YTogbnVsbCB8IFJlYWN0LlJlYWN0Tm9kZSA9IG51bGw7XG4gIGlmIChjc1BvbGljeSkge1xuICAgIC8vIGFkZCBub25jZSB0byBwb2xpY3lcbiAgICBjb25zdCBwb2xpY3kgPSB7XG4gICAgICAuLi5jc1BvbGljeSxcbiAgICB9O1xuICAgIGlmIChcbiAgICAgIG5vbmNlICYmXG4gICAgICAvLyBub25jZXMgbmVnYXRlICd1bnNhZmUtaW5saW5lJyBzbyBkbyBub3QgYWRkIGl0IGlmIHRoYXQgZGlyZWN0aXZlIGV4aXN0c1xuICAgICAgKCFwb2xpY3lbJ3NjcmlwdC1zcmMnXSB8fFxuICAgICAgICAhcG9saWN5WydzY3JpcHQtc3JjJ10uaW5jbHVkZXMoXCIndW5zYWZlLWlubGluZSdcIikpXG4gICAgKSB7XG4gICAgICBpZiAodHlwZW9mIHBvbGljeVsnc2NyaXB0LXNyYyddID09PSAnc3RyaW5nJykge1xuICAgICAgICBwb2xpY3lbJ3NjcmlwdC1zcmMnXSA9IFtwb2xpY3lbJ3NjcmlwdC1zcmMnXSwgYCdub25jZS0ke25vbmNlfSdgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gWy4uLnBvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICAgICAgfVxuICAgIH1cbiAgICBjc3BNZXRhID0gKFxuICAgICAgPG1ldGEgaHR0cEVxdWl2PVwiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIiBjb250ZW50PXtidWlsZFBvbGljeShwb2xpY3kpfSAvPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8aHRtbD5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyU2V0PXtjaGFyU2V0fSAvPlxuICAgICAgICB7Y3NwTWV0YX1cbiAgICAgICAge2hlYWR9XG4gICAgICAgIHthc3NldHMubWFwKChhc3NldCwgaSkgPT4gKFxuICAgICAgICAgIDxsaW5rIGtleT17aX0gcmVsPVwicHJlbG9hZFwiIHsuLi5hc3NldH0gLz5cbiAgICAgICAgKSl9XG4gICAgICAgIDx0aXRsZT57dGl0bGV9PC90aXRsZT5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPXtyb290SWR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAge3NjcmlwdHN9XG4gICAgICAgIHthc3NldHNcbiAgICAgICAgICAuZmlsdGVyKCh7IGhyZWYgfSkgPT4gaHJlZi5lbmRzV2l0aCgnLmpzJykpXG4gICAgICAgICAgLm1hcCgoeyBocmVmIH0sIGkpID0+IChcbiAgICAgICAgICAgIDxzY3JpcHQga2V5PXtpfSBzcmM9e2hyZWZ9IGFzeW5jIC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuRG9jdW1lbnQuZGVmYXVsdFByb3BzID0ge1xuICBoZWFkOiAoXG4gICAgPD5cbiAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiIC8+XG4gICAgICA8bGlua1xuICAgICAgICByZWw9XCJzaG9ydGN1dCBpY29uXCJcbiAgICAgICAgaHJlZj17YCR7cHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCA/PyAnLyd9ZmF2aWNvbi5pY29gfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKSxcbiAgY2hhclNldDogJ3V0Zi04JyxcbiAgcm9vdElkOiAnYW5hbnNpLXJvb3QnLFxuICBzY3JpcHRzOiBudWxsLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBO0FBQW9DO0FBY3JCLFNBQVNBLFFBQVEsQ0FBQztFQUMvQkMsTUFBTTtFQUNOQyxJQUFJO0VBQ0pDLFFBQVE7RUFDUkMsS0FBSztFQUNMQyxNQUFNO0VBQ05DLE9BQU87RUFDUEMsUUFBUTtFQUNSQyxLQUFLO0VBQ0xDO0FBQ0ssQ0FBQyxFQUFFO0VBQ1IsSUFBSUMsT0FBK0IsR0FBRyxJQUFJO0VBQzFDLElBQUlILFFBQVEsRUFBRTtJQUNaO0lBQ0EsTUFBTUksTUFBTSxHQUFHO01BQ2IsR0FBR0o7SUFDTCxDQUFDO0lBQ0QsSUFDRUMsS0FBSztJQUNMO0lBQ0MsQ0FBQ0csTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUNwQixDQUFDQSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUNDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQ3BEO01BQ0EsSUFBSSxPQUFPRCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQzVDQSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQ0EsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFHLFVBQVNILEtBQU0sR0FBRSxDQUFDO01BQ25FLENBQUMsTUFBTTtRQUNMRyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHQSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUcsVUFBU0gsS0FBTSxHQUFFLENBQUM7TUFDdEU7SUFDRjtJQUNBRSxPQUFPLGdCQUNMO01BQU0sU0FBUyxFQUFDLHlCQUF5QjtNQUFDLE9BQU8sRUFBRSxJQUFBRyxnQkFBVyxFQUFDRixNQUFNO0lBQUUsRUFDeEU7RUFDSDtFQUNBLG9CQUNFLG9EQUNFLG9EQUNFO0lBQU0sT0FBTyxFQUFFTDtFQUFRLEVBQUcsRUFDekJJLE9BQU8sRUFDUFIsSUFBSSxFQUNKRCxNQUFNLENBQUNhLEdBQUcsQ0FBQyxDQUFDQyxLQUFLLEVBQUVDLENBQUMsa0JBQ25CO0lBQU0sR0FBRyxFQUFFQSxDQUFFO0lBQUMsR0FBRyxFQUFDLFNBQVM7SUFBQSxHQUFLRDtFQUFLLEVBQ3RDLENBQUMsZUFDRix3Q0FBUVgsS0FBSyxDQUFTLENBQ2pCLGVBQ1Asb0RBQ0U7SUFBSyxFQUFFLEVBQUVDO0VBQU8sV0FBRUYsUUFBUSxDQUFPLEVBQ2hDTSxPQUFPLEVBQ1BSLE1BQU0sQ0FDSmdCLE1BQU0sQ0FBQyxDQUFDO0lBQUVDO0VBQUssQ0FBQyxLQUFLQSxJQUFJLENBQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMxQ0wsR0FBRyxDQUFDLENBQUM7SUFBRUk7RUFBSyxDQUFDLEVBQUVGLENBQUMsa0JBQ2Y7SUFBZ0IsR0FBRyxFQUFFRSxJQUFLO0lBQUMsS0FBSztFQUFBLEdBQW5CRixDQUFDLENBQ2YsQ0FBQyxDQUNDLENBQ0Y7QUFFWDtBQUNBaEIsUUFBUSxDQUFDb0IsWUFBWSxHQUFHO0VBQ3RCbEIsSUFBSSxlQUNGLHlFQUNFO0lBQU0sSUFBSSxFQUFDLFVBQVU7SUFBQyxPQUFPLEVBQUM7RUFBcUMsRUFBRyxlQUN0RTtJQUNFLEdBQUcsRUFBQyxlQUFlO0lBQ25CLElBQUksRUFBRyw0QkFBRW1CLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxtQkFBbUIsb0NBQUksR0FBSTtFQUFhLEVBQzdELENBRUw7RUFDRGpCLE9BQU8sRUFBRSxPQUFPO0VBQ2hCRCxNQUFNLEVBQUUsYUFBYTtFQUNyQkksT0FBTyxFQUFFO0FBQ1gsQ0FBQyJ9
|
package/lib/spouts/app.js
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = void 0;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const appSpout = app => props => Promise.resolve({
|
|
6
|
+
...props,
|
|
7
7
|
app
|
|
8
8
|
});
|
|
9
|
-
|
|
10
9
|
var _default = appSpout;
|
|
11
10
|
exports.default = _default;
|
|
12
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBTcG91dCIsImFwcCIsInByb3BzIiwiUHJvbWlzZSIsInJlc29sdmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2FwcC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYXBwU3BvdXQgPVxuICAoYXBwOiBKU1guRWxlbWVudCkgPT5cbiAgPFAgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ocHJvcHM6IFApID0+
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBTcG91dCIsImFwcCIsInByb3BzIiwiUHJvbWlzZSIsInJlc29sdmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2FwcC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYXBwU3BvdXQgPVxuICAoYXBwOiBKU1guRWxlbWVudCkgPT5cbiAgPFAgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ocHJvcHM6IFApID0+XG4gICAgUHJvbWlzZS5yZXNvbHZlKHsgLi4ucHJvcHMsIGFwcCB9KTtcblxuZXhwb3J0IGRlZmF1bHQgYXBwU3BvdXQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxNQUFNQSxRQUFRLEdBQ1hDLEdBQWdCLElBQ21CQyxLQUFRLElBQzFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQztFQUFFLEdBQUdGLEtBQUs7RUFBRUQ7QUFBSSxDQUFDLENBQUM7QUFBQyxlQUV4QkQsUUFBUTtBQUFBIn0=
|
package/lib/spouts/app.server.js
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = void 0;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const appSpout = app => props => Promise.resolve({
|
|
6
|
+
...props,
|
|
7
7
|
app
|
|
8
8
|
});
|
|
9
|
-
|
|
10
9
|
var _default = appSpout;
|
|
11
10
|
exports.default = _default;
|
|
12
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBTcG91dCIsImFwcCIsInByb3BzIiwiUHJvbWlzZSIsInJlc29sdmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2FwcC5zZXJ2ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcnZlclByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGFwcFNwb3V0ID1cbiAgKGFwcDogSlNYLkVsZW1lbnQpID0+XG4gIDxQIGV4dGVuZHMgU2VydmVyUHJvcHM+
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBTcG91dCIsImFwcCIsInByb3BzIiwiUHJvbWlzZSIsInJlc29sdmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2FwcC5zZXJ2ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcnZlclByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGFwcFNwb3V0ID1cbiAgKGFwcDogSlNYLkVsZW1lbnQpID0+XG4gIDxQIGV4dGVuZHMgU2VydmVyUHJvcHM+KHByb3BzOiBQKSA9PlxuICAgIFByb21pc2UucmVzb2x2ZSh7IC4uLnByb3BzLCBhcHAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFwcFNwb3V0O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBRUEsTUFBTUEsUUFBUSxHQUNYQyxHQUFnQixJQUNPQyxLQUFRLElBQzlCQyxPQUFPLENBQUNDLE9BQU8sQ0FBQztFQUFFLEdBQUdGLEtBQUs7RUFBRUQ7QUFBSSxDQUFDLENBQUM7QUFBQyxlQUV4QkQsUUFBUTtBQUFBIn0=
|
package/lib/spouts/csp.js
CHANGED
|
@@ -2,19 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.buildPolicy = buildPolicy;
|
|
5
|
-
|
|
6
5
|
// TODO: memoize this
|
|
7
6
|
function buildPolicy(policyObj) {
|
|
8
7
|
return Object.keys(policyObj).map(key => {
|
|
9
|
-
const val = Array.isArray(policyObj[key]) ? [...new Set(policyObj[key]).values()].filter(v => v).join(' ') : policyObj[key];
|
|
10
|
-
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic
|
|
8
|
+
const val = Array.isArray(policyObj[key]) ? [...new Set(policyObj[key]).values()].filter(v => v).join(' ') : policyObj[key];
|
|
11
9
|
|
|
10
|
+
// move strict dynamic to the end of the policy if it exists to be backwards compatible with csp2
|
|
11
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic
|
|
12
12
|
if (typeof val === 'string' && val.includes("'strict-dynamic'")) {
|
|
13
13
|
const newVal = `${val.replace(/\s?'strict-dynamic'\s?/gi, ' ').trim()} 'strict-dynamic'`;
|
|
14
14
|
return `${key} ${newVal}`;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
16
|
return `${key} ${val}`;
|
|
18
17
|
}).join('; ');
|
|
19
18
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFBvbGljeSIsInBvbGljeU9iaiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJTZXQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJ2Iiwiam9pbiIsImluY2x1ZGVzIiwibmV3VmFsIiwicmVwbGFjZSIsInRyaW0iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2NzcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFBvbGljeSB7XG4gIFtkaXJlY3RpdmU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG4vLyBUT0RPOiBtZW1vaXplIHRoaXNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbGljeShwb2xpY3lPYmo6IFBvbGljeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocG9saWN5T2JqKVxuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IEFycmF5LmlzQXJyYXkocG9saWN5T2JqW2tleV0pXG4gICAgICAgID8gWy4uLm5ldyBTZXQocG9saWN5T2JqW2tleV0pLnZhbHVlcygpXS5maWx0ZXIodiA9PiB2KS5qb2luKCcgJylcbiAgICAgICAgOiBwb2xpY3lPYmpba2V5XTtcblxuICAgICAgLy8gbW92ZSBzdHJpY3QgZHluYW1pYyB0byB0aGUgZW5kIG9mIHRoZSBwb2xpY3kgaWYgaXQgZXhpc3RzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggY3NwMlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3NjcmlwdC1zcmMjc3RyaWN0LWR5bmFtaWNcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoXCInc3RyaWN0LWR5bmFtaWMnXCIpKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGAke3ZhbFxuICAgICAgICAgIC5yZXBsYWNlKC9cXHM/
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFBvbGljeSIsInBvbGljeU9iaiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJTZXQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJ2Iiwiam9pbiIsImluY2x1ZGVzIiwibmV3VmFsIiwicmVwbGFjZSIsInRyaW0iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2NzcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFBvbGljeSB7XG4gIFtkaXJlY3RpdmU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG4vLyBUT0RPOiBtZW1vaXplIHRoaXNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbGljeShwb2xpY3lPYmo6IFBvbGljeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocG9saWN5T2JqKVxuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IEFycmF5LmlzQXJyYXkocG9saWN5T2JqW2tleV0pXG4gICAgICAgID8gWy4uLm5ldyBTZXQocG9saWN5T2JqW2tleV0pLnZhbHVlcygpXS5maWx0ZXIodiA9PiB2KS5qb2luKCcgJylcbiAgICAgICAgOiBwb2xpY3lPYmpba2V5XTtcblxuICAgICAgLy8gbW92ZSBzdHJpY3QgZHluYW1pYyB0byB0aGUgZW5kIG9mIHRoZSBwb2xpY3kgaWYgaXQgZXhpc3RzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggY3NwMlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3NjcmlwdC1zcmMjc3RyaWN0LWR5bmFtaWNcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoXCInc3RyaWN0LWR5bmFtaWMnXCIpKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGAke3ZhbFxuICAgICAgICAgIC5yZXBsYWNlKC9cXHM/J3N0cmljdC1keW5hbWljJ1xccz8vZ2ksICcgJylcbiAgICAgICAgICAudHJpbSgpfSAnc3RyaWN0LWR5bmFtaWMnYDtcbiAgICAgICAgcmV0dXJuIGAke2tleX0gJHtuZXdWYWx9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2tleX0gJHt2YWx9YDtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBSUE7QUFDTyxTQUFTQSxXQUFXLENBQUNDLFNBQWlCLEVBQUU7RUFDN0MsT0FBT0MsTUFBTSxDQUFDQyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxDQUMxQkcsR0FBRyxDQUFDQyxHQUFHLElBQUk7SUFDVixNQUFNQyxHQUFHLEdBQUdDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDUCxTQUFTLENBQUNJLEdBQUcsQ0FBQyxDQUFDLEdBQ3JDLENBQUMsR0FBRyxJQUFJSSxHQUFHLENBQUNSLFNBQVMsQ0FBQ0ksR0FBRyxDQUFDLENBQUMsQ0FBQ0ssTUFBTSxFQUFFLENBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxDQUFDLElBQUlBLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQzlEWixTQUFTLENBQUNJLEdBQUcsQ0FBQzs7SUFFbEI7SUFDQTtJQUNBLElBQUksT0FBT0MsR0FBRyxLQUFLLFFBQVEsSUFBSUEsR0FBRyxDQUFDUSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRTtNQUMvRCxNQUFNQyxNQUFNLEdBQUksR0FBRVQsR0FBRyxDQUNsQlUsT0FBTyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsQ0FBQyxDQUN4Q0MsSUFBSSxFQUFHLG1CQUFrQjtNQUM1QixPQUFRLEdBQUVaLEdBQUksSUFBR1UsTUFBTyxFQUFDO0lBQzNCO0lBRUEsT0FBUSxHQUFFVixHQUFJLElBQUdDLEdBQUksRUFBQztFQUN4QixDQUFDLENBQUMsQ0FDRE8sSUFBSSxDQUFDLElBQUksQ0FBQztBQUNmIn0=
|
package/lib/spouts/document.js
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = documentSpout;
|
|
5
|
-
|
|
6
5
|
function documentSpout(options) {
|
|
7
6
|
return next => async props => {
|
|
8
7
|
const nextProps = await next(props);
|
|
9
8
|
return nextProps;
|
|
10
9
|
};
|
|
11
10
|
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudFNwb3V0Iiwib3B0aW9ucyIsIm5leHQiLCJwcm9wcyIsIm5leHRQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvZG9jdW1lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuXG5pbXBvcnQgdHlwZSB7IENsaWVudFNwb3V0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRvY3VtZW50U3BvdXQob3B0aW9uczoge1xuICBoZWFkPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xufSk6IENsaWVudFNwb3V0IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgcmV0dXJuIG5leHRQcm9wcztcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUtlLFNBQVNBLGFBQWEsQ0FBQ0MsT0FHckMsRUFBZTtFQUNkLE9BQU9DLElBQUksSUFBSSxNQUFNQyxLQUFLLElBQUk7SUFDNUIsTUFBTUMsU0FBUyxHQUFHLE1BQU1GLElBQUksQ0FBQ0MsS0FBSyxDQUFDO0lBRW5DLE9BQU9DLFNBQVM7RUFDbEIsQ0FBQztBQUNIIn0=
|
|
@@ -1,42 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
exports.__esModule = true;
|
|
6
5
|
exports.default = DocumentSpout;
|
|
7
|
-
|
|
8
6
|
var _react = _interopRequireDefault(require("react"));
|
|
9
|
-
|
|
10
7
|
var _DocumentComponent = _interopRequireDefault(require("./DocumentComponent"));
|
|
11
|
-
|
|
12
8
|
function DocumentSpout(options) {
|
|
13
9
|
return next => async props => {
|
|
14
10
|
var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _nextProps$title;
|
|
15
|
-
|
|
16
11
|
const nextProps = await next(props);
|
|
17
12
|
const publicPath = props.clientManifest.publicPath;
|
|
18
|
-
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');
|
|
19
|
-
// https://github.com/facebook/react/tree/main/packages/react-server-dom-webpack
|
|
13
|
+
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');
|
|
20
14
|
|
|
15
|
+
// TODO: consider using this package for build stats in future:
|
|
16
|
+
// https://github.com/facebook/react/tree/main/packages/react-server-dom-webpack
|
|
21
17
|
const assetMap = assets => assets.map(({
|
|
22
18
|
name
|
|
23
19
|
}) => `${publicPath}${name}`);
|
|
24
|
-
|
|
25
20
|
const assetList = [];
|
|
26
21
|
Object.values((_props$clientManifest3 = (_props$clientManifest4 = props.clientManifest) == null ? void 0 : _props$clientManifest4.entrypoints) != null ? _props$clientManifest3 : {}).forEach(entrypoint => {
|
|
27
22
|
var _entrypoint$assets;
|
|
28
|
-
|
|
29
23
|
assetList.push(...assetMap((_entrypoint$assets = entrypoint.assets) != null ? _entrypoint$assets : []));
|
|
30
24
|
});
|
|
31
25
|
new Set(assetMap(Object.values((_props$clientManifest5 = props.clientManifest.namedChunkGroups) != null ? _props$clientManifest5 : {}).filter(({
|
|
32
26
|
name
|
|
33
27
|
}) => nextProps.matchedRoutes.some(route => name == null ? void 0 : name.includes(route.name))).flatMap(chunk => {
|
|
34
28
|
var _chunk$assets;
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
return [...((_chunk$assets = chunk.assets) != null ? _chunk$assets : []),
|
|
30
|
+
// any chunk preloads
|
|
37
31
|
...childrenAssets(chunk)];
|
|
38
|
-
}))).forEach(asset => assetList.push(asset));
|
|
32
|
+
}))).forEach(asset => assetList.push(asset));
|
|
39
33
|
|
|
34
|
+
// find additional assets to preload based on matched route
|
|
40
35
|
const assets = assetList.filter(asset => !asset.endsWith('.hot-update.js')).map(asset => asset.endsWith('.css') ? {
|
|
41
36
|
href: asset,
|
|
42
37
|
rel: 'stylesheet'
|
|
@@ -46,8 +41,10 @@ function DocumentSpout(options) {
|
|
|
46
41
|
} : {
|
|
47
42
|
href: asset
|
|
48
43
|
});
|
|
49
|
-
return {
|
|
50
|
-
|
|
44
|
+
return {
|
|
45
|
+
...nextProps,
|
|
46
|
+
app: /*#__PURE__*/_react.default.createElement(_DocumentComponent.default, {
|
|
47
|
+
...options,
|
|
51
48
|
title: (_nextProps$title = nextProps.title) != null ? _nextProps$title : options.title,
|
|
52
49
|
assets: assets,
|
|
53
50
|
rootId: options.rootId,
|
|
@@ -58,12 +55,10 @@ function DocumentSpout(options) {
|
|
|
58
55
|
};
|
|
59
56
|
};
|
|
60
57
|
}
|
|
61
|
-
|
|
62
58
|
function childrenAssets(chunk) {
|
|
63
59
|
return chunk.children ? Object.values(chunk.children).flatMap(preload => preload.flatMap(c => {
|
|
64
60
|
var _c$assets;
|
|
65
|
-
|
|
66
61
|
return (_c$assets = c.assets) != null ? _c$assets : [];
|
|
67
62
|
})) : [];
|
|
68
63
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudFNwb3V0Iiwib3B0aW9ucyIsIm5leHQiLCJwcm9wcyIsIm5leHRQcm9wcyIsInB1YmxpY1BhdGgiLCJjbGllbnRNYW5pZmVzdCIsIk9iamVjdCIsImtleXMiLCJlbnRyeXBvaW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXNzZXRNYXAiLCJhc3NldHMiLCJtYXAiLCJuYW1lIiwiYXNzZXRMaXN0IiwidmFsdWVzIiwiZm9yRWFjaCIsImVudHJ5cG9pbnQiLCJwdXNoIiwiU2V0IiwibmFtZWRDaHVua0dyb3VwcyIsImZpbHRlciIsIm1hdGNoZWRSb3V0ZXMiLCJzb21lIiwicm91dGUiLCJpbmNsdWRlcyIsImZsYXRNYXAiLCJjaHVuayIsImNoaWxkcmVuQXNzZXRzIiwiYXNzZXQiLCJlbmRzV2l0aCIsImhyZWYiLCJyZWwiLCJhcyIsImFwcCIsInRpdGxlIiwicm9vdElkIiwibm9uY2UiLCJjc1BvbGljeSIsInNjcmlwdHMiLCJjaGlsZHJlbiIsInByZWxvYWQiLCJjIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9kb2N1bWVudC5zZXJ2ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IHsgU3RhdHNDaHVua0dyb3VwIH0gZnJvbSAnd2VicGFjayc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgUG9saWN5IH0gZnJvbSAnLi9jc3AnO1xuaW1wb3J0IERvY3VtZW50IGZyb20gJy4vRG9jdW1lbnRDb21wb25lbnQnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPGFueT5bXTtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50U3BvdXQob3B0aW9uczoge1xuICBoZWFkPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xuICByb290SWQ/OiBzdHJpbmc7XG4gIGNoYXJTZXQ/OiBzdHJpbmc7XG4gIGNzUG9saWN5PzogUG9saWN5O1xufSk6IFNlcnZlclNwb3V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgTmVlZGVkTmV4dD4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBwdWJsaWNQYXRoID0gcHJvcHMuY2xpZW50TWFuaWZlc3QucHVibGljUGF0aDtcblxuICAgIGlmIChcbiAgICAgIE9iamVjdC5rZXlzKHByb3BzLmNsaWVudE1hbmlmZXN0Py5lbnRyeXBvaW50cyA/PyB7fSkubGVuZ3RoIDwgMSB8fFxuICAgICAgcHVibGljUGF0aCA9PT0gdW5kZWZpbmVkXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYW5pZmVzdCBtaXNzaW5nIGVudHJpZXMgbmVlZGVkJyk7XG5cbiAgICAvLyBUT0RPOiBjb25zaWRlciB1c2luZyB0aGlzIHBhY2thZ2UgZm9yIGJ1aWxkIHN0YXRzIGluIGZ1dHVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvdHJlZS9tYWluL3BhY2thZ2VzL3JlYWN0LXNlcnZlci1kb20td2VicGFja1xuICAgIGNvbnN0IGFzc2V0TWFwID0gKGFzc2V0czogeyBuYW1lOiBzdHJpbmc7IHNpemU/OiBudW1iZXIgfVtdKSA9PlxuICAgICAgYXNzZXRzLm1hcCgoeyBuYW1lIH0pID0+IGAke3B1YmxpY1BhdGh9JHtuYW1lfWApO1xuXG4gICAgY29uc3QgYXNzZXRMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIE9iamVjdC52YWx1ZXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5mb3JFYWNoKFxuICAgICAgZW50cnlwb2ludCA9PiB7XG4gICAgICAgIGFzc2V0TGlzdC5wdXNoKC4uLmFzc2V0TWFwKGVudHJ5cG9pbnQuYXNzZXRzID8/IFtdKSk7XG4gICAgICB9LFxuICAgICk7XG4gICAgbmV3IFNldChcbiAgICAgIGFzc2V0TWFwKFxuICAgICAgICBPYmplY3QudmFsdWVzKHByb3BzLmNsaWVudE1hbmlmZXN0Lm5hbWVkQ2h1bmtHcm91cHMgPz8ge30pXG4gICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+XG4gICAgICAgICAgICBuZXh0UHJvcHMubWF0Y2hlZFJvdXRlcy5zb21lKHJvdXRlID0+IG5hbWU/LmluY2x1ZGVzKHJvdXRlLm5hbWUpKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLmZsYXRNYXAoY2h1bmsgPT4gW1xuICAgICAgICAgICAgLi4uKGNodW5rLmFzc2V0cyA/PyBbXSksXG4gICAgICAgICAgICAvLyBhbnkgY2h1bmsgcHJlbG9hZHNcbiAgICAgICAgICAgIC4uLmNoaWxkcmVuQXNzZXRzKGNodW5rKSxcbiAgICAgICAgICBdKSxcbiAgICAgICksXG4gICAgKS5mb3JFYWNoKGFzc2V0ID0+IGFzc2V0TGlzdC5wdXNoKGFzc2V0KSk7XG5cbiAgICAvLyBmaW5kIGFkZGl0aW9uYWwgYXNzZXRzIHRvIHByZWxvYWQgYmFzZWQgb24gbWF0Y2hlZCByb3V0ZVxuICAgIGNvbnN0IGFzc2V0czoge1xuICAgICAgaHJlZjogc3RyaW5nO1xuICAgICAgYXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICByZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfVtdID0gYXNzZXRMaXN0XG4gICAgICAuZmlsdGVyKGFzc2V0ID0+ICFhc3NldC5lbmRzV2l0aCgnLmhvdC11cGRhdGUuanMnKSlcbiAgICAgIC5tYXAoYXNzZXQgPT5cbiAgICAgICAgYXNzZXQuZW5kc1dpdGgoJy5jc3MnKVxuICAgICAgICAgID8geyBocmVmOiBhc3NldCwgcmVsOiAnc3R5bGVzaGVldCcgfVxuICAgICAgICAgIDogYXNzZXQuZW5kc1dpdGgoJy5qcycpXG4gICAgICAgICAgPyB7IGhyZWY6IGFzc2V0LCBhczogJ3NjcmlwdCcgfVxuICAgICAgICAgIDogeyBocmVmOiBhc3NldCB9LFxuICAgICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IChcbiAgICAgICAgPERvY3VtZW50XG4gICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgdGl0bGU9e25leHRQcm9wcy50aXRsZSA/PyBvcHRpb25zLnRpdGxlfVxuICAgICAgICAgIGFzc2V0cz17YXNzZXRzfVxuICAgICAgICAgIHJvb3RJZD17b3B0aW9ucy5yb290SWR9XG4gICAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICAgIGNzUG9saWN5PXtvcHRpb25zLmNzUG9saWN5fVxuICAgICAgICAgIHNjcmlwdHM9e25leHRQcm9wcy5zY3JpcHRzfVxuICAgICAgICA+XG4gICAgICAgICAge25leHRQcm9wcy5hcHB9XG4gICAgICAgIDwvRG9jdW1lbnQ+
|
|
64
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudFNwb3V0Iiwib3B0aW9ucyIsIm5leHQiLCJwcm9wcyIsIm5leHRQcm9wcyIsInB1YmxpY1BhdGgiLCJjbGllbnRNYW5pZmVzdCIsIk9iamVjdCIsImtleXMiLCJlbnRyeXBvaW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXNzZXRNYXAiLCJhc3NldHMiLCJtYXAiLCJuYW1lIiwiYXNzZXRMaXN0IiwidmFsdWVzIiwiZm9yRWFjaCIsImVudHJ5cG9pbnQiLCJwdXNoIiwiU2V0IiwibmFtZWRDaHVua0dyb3VwcyIsImZpbHRlciIsIm1hdGNoZWRSb3V0ZXMiLCJzb21lIiwicm91dGUiLCJpbmNsdWRlcyIsImZsYXRNYXAiLCJjaHVuayIsImNoaWxkcmVuQXNzZXRzIiwiYXNzZXQiLCJlbmRzV2l0aCIsImhyZWYiLCJyZWwiLCJhcyIsImFwcCIsInRpdGxlIiwicm9vdElkIiwibm9uY2UiLCJjc1BvbGljeSIsInNjcmlwdHMiLCJjaGlsZHJlbiIsInByZWxvYWQiLCJjIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9kb2N1bWVudC5zZXJ2ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IHsgU3RhdHNDaHVua0dyb3VwIH0gZnJvbSAnd2VicGFjayc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgUG9saWN5IH0gZnJvbSAnLi9jc3AnO1xuaW1wb3J0IERvY3VtZW50IGZyb20gJy4vRG9jdW1lbnRDb21wb25lbnQnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPGFueT5bXTtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50U3BvdXQob3B0aW9uczoge1xuICBoZWFkPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xuICByb290SWQ/OiBzdHJpbmc7XG4gIGNoYXJTZXQ/OiBzdHJpbmc7XG4gIGNzUG9saWN5PzogUG9saWN5O1xufSk6IFNlcnZlclNwb3V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgTmVlZGVkTmV4dD4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBwdWJsaWNQYXRoID0gcHJvcHMuY2xpZW50TWFuaWZlc3QucHVibGljUGF0aDtcblxuICAgIGlmIChcbiAgICAgIE9iamVjdC5rZXlzKHByb3BzLmNsaWVudE1hbmlmZXN0Py5lbnRyeXBvaW50cyA/PyB7fSkubGVuZ3RoIDwgMSB8fFxuICAgICAgcHVibGljUGF0aCA9PT0gdW5kZWZpbmVkXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYW5pZmVzdCBtaXNzaW5nIGVudHJpZXMgbmVlZGVkJyk7XG5cbiAgICAvLyBUT0RPOiBjb25zaWRlciB1c2luZyB0aGlzIHBhY2thZ2UgZm9yIGJ1aWxkIHN0YXRzIGluIGZ1dHVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvdHJlZS9tYWluL3BhY2thZ2VzL3JlYWN0LXNlcnZlci1kb20td2VicGFja1xuICAgIGNvbnN0IGFzc2V0TWFwID0gKGFzc2V0czogeyBuYW1lOiBzdHJpbmc7IHNpemU/OiBudW1iZXIgfVtdKSA9PlxuICAgICAgYXNzZXRzLm1hcCgoeyBuYW1lIH0pID0+IGAke3B1YmxpY1BhdGh9JHtuYW1lfWApO1xuXG4gICAgY29uc3QgYXNzZXRMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIE9iamVjdC52YWx1ZXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5mb3JFYWNoKFxuICAgICAgZW50cnlwb2ludCA9PiB7XG4gICAgICAgIGFzc2V0TGlzdC5wdXNoKC4uLmFzc2V0TWFwKGVudHJ5cG9pbnQuYXNzZXRzID8/IFtdKSk7XG4gICAgICB9LFxuICAgICk7XG4gICAgbmV3IFNldChcbiAgICAgIGFzc2V0TWFwKFxuICAgICAgICBPYmplY3QudmFsdWVzKHByb3BzLmNsaWVudE1hbmlmZXN0Lm5hbWVkQ2h1bmtHcm91cHMgPz8ge30pXG4gICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+XG4gICAgICAgICAgICBuZXh0UHJvcHMubWF0Y2hlZFJvdXRlcy5zb21lKHJvdXRlID0+IG5hbWU/LmluY2x1ZGVzKHJvdXRlLm5hbWUpKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLmZsYXRNYXAoY2h1bmsgPT4gW1xuICAgICAgICAgICAgLi4uKGNodW5rLmFzc2V0cyA/PyBbXSksXG4gICAgICAgICAgICAvLyBhbnkgY2h1bmsgcHJlbG9hZHNcbiAgICAgICAgICAgIC4uLmNoaWxkcmVuQXNzZXRzKGNodW5rKSxcbiAgICAgICAgICBdKSxcbiAgICAgICksXG4gICAgKS5mb3JFYWNoKGFzc2V0ID0+IGFzc2V0TGlzdC5wdXNoKGFzc2V0KSk7XG5cbiAgICAvLyBmaW5kIGFkZGl0aW9uYWwgYXNzZXRzIHRvIHByZWxvYWQgYmFzZWQgb24gbWF0Y2hlZCByb3V0ZVxuICAgIGNvbnN0IGFzc2V0czoge1xuICAgICAgaHJlZjogc3RyaW5nO1xuICAgICAgYXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICByZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfVtdID0gYXNzZXRMaXN0XG4gICAgICAuZmlsdGVyKGFzc2V0ID0+ICFhc3NldC5lbmRzV2l0aCgnLmhvdC11cGRhdGUuanMnKSlcbiAgICAgIC5tYXAoYXNzZXQgPT5cbiAgICAgICAgYXNzZXQuZW5kc1dpdGgoJy5jc3MnKVxuICAgICAgICAgID8geyBocmVmOiBhc3NldCwgcmVsOiAnc3R5bGVzaGVldCcgfVxuICAgICAgICAgIDogYXNzZXQuZW5kc1dpdGgoJy5qcycpXG4gICAgICAgICAgPyB7IGhyZWY6IGFzc2V0LCBhczogJ3NjcmlwdCcgfVxuICAgICAgICAgIDogeyBocmVmOiBhc3NldCB9LFxuICAgICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IChcbiAgICAgICAgPERvY3VtZW50XG4gICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgdGl0bGU9e25leHRQcm9wcy50aXRsZSA/PyBvcHRpb25zLnRpdGxlfVxuICAgICAgICAgIGFzc2V0cz17YXNzZXRzfVxuICAgICAgICAgIHJvb3RJZD17b3B0aW9ucy5yb290SWR9XG4gICAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICAgIGNzUG9saWN5PXtvcHRpb25zLmNzUG9saWN5fVxuICAgICAgICAgIHNjcmlwdHM9e25leHRQcm9wcy5zY3JpcHRzfVxuICAgICAgICA+XG4gICAgICAgICAge25leHRQcm9wcy5hcHB9XG4gICAgICAgIDwvRG9jdW1lbnQ+XG4gICAgICApLFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuQXNzZXRzKGNodW5rOiBTdGF0c0NodW5rR3JvdXApIHtcbiAgcmV0dXJuIGNodW5rLmNoaWxkcmVuXG4gICAgPyBPYmplY3QudmFsdWVzKGNodW5rLmNoaWxkcmVuKS5mbGF0TWFwKHByZWxvYWQgPT5cbiAgICAgICAgcHJlbG9hZC5mbGF0TWFwKGMgPT4gYy5hc3NldHMgPz8gW10pLFxuICAgICAgKVxuICAgIDogW107XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFNQTtBQVFlLFNBQVNBLGFBQWEsQ0FBQ0MsT0FNckMsRUFBNkU7RUFDNUUsT0FBT0MsSUFBSSxJQUFJLE1BQU1DLEtBQUssSUFBSTtJQUFBO0lBQzVCLE1BQU1DLFNB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
|