@anansi/core 0.7.4 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/server.js +27 -23
  3. package/dist/server.js.map +1 -1
  4. package/lib/floodSpouts.d.ts +6 -0
  5. package/lib/floodSpouts.d.ts.map +1 -0
  6. package/lib/index.d.ts +5 -0
  7. package/lib/index.d.ts.map +1 -0
  8. package/lib/index.server.d.ts +6 -0
  9. package/lib/index.server.d.ts.map +1 -0
  10. package/lib/laySpouts.d.ts +8 -0
  11. package/lib/laySpouts.d.ts.map +1 -0
  12. package/lib/scripts/index.d.ts +3 -0
  13. package/lib/scripts/index.d.ts.map +1 -0
  14. package/lib/scripts/index.js +15 -0
  15. package/lib/scripts/serve.d.ts +4 -0
  16. package/lib/scripts/serve.d.ts.map +1 -0
  17. package/lib/scripts/serve.js +162 -0
  18. package/lib/scripts/startDevserver.d.ts +4 -0
  19. package/lib/scripts/startDevserver.d.ts.map +1 -0
  20. package/lib/scripts/startDevserver.js +175 -164
  21. package/lib/scripts/types.d.ts +7 -0
  22. package/lib/scripts/types.d.ts.map +1 -0
  23. package/lib/spouts/DocumentComponent.d.ts +23 -0
  24. package/lib/spouts/DocumentComponent.d.ts.map +1 -0
  25. package/lib/spouts/DocumentComponent.js +10 -6
  26. package/lib/spouts/document.d.ts +13 -0
  27. package/lib/spouts/document.d.ts.map +1 -0
  28. package/lib/spouts/document.server.d.ts +18 -0
  29. package/lib/spouts/document.server.d.ts.map +1 -0
  30. package/lib/spouts/document.server.js +1 -1
  31. package/lib/spouts/prefetch.server.d.ts +8 -0
  32. package/lib/spouts/prefetch.server.d.ts.map +1 -0
  33. package/lib/spouts/restHooks.d.ts +8 -0
  34. package/lib/spouts/restHooks.d.ts.map +1 -0
  35. package/lib/spouts/restHooks.server.d.ts +9 -0
  36. package/lib/spouts/restHooks.server.d.ts.map +1 -0
  37. package/lib/spouts/router.d.ts +12 -0
  38. package/lib/spouts/router.d.ts.map +1 -0
  39. package/lib/spouts/router.server.d.ts +12 -0
  40. package/lib/spouts/router.server.d.ts.map +1 -0
  41. package/lib/spouts/types.d.ts +16 -0
  42. package/lib/spouts/types.d.ts.map +1 -0
  43. package/package.json +8 -3
  44. package/src/scripts/index.ts +2 -0
  45. package/src/scripts/serve.ts +168 -0
  46. package/src/scripts/startDevserver.ts +218 -202
  47. package/src/spouts/DocumentComponent.tsx +8 -2
  48. package/src/spouts/document.server.tsx +2 -0
@@ -3,6 +3,9 @@
3
3
 
4
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
5
 
6
+ exports.__esModule = true;
7
+ exports.default = startDevServer;
8
+
6
9
  var _util = require("util");
7
10
 
8
11
  var _fs = _interopRequireDefault(require("fs"));
@@ -29,204 +32,212 @@ var _runtime = _interopRequireDefault(require("webpack/lib/logging/runtime"));
29
32
 
30
33
  require("cross-fetch/polyfill");
31
34
 
32
- var _webpackConfigs$, _webpackConfigs$$devS;
33
-
34
- // eslint-disable-next-line @typescript-eslint/no-var-requires
35
- const webpackConfig = require(require.resolve( // TODO: use normal resolution algorithm to find webpack file
36
- _path.default.join(process.cwd(), 'webpack.config')));
35
+ // run directly from node
36
+ if (require.main === module) {
37
+ const entrypoint = process.argv[2]; //process.env.WEBPACK_PUBLIC_HOST = `http://localhost:${PORT}`; this breaks compatibility with stackblitz
37
38
 
38
- const entrypoint = process.argv[2]; //process.env.WEBPACK_PUBLIC_HOST = `http://localhost:${PORT}`; this breaks compatibility with stackblitz
39
+ process.env.WEBPACK_PUBLIC_PATH = '/assets/';
39
40
 
40
- process.env.WEBPACK_PUBLIC_PATH = '/assets/';
41
+ if (!entrypoint) {
42
+ console.log(`Usage: start-anansi <entrypoint-file>`);
43
+ process.exit(-1);
44
+ }
41
45
 
42
- if (!entrypoint) {
43
- console.log(`Usage: start-anansi <entrypoint-file>`);
44
- process.exit(-1);
46
+ startDevServer(entrypoint);
45
47
  }
46
48
 
47
- const log = _runtime.default.getLogger('anansi-devserver'); // Set up in memory filesystem
49
+ function startDevServer(entrypoint, env = {}) {
50
+ var _webpackConfigs$, _webpackConfigs$$devS;
48
51
 
52
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
53
+ const webpackConfig = require(require.resolve( // TODO: use normal resolution algorithm to find webpack file
54
+ _path.default.join(process.cwd(), 'webpack.config')));
49
55
 
50
- const volume = new _memfs.Volume();
51
- const fs = (0, _memfs.createFsFromVolume)(volume);
56
+ const log = _runtime.default.getLogger('anansi-devserver'); // Set up in memory filesystem
52
57
 
53
- _unionfs.ufs.use(_fs.default).use(fs);
54
58
 
55
- (0, _fsMonkey.patchRequire)(_unionfs.ufs);
56
- const readFile = (0, _util.promisify)(_unionfs.ufs.readFile);
57
- let server; // Generate a temporary file so we can hot reload from the root of the application
59
+ const volume = new _memfs.Volume();
60
+ const fs = (0, _memfs.createFsFromVolume)(volume);
58
61
 
59
- function hotEntry(entryPath) {
60
- // eslint-disable-next-line
61
- // @ts-ignore for some reason it's not picking up that other options are optional
62
- const generatedEntrypoint = _tmp.default.fileSync({
63
- postfix: '.js'
64
- });
62
+ _unionfs.ufs.use(_fs.default).use(fs);
65
63
 
66
- _fs.default.writeSync(generatedEntrypoint.fd, `
67
- import entry from "${_path.default.resolve(process.cwd(), entryPath)}";
64
+ (0, _fsMonkey.patchRequire)(_unionfs.ufs);
65
+ const readFile = (0, _util.promisify)(_unionfs.ufs.readFile);
66
+ let server; // Generate a temporary file so we can hot reload from the root of the application
68
67
 
69
- if (module.hot) {
70
- module.hot.accept();
71
- }
68
+ function hotEntry(entryPath) {
69
+ // eslint-disable-next-line
70
+ // @ts-ignore for some reason it's not picking up that other options are optional
71
+ const generatedEntrypoint = _tmp.default.fileSync({
72
+ postfix: '.js'
73
+ });
72
74
 
73
- export default entry;
74
- `);
75
+ _fs.default.writeSync(generatedEntrypoint.fd, `
76
+ import entry from "${_path.default.resolve(process.cwd(), entryPath)}";
75
77
 
76
- return generatedEntrypoint;
77
- }
78
+ if (module.hot) {
79
+ module.hot.accept();
80
+ }
78
81
 
79
- const webpackConfigs = [webpackConfig({
80
- entrypath: hotEntry(entrypoint).name,
81
- name: 'client'
82
- }, {
83
- mode: 'development'
84
- }), webpackConfig({
85
- entrypath: entrypoint.replace('.tsx', '.server.tsx'),
86
- name: 'server',
87
- BROWSERSLIST_ENV: 'current node'
88
- }, {
89
- mode: 'development',
90
- target: 'node'
91
- })]; // only have one output for server so we can avoid cached modules
92
-
93
- webpackConfigs[1].plugins.push(new _webpack.default.optimize.LimitChunkCountPlugin({
94
- maxChunks: 1
95
- })); // initialize the webpack compiler
96
-
97
- const compiler = (0, _webpack.default)(webpackConfigs);
98
-
99
- _sourceMapSupport.default.install({
100
- hookRequire: true
101
- });
102
-
103
- function getServerBundle(serverStats) {
104
- var _serverJson$outputPat;
105
-
106
- const serverJson = serverStats.toJson({
107
- assets: true
108
- });
109
- return _path.default.join((_serverJson$outputPat = serverJson.outputPath) != null ? _serverJson$outputPat : '', 'server.js');
110
- }
82
+ export default entry;
83
+ `);
111
84
 
112
- function handleErrors(fn) {
113
- return async function (req, res, next) {
114
- try {
115
- return await fn(req, res);
116
- } catch (x) {
117
- next(x);
118
- }
119
- };
120
- }
121
-
122
- const initRender = [];
85
+ return generatedEntrypoint;
86
+ }
123
87
 
124
- let render = (...args) => new Promise(resolve => {
125
- initRender.push({
126
- args,
127
- resolve
88
+ const webpackConfigs = [webpackConfig({ ...env,
89
+ entrypath: hotEntry(entrypoint).name,
90
+ name: 'client'
91
+ }, {
92
+ mode: 'development'
93
+ }), webpackConfig({ ...env,
94
+ entrypath: entrypoint.replace('.tsx', '.server.tsx'),
95
+ name: 'server',
96
+ BROWSERSLIST_ENV: 'current node'
97
+ }, {
98
+ mode: 'development',
99
+ target: 'node'
100
+ })]; // only have one output for server so we can avoid cached modules
101
+
102
+ webpackConfigs[1].plugins.push(new _webpack.default.optimize.LimitChunkCountPlugin({
103
+ maxChunks: 1
104
+ })); // initialize the webpack compiler
105
+
106
+ const compiler = (0, _webpack.default)(webpackConfigs);
107
+
108
+ _sourceMapSupport.default.install({
109
+ hookRequire: true
128
110
  });
129
- });
130
111
 
131
- function importRender(stats) {
132
- var _clientStats$compilat, _clientStats$compilat2, _serverStats$compilat, _serverStats$compilat2;
112
+ function getServerBundle(serverStats) {
113
+ var _serverJson$outputPat;
133
114
 
134
- const [clientStats, serverStats] = stats;
115
+ const serverJson = serverStats.toJson({
116
+ assets: true
117
+ });
118
+ return _path.default.join((_serverJson$outputPat = serverJson.outputPath) != null ? _serverJson$outputPat : '', 'server.js');
119
+ }
135
120
 
136
- if (clientStats !== null && clientStats !== void 0 && (_clientStats$compilat = clientStats.compilation) !== null && _clientStats$compilat !== void 0 && (_clientStats$compilat2 = _clientStats$compilat.errors) !== null && _clientStats$compilat2 !== void 0 && _clientStats$compilat2.length || serverStats !== null && serverStats !== void 0 && (_serverStats$compilat = serverStats.compilation) !== null && _serverStats$compilat !== void 0 && (_serverStats$compilat2 = _serverStats$compilat.errors) !== null && _serverStats$compilat2 !== void 0 && _serverStats$compilat2.length) {
137
- log.error('Errors for client build: ' + clientStats.compilation.errors);
138
- log.error('Errors for server build: ' + serverStats.compilation.errors); // TODO: handle more gracefully
121
+ function handleErrors(fn) {
122
+ return async function (req, res, next) {
123
+ try {
124
+ return await fn(req, res);
125
+ } catch (x) {
126
+ next(x);
127
+ }
128
+ };
129
+ }
139
130
 
140
- process.exit(-1);
141
- } else {
142
- log.info('Launching SSR');
143
- } // ASSETS
131
+ const initRender = [];
144
132
 
133
+ let render = (...args) => new Promise(resolve => {
134
+ initRender.push({
135
+ args,
136
+ resolve
137
+ });
138
+ });
145
139
 
146
- const clientManifest = clientStats.toJson(); // SERVER SIDE ENTRYPOINT
140
+ function importRender(stats) {
141
+ var _clientStats$compilat, _clientStats$compilat2, _serverStats$compilat, _serverStats$compilat2;
147
142
 
148
- if (Array.isArray(initRender)) {
149
- // eslint-disable-next-line @typescript-eslint/no-var-requires
150
- render = require(getServerBundle(serverStats)).default.bind(undefined, clientManifest);
151
- initRender.forEach(init => render(...init.args).then(init.resolve));
152
- } else {
153
- render = (0, _importFresh.default)(getServerBundle(serverStats)).default.bind(undefined, clientManifest);
154
- }
155
- }
143
+ const [clientStats, serverStats] = stats;
156
144
 
157
- const devServer = new _webpackDevServer.default( // write to memory filesystem so we can import
158
- { ...webpackConfigs[0].devServer,
145
+ if (clientStats !== null && clientStats !== void 0 && (_clientStats$compilat = clientStats.compilation) !== null && _clientStats$compilat !== void 0 && (_clientStats$compilat2 = _clientStats$compilat.errors) !== null && _clientStats$compilat2 !== void 0 && _clientStats$compilat2.length || serverStats !== null && serverStats !== void 0 && (_serverStats$compilat = serverStats.compilation) !== null && _serverStats$compilat !== void 0 && (_serverStats$compilat2 = _serverStats$compilat.errors) !== null && _serverStats$compilat2 !== void 0 && _serverStats$compilat2.length) {
146
+ log.error('Errors for client build: ' + clientStats.compilation.errors);
147
+ log.error('Errors for server build: ' + serverStats.compilation.errors); // TODO: handle more gracefully
148
+
149
+ process.exit(-1);
150
+ } else {
151
+ log.info('Launching SSR');
152
+ } // ASSETS
159
153
 
160
- /*client: {
161
- ...webpackConfigs[0].devServer?.client,
162
- webSocketURL: {
163
- ...webpackConfigs[0].devServer?.client.webSocketURL,
164
- port: 8080,
165
- },
166
- },*/
167
- devMiddleware: { ...((_webpackConfigs$ = webpackConfigs[0]) === null || _webpackConfigs$ === void 0 ? void 0 : (_webpackConfigs$$devS = _webpackConfigs$.devServer) === null || _webpackConfigs$$devS === void 0 ? void 0 : _webpackConfigs$$devS.devMiddleware),
168
- outputFileSystem: { ...fs,
169
- join: _path.default.join
170
- }
171
- },
172
- setupMiddlewares: (middlewares, devServer) => {
173
- var _devServer$app;
174
154
 
175
- if (!devServer) {
176
- throw new Error('webpack-dev-server is not defined');
177
- } // serve SSR for non-WEBPACK_PUBLIC_PATH
155
+ const clientManifest = clientStats.toJson(); // SERVER SIDE ENTRYPOINT
178
156
 
157
+ if (Array.isArray(initRender)) {
158
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
159
+ render = require(getServerBundle(serverStats)).default.bind(undefined, clientManifest);
160
+ initRender.forEach(init => render(...init.args).then(init.resolve));
161
+ } else {
162
+ render = (0, _importFresh.default)(getServerBundle(serverStats)).default.bind(undefined, clientManifest);
163
+ }
164
+ }
179
165
 
180
- (_devServer$app = devServer.app) === null || _devServer$app === void 0 ? void 0 : _devServer$app.get(new RegExp(`^(?!${process.env.WEBPACK_PUBLIC_PATH})`), handleErrors(async function (req, res) {
181
- if (req.url.endsWith('favicon.ico')) {
182
- res.statusCode = 404;
183
- res.setHeader('Content-type', 'text/html');
184
- res.send('not found');
185
- return;
166
+ const devServer = new _webpackDevServer.default( // write to memory filesystem so we can import
167
+ { ...webpackConfigs[0].devServer,
168
+
169
+ /*client: {
170
+ ...webpackConfigs[0].devServer?.client,
171
+ webSocketURL: {
172
+ ...webpackConfigs[0].devServer?.client.webSocketURL,
173
+ port: 8080,
174
+ },
175
+ },*/
176
+ devMiddleware: { ...((_webpackConfigs$ = webpackConfigs[0]) === null || _webpackConfigs$ === void 0 ? void 0 : (_webpackConfigs$$devS = _webpackConfigs$.devServer) === null || _webpackConfigs$$devS === void 0 ? void 0 : _webpackConfigs$$devS.devMiddleware),
177
+ outputFileSystem: { ...fs,
178
+ join: _path.default.join
186
179
  }
180
+ },
181
+ setupMiddlewares: (middlewares, devServer) => {
182
+ var _webpackConfigs$0$dev, _webpackConfigs$0$dev2, _devServer$app;
187
183
 
188
- res.socket.on('error', error => {
189
- console.error('Fatal', error);
190
- });
191
- await render(req, res);
192
- }));
193
- return middlewares;
194
- }
195
- }, compiler);
184
+ if (!devServer) {
185
+ throw new Error('webpack-dev-server is not defined');
186
+ }
196
187
 
197
- const runServer = async () => {
198
- await devServer.start();
199
- devServer.compiler.hooks.done.tap('Anansi Server', multiStats => {
200
- if (!multiStats) {
201
- log.error('stats not send');
202
- process.exit(-1);
188
+ const otherRoutes = [process.env.WEBPACK_PUBLIC_PATH, ...Object.keys((_webpackConfigs$0$dev = (_webpackConfigs$0$dev2 = webpackConfigs[0].devServer) === null || _webpackConfigs$0$dev2 === void 0 ? void 0 : _webpackConfigs$0$dev2.proxy) != null ? _webpackConfigs$0$dev : {})]; // serve SSR for non-WEBPACK_PUBLIC_PATH
189
+
190
+ (_devServer$app = devServer.app) === null || _devServer$app === void 0 ? void 0 : _devServer$app.get(new RegExp(`^(?!${otherRoutes.join('|')})`), handleErrors(async function (req, res) {
191
+ if (req.url.endsWith('favicon.ico')) {
192
+ res.statusCode = 404;
193
+ res.setHeader('Content-type', 'text/html');
194
+ res.send('not found');
195
+ return;
196
+ }
197
+
198
+ res.socket.on('error', error => {
199
+ console.error('Fatal', error);
200
+ });
201
+ await render(req, res);
202
+ }));
203
+ return middlewares;
203
204
  }
205
+ }, compiler);
206
+
207
+ const runServer = async () => {
208
+ await devServer.start();
209
+ devServer.compiler.hooks.done.tap('Anansi Server', multiStats => {
210
+ if (!multiStats) {
211
+ log.error('stats not send');
212
+ process.exit(-1);
213
+ }
204
214
 
205
- if (!Object.hasOwn(multiStats, 'stats')) return;
206
-
207
- if (multiStats.stats.length > 1) {
208
- try {
209
- importRender(multiStats.stats);
210
- } catch (e) {
211
- log.error('Failed to load serve entrypoint');
212
- throw e;
215
+ if (!Object.hasOwn(multiStats, 'stats')) return;
216
+
217
+ if (multiStats.stats.length > 1) {
218
+ try {
219
+ importRender(multiStats.stats);
220
+ } catch (e) {
221
+ log.error('Failed to load serve entrypoint');
222
+ throw e;
223
+ }
224
+ } else {
225
+ log.error('Only compiler one stat');
213
226
  }
214
- } else {
215
- log.error('Only compiler one stat');
216
- }
227
+ });
228
+ };
229
+
230
+ const stopServer = async () => {
231
+ log.info('Stopping server...');
232
+ await devServer.stop();
233
+ log.info('Server closed');
234
+ };
235
+
236
+ process.on('SIGINT', () => {
237
+ log.warn('Received SIGINT, devserver shutting down');
238
+ stopServer();
239
+ process.exit(-1);
217
240
  });
218
- };
219
-
220
- const stopServer = async () => {
221
- log.info('Stopping server...');
222
- await devServer.stop();
223
- log.info('Server closed');
224
- };
225
-
226
- process.on('SIGINT', () => {
227
- log.warn('Received SIGINT, devserver shutting down');
228
- stopServer();
229
- process.exit(-1);
230
- });
231
- runServer();
232
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3ZWJwYWNrQ29uZmlnIiwicmVxdWlyZSIsInJlc29sdmUiLCJwYXRoIiwiam9pbiIsInByb2Nlc3MiLCJjd2QiLCJlbnRyeXBvaW50IiwiYXJndiIsImVudiIsIldFQlBBQ0tfUFVCTElDX1BBVEgiLCJjb25zb2xlIiwibG9nIiwiZXhpdCIsImxvZ2dpbmciLCJnZXRMb2dnZXIiLCJ2b2x1bWUiLCJWb2x1bWUiLCJmcyIsImNyZWF0ZUZzRnJvbVZvbHVtZSIsInVmcyIsInVzZSIsImRpc2tGcyIsInBhdGNoUmVxdWlyZSIsInJlYWRGaWxlIiwicHJvbWlzaWZ5Iiwic2VydmVyIiwiaG90RW50cnkiLCJlbnRyeVBhdGgiLCJnZW5lcmF0ZWRFbnRyeXBvaW50IiwidG1wIiwiZmlsZVN5bmMiLCJwb3N0Zml4Iiwid3JpdGVTeW5jIiwiZmQiLCJ3ZWJwYWNrQ29uZmlncyIsImVudHJ5cGF0aCIsIm5hbWUiLCJtb2RlIiwicmVwbGFjZSIsIkJST1dTRVJTTElTVF9FTlYiLCJ0YXJnZXQiLCJwbHVnaW5zIiwicHVzaCIsIndlYnBhY2siLCJvcHRpbWl6ZSIsIkxpbWl0Q2h1bmtDb3VudFBsdWdpbiIsIm1heENodW5rcyIsImNvbXBpbGVyIiwic291cmNlTWFwU3VwcG9ydCIsImluc3RhbGwiLCJob29rUmVxdWlyZSIsImdldFNlcnZlckJ1bmRsZSIsInNlcnZlclN0YXRzIiwic2VydmVySnNvbiIsInRvSnNvbiIsImFzc2V0cyIsIm91dHB1dFBhdGgiLCJoYW5kbGVFcnJvcnMiLCJmbiIsInJlcSIsInJlcyIsIm5leHQiLCJ4IiwiaW5pdFJlbmRlciIsInJlbmRlciIsImFyZ3MiLCJQcm9taXNlIiwiaW1wb3J0UmVuZGVyIiwic3RhdHMiLCJjbGllbnRTdGF0cyIsImNvbXBpbGF0aW9uIiwiZXJyb3JzIiwibGVuZ3RoIiwiZXJyb3IiLCJpbmZvIiwiY2xpZW50TWFuaWZlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJkZWZhdWx0IiwiYmluZCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJpbml0IiwidGhlbiIsImltcG9ydEZyZXNoIiwiZGV2U2VydmVyIiwiV2VicGFja0RldlNlcnZlciIsImRldk1pZGRsZXdhcmUiLCJvdXRwdXRGaWxlU3lzdGVtIiwic2V0dXBNaWRkbGV3YXJlcyIsIm1pZGRsZXdhcmVzIiwiRXJyb3IiLCJhcHAiLCJnZXQiLCJSZWdFeHAiLCJ1cmwiLCJlbmRzV2l0aCIsInN0YXR1c0NvZGUiLCJzZXRIZWFkZXIiLCJzZW5kIiwic29ja2V0Iiwib24iLCJydW5TZXJ2ZXIiLCJzdGFydCIsImhvb2tzIiwiZG9uZSIsInRhcCIsIm11bHRpU3RhdHMiLCJPYmplY3QiLCJoYXNPd24iLCJlIiwic3RvcFNlcnZlciIsInN0b3AiLCJ3YXJuIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvc3RhcnREZXZzZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcbmltcG9ydCBkaXNrRnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgd2VicGFjaywgeyBNdWx0aUNvbXBpbGVyIH0gZnJvbSAnd2VicGFjayc7XG5pbXBvcnQgeyBjcmVhdGVGc0Zyb21Wb2x1bWUsIFZvbHVtZSB9IGZyb20gJ21lbWZzJztcbmltcG9ydCB7IFNlcnZlciwgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHR5cGUgeyBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IHBhdGNoUmVxdWlyZSB9IGZyb20gJ2ZzLW1vbmtleSc7XG5pbXBvcnQgdG1wIGZyb20gJ3RtcCc7XG5pbXBvcnQgc291cmNlTWFwU3VwcG9ydCBmcm9tICdzb3VyY2UtbWFwLXN1cHBvcnQnO1xuaW1wb3J0IHsgdWZzIH0gZnJvbSAndW5pb25mcyc7XG5pbXBvcnQgV2VicGFja0RldlNlcnZlciBmcm9tICd3ZWJwYWNrLWRldi1zZXJ2ZXInO1xuaW1wb3J0IGltcG9ydEZyZXNoIGZyb20gJ2ltcG9ydC1mcmVzaCc7XG5pbXBvcnQgbG9nZ2luZyBmcm9tICd3ZWJwYWNrL2xpYi9sb2dnaW5nL3J1bnRpbWUnO1xuXG5pbXBvcnQgJ2Nyb3NzLWZldGNoL3BvbHlmaWxsJztcbmltcG9ydCB7IEJvdW5kUmVuZGVyIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCB3ZWJwYWNrQ29uZmlnID0gcmVxdWlyZShyZXF1aXJlLnJlc29sdmUoXG4gIC8vIFRPRE86IHVzZSBub3JtYWwgcmVzb2x1dGlvbiBhbGdvcml0aG0gdG8gZmluZCB3ZWJwYWNrIGZpbGVcbiAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZycpLFxuKSk7XG5cbmNvbnN0IGVudHJ5cG9pbnQgPSBwcm9jZXNzLmFyZ3ZbMl07XG4vL3Byb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX0hPU1QgPSBgaHR0cDovL2xvY2FsaG9zdDoke1BPUlR9YDsgdGhpcyBicmVha3MgY29tcGF0aWJpbGl0eSB3aXRoIHN0YWNrYmxpdHpcbnByb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggPSAnL2Fzc2V0cy8nO1xuXG5pZiAoIWVudHJ5cG9pbnQpIHtcbiAgY29uc29sZS5sb2coYFVzYWdlOiBzdGFydC1hbmFuc2kgPGVudHJ5cG9pbnQtZmlsZT5gKTtcbiAgcHJvY2Vzcy5leGl0KC0xKTtcbn1cblxuY29uc3QgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2FuYW5zaS1kZXZzZXJ2ZXInKTtcblxuLy8gU2V0IHVwIGluIG1lbW9yeSBmaWxlc3lzdGVtXG5jb25zdCB2b2x1bWUgPSBuZXcgVm9sdW1lKCk7XG5jb25zdCBmcyA9IGNyZWF0ZUZzRnJvbVZvbHVtZSh2b2x1bWUpO1xudWZzLnVzZShkaXNrRnMpLnVzZShmcyBhcyBhbnkpO1xuXG5wYXRjaFJlcXVpcmUodWZzKTtcbmNvbnN0IHJlYWRGaWxlID0gcHJvbWlzaWZ5KHVmcy5yZWFkRmlsZSk7XG5sZXQgc2VydmVyOiBTZXJ2ZXIgfCB1bmRlZmluZWQ7XG5cbi8vIEdlbmVyYXRlIGEgdGVtcG9yYXJ5IGZpbGUgc28gd2UgY2FuIGhvdCByZWxvYWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgYXBwbGljYXRpb25cbmZ1bmN0aW9uIGhvdEVudHJ5KGVudHJ5UGF0aDogc3RyaW5nKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAvLyBAdHMtaWdub3JlIGZvciBzb21lIHJlYXNvbiBpdCdzIG5vdCBwaWNraW5nIHVwIHRoYXQgb3RoZXIgb3B0aW9ucyBhcmUgb3B0aW9uYWxcbiAgY29uc3QgZ2VuZXJhdGVkRW50cnlwb2ludCA9IHRtcC5maWxlU3luYyh7IHBvc3RmaXg6ICcuanMnIH0pO1xuICBkaXNrRnMud3JpdGVTeW5jKFxuICAgIGdlbmVyYXRlZEVudHJ5cG9pbnQuZmQsXG4gICAgYFxuaW1wb3J0IGVudHJ5IGZyb20gXCIke3BhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBlbnRyeVBhdGgpfVwiO1xuXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlbnRyeTtcbiAgYCxcbiAgKTtcbiAgcmV0dXJuIGdlbmVyYXRlZEVudHJ5cG9pbnQ7XG59XG5cbmNvbnN0IHdlYnBhY2tDb25maWdzID0gW1xuICB3ZWJwYWNrQ29uZmlnKFxuICAgIHtcbiAgICAgIGVudHJ5cGF0aDogaG90RW50cnkoZW50cnlwb2ludCkubmFtZSxcbiAgICAgIG5hbWU6ICdjbGllbnQnLFxuICAgIH0sXG4gICAgeyBtb2RlOiAnZGV2ZWxvcG1lbnQnIH0sXG4gICksXG4gIHdlYnBhY2tDb25maWcoXG4gICAge1xuICAgICAgZW50cnlwYXRoOiBlbnRyeXBvaW50LnJlcGxhY2UoJy50c3gnLCAnLnNlcnZlci50c3gnKSxcbiAgICAgIG5hbWU6ICdzZXJ2ZXInLFxuICAgICAgQlJPV1NFUlNMSVNUX0VOVjogJ2N1cnJlbnQgbm9kZScsXG4gICAgfSxcbiAgICB7IG1vZGU6ICdkZXZlbG9wbWVudCcsIHRhcmdldDogJ25vZGUnIH0sXG4gICksXG5dIGFzIGNvbnN0O1xuLy8gb25seSBoYXZlIG9uZSBvdXRwdXQgZm9yIHNlcnZlciBzbyB3ZSBjYW4gYXZvaWQgY2FjaGVkIG1vZHVsZXNcbndlYnBhY2tDb25maWdzWzFdLnBsdWdpbnMucHVzaChcbiAgbmV3IHdlYnBhY2sub3B0aW1pemUuTGltaXRDaHVua0NvdW50UGx1Z2luKHsgbWF4Q2h1bmtzOiAxIH0pLFxuKTtcbi8vIGluaXRpYWxpemUgdGhlIHdlYnBhY2sgY29tcGlsZXJcbmNvbnN0IGNvbXBpbGVyOiBNdWx0aUNvbXBpbGVyID0gd2VicGFjayh3ZWJwYWNrQ29uZmlncyk7XG5cbnNvdXJjZU1hcFN1cHBvcnQuaW5zdGFsbCh7IGhvb2tSZXF1aXJlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBnZXRTZXJ2ZXJCdW5kbGUoc2VydmVyU3RhdHM6IHdlYnBhY2suU3RhdHMpIHtcbiAgY29uc3Qgc2VydmVySnNvbiA9IHNlcnZlclN0YXRzLnRvSnNvbih7IGFzc2V0czogdHJ1ZSB9KTtcbiAgcmV0dXJuIHBhdGguam9pbihzZXJ2ZXJKc29uLm91dHB1dFBhdGggPz8gJycsICdzZXJ2ZXIuanMnKTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUVycm9yczxcbiAgRiBleHRlbmRzIChcbiAgICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2UsXG4gICAgcmVzOiBSZXNwb25zZSB8IFNlcnZlclJlc3BvbnNlLFxuICApID0+IFByb21pc2U8dm9pZD4sXG4+KGZuOiBGKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoXG4gICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4gICkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZm4ocmVxLCByZXMpO1xuICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgIG5leHQoeCk7XG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBpbml0UmVuZGVyOlxuICB8IHsgYXJnczogUGFyYW1ldGVyczxCb3VuZFJlbmRlcj47IHJlc29sdmU6ICgpID0+IHZvaWQgfVtdXG4gIHwgdW5kZWZpbmVkID0gW107XG5sZXQgcmVuZGVyOiBCb3VuZFJlbmRlciA9ICguLi5hcmdzKSA9PlxuICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBpbml0UmVuZGVyLnB1c2goeyBhcmdzLCByZXNvbHZlIH0pO1xuICB9KTtcblxuZnVuY3Rpb24gaW1wb3J0UmVuZGVyKHN0YXRzOiB3ZWJwYWNrLlN0YXRzW10pIHtcbiAgY29uc3QgW2NsaWVudFN0YXRzLCBzZXJ2ZXJTdGF0c10gPSBzdGF0cztcbiAgaWYgKFxuICAgIGNsaWVudFN0YXRzPy5jb21waWxhdGlvbj8uZXJyb3JzPy5sZW5ndGggfHxcbiAgICBzZXJ2ZXJTdGF0cz8uY29tcGlsYXRpb24/LmVycm9ycz8ubGVuZ3RoXG4gICkge1xuICAgIGxvZy5lcnJvcignRXJyb3JzIGZvciBjbGllbnQgYnVpbGQ6ICcgKyBjbGllbnRTdGF0cy5jb21waWxhdGlvbi5lcnJvcnMpO1xuICAgIGxvZy5lcnJvcignRXJyb3JzIGZvciBzZXJ2ZXIgYnVpbGQ6ICcgKyBzZXJ2ZXJTdGF0cy5jb21waWxhdGlvbi5lcnJvcnMpO1xuICAgIC8vIFRPRE86IGhhbmRsZSBtb3JlIGdyYWNlZnVsbHlcbiAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKCdMYXVuY2hpbmcgU1NSJyk7XG4gIH1cblxuICAvLyBBU1NFVFNcbiAgY29uc3QgY2xpZW50TWFuaWZlc3QgPSBjbGllbnRTdGF0cy50b0pzb24oKTtcblxuICAvLyBTRVJWRVIgU0lERSBFTlRSWVBPSU5UXG4gIGlmIChBcnJheS5pc0FycmF5KGluaXRSZW5kZXIpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICByZW5kZXIgPSAocmVxdWlyZShnZXRTZXJ2ZXJCdW5kbGUoc2VydmVyU3RhdHMpKSBhcyBhbnkpLmRlZmF1bHQuYmluZChcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsaWVudE1hbmlmZXN0LFxuICAgICk7XG4gICAgaW5pdFJlbmRlci5mb3JFYWNoKGluaXQgPT4gcmVuZGVyKC4uLmluaXQuYXJncykudGhlbihpbml0LnJlc29sdmUpKTtcbiAgfSBlbHNlIHtcbiAgICByZW5kZXIgPSAoaW1wb3J0RnJlc2goZ2V0U2VydmVyQnVuZGxlKHNlcnZlclN0YXRzKSkgYXMgYW55KS5kZWZhdWx0LmJpbmQoXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGllbnRNYW5pZmVzdCxcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IGRldlNlcnZlciA9IG5ldyBXZWJwYWNrRGV2U2VydmVyKFxuICAvLyB3cml0ZSB0byBtZW1vcnkgZmlsZXN5c3RlbSBzbyB3ZSBjYW4gaW1wb3J0XG4gIHtcbiAgICAuLi53ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXIsXG4gICAgLypjbGllbnQ6IHtcbiAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdLmRldlNlcnZlcj8uY2xpZW50LFxuICAgICAgd2ViU29ja2V0VVJMOiB7XG4gICAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdLmRldlNlcnZlcj8uY2xpZW50LndlYlNvY2tldFVSTCxcbiAgICAgICAgcG9ydDogODA4MCxcbiAgICAgIH0sXG4gICAgfSwqL1xuICAgIGRldk1pZGRsZXdhcmU6IHtcbiAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdPy5kZXZTZXJ2ZXI/LmRldk1pZGRsZXdhcmUsXG4gICAgICBvdXRwdXRGaWxlU3lzdGVtOiB7XG4gICAgICAgIC4uLmZzLFxuICAgICAgICBqb2luOiBwYXRoLmpvaW4gYXMgYW55LFxuICAgICAgfSBhcyBhbnkgYXMgdHlwZW9mIGZzLFxuICAgIH0sXG4gICAgc2V0dXBNaWRkbGV3YXJlczogKG1pZGRsZXdhcmVzLCBkZXZTZXJ2ZXIpID0+IHtcbiAgICAgIGlmICghZGV2U2VydmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignd2VicGFjay1kZXYtc2VydmVyIGlzIG5vdCBkZWZpbmVkJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNlcnZlIFNTUiBmb3Igbm9uLVdFQlBBQ0tfUFVCTElDX1BBVEhcbiAgICAgIGRldlNlcnZlci5hcHA/LmdldChcbiAgICAgICAgbmV3IFJlZ0V4cChgXig/ISR7cHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSH0pYCksXG4gICAgICAgIGhhbmRsZUVycm9ycyhhc3luYyBmdW5jdGlvbiAocmVxOiBhbnksIHJlczogYW55KSB7XG4gICAgICAgICAgaWYgKHJlcS51cmwuZW5kc1dpdGgoJ2Zhdmljb24uaWNvJykpIHtcbiAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICAgICAgcmVzLnNlbmQoJ25vdCBmb3VuZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXMuc29ja2V0Lm9uKCdlcnJvcicsIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmF0YWwnLCBlcnJvcik7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhd2FpdCByZW5kZXIocmVxLCByZXMpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBtaWRkbGV3YXJlcztcbiAgICB9LFxuICB9LFxuICBjb21waWxlcixcbik7XG5jb25zdCBydW5TZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gIGF3YWl0IGRldlNlcnZlci5zdGFydCgpO1xuICBkZXZTZXJ2ZXIuY29tcGlsZXIuaG9va3MuZG9uZS50YXAoXG4gICAgJ0FuYW5zaSBTZXJ2ZXInLFxuICAgIChtdWx0aVN0YXRzOiB3ZWJwYWNrLk11bHRpU3RhdHMgfCB3ZWJwYWNrLlN0YXRzKSA9PiB7XG4gICAgICBpZiAoIW11bHRpU3RhdHMpIHtcbiAgICAgICAgbG9nLmVycm9yKCdzdGF0cyBub3Qgc2VuZCcpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24obXVsdGlTdGF0cywgJ3N0YXRzJykpIHJldHVybjtcbiAgICAgIGlmICgobXVsdGlTdGF0cyBhcyB3ZWJwYWNrLk11bHRpU3RhdHMpLnN0YXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbXBvcnRSZW5kZXIoKG11bHRpU3RhdHMgYXMgd2VicGFjay5NdWx0aVN0YXRzKS5zdGF0cyk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGxvZy5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VydmUgZW50cnlwb2ludCcpO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5lcnJvcignT25seSBjb21waWxlciBvbmUgc3RhdCcpO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG59O1xuY29uc3Qgc3RvcFNlcnZlciA9IGFzeW5jICgpID0+IHtcbiAgbG9nLmluZm8oJ1N0b3BwaW5nIHNlcnZlci4uLicpO1xuICBhd2FpdCBkZXZTZXJ2ZXIuc3RvcCgpO1xuICBsb2cuaW5mbygnU2VydmVyIGNsb3NlZCcpO1xufTtcblxucHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICBsb2cud2FybignUmVjZWl2ZWQgU0lHSU5ULCBkZXZzZXJ2ZXIgc2h1dHRpbmcgZG93bicpO1xuICBzdG9wU2VydmVyKCk7XG4g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
241
+ runServer();
242
+ }
243
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSIsImVudHJ5cG9pbnQiLCJwcm9jZXNzIiwiYXJndiIsImVudiIsIldFQlBBQ0tfUFVCTElDX1BBVEgiLCJjb25zb2xlIiwibG9nIiwiZXhpdCIsInN0YXJ0RGV2U2VydmVyIiwid2VicGFja0NvbmZpZyIsInJlc29sdmUiLCJwYXRoIiwiam9pbiIsImN3ZCIsImxvZ2dpbmciLCJnZXRMb2dnZXIiLCJ2b2x1bWUiLCJWb2x1bWUiLCJmcyIsImNyZWF0ZUZzRnJvbVZvbHVtZSIsInVmcyIsInVzZSIsImRpc2tGcyIsInBhdGNoUmVxdWlyZSIsInJlYWRGaWxlIiwicHJvbWlzaWZ5Iiwic2VydmVyIiwiaG90RW50cnkiLCJlbnRyeVBhdGgiLCJnZW5lcmF0ZWRFbnRyeXBvaW50IiwidG1wIiwiZmlsZVN5bmMiLCJwb3N0Zml4Iiwid3JpdGVTeW5jIiwiZmQiLCJ3ZWJwYWNrQ29uZmlncyIsImVudHJ5cGF0aCIsIm5hbWUiLCJtb2RlIiwicmVwbGFjZSIsIkJST1dTRVJTTElTVF9FTlYiLCJ0YXJnZXQiLCJwbHVnaW5zIiwicHVzaCIsIndlYnBhY2siLCJvcHRpbWl6ZSIsIkxpbWl0Q2h1bmtDb3VudFBsdWdpbiIsIm1heENodW5rcyIsImNvbXBpbGVyIiwic291cmNlTWFwU3VwcG9ydCIsImluc3RhbGwiLCJob29rUmVxdWlyZSIsImdldFNlcnZlckJ1bmRsZSIsInNlcnZlclN0YXRzIiwic2VydmVySnNvbiIsInRvSnNvbiIsImFzc2V0cyIsIm91dHB1dFBhdGgiLCJoYW5kbGVFcnJvcnMiLCJmbiIsInJlcSIsInJlcyIsIm5leHQiLCJ4IiwiaW5pdFJlbmRlciIsInJlbmRlciIsImFyZ3MiLCJQcm9taXNlIiwiaW1wb3J0UmVuZGVyIiwic3RhdHMiLCJjbGllbnRTdGF0cyIsImNvbXBpbGF0aW9uIiwiZXJyb3JzIiwibGVuZ3RoIiwiZXJyb3IiLCJpbmZvIiwiY2xpZW50TWFuaWZlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJkZWZhdWx0IiwiYmluZCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJpbml0IiwidGhlbiIsImltcG9ydEZyZXNoIiwiZGV2U2VydmVyIiwiV2VicGFja0RldlNlcnZlciIsImRldk1pZGRsZXdhcmUiLCJvdXRwdXRGaWxlU3lzdGVtIiwic2V0dXBNaWRkbGV3YXJlcyIsIm1pZGRsZXdhcmVzIiwiRXJyb3IiLCJvdGhlclJvdXRlcyIsIk9iamVjdCIsImtleXMiLCJwcm94eSIsImFwcCIsImdldCIsIlJlZ0V4cCIsInVybCIsImVuZHNXaXRoIiwic3RhdHVzQ29kZSIsInNldEhlYWRlciIsInNlbmQiLCJzb2NrZXQiLCJvbiIsInJ1blNlcnZlciIsInN0YXJ0IiwiaG9va3MiLCJkb25lIiwidGFwIiwibXVsdGlTdGF0cyIsImhhc093biIsImUiLCJzdG9wU2VydmVyIiwic3RvcCIsIndhcm4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9zdGFydERldnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IGRpc2tGcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB3ZWJwYWNrLCB7IE11bHRpQ29tcGlsZXIgfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCB7IGNyZWF0ZUZzRnJvbVZvbHVtZSwgVm9sdW1lIH0gZnJvbSAnbWVtZnMnO1xuaW1wb3J0IHsgU2VydmVyLCBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgdHlwZSB7IE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgcGF0Y2hSZXF1aXJlIH0gZnJvbSAnZnMtbW9ua2V5JztcbmltcG9ydCB0bXAgZnJvbSAndG1wJztcbmltcG9ydCBzb3VyY2VNYXBTdXBwb3J0IGZyb20gJ3NvdXJjZS1tYXAtc3VwcG9ydCc7XG5pbXBvcnQgeyB1ZnMgfSBmcm9tICd1bmlvbmZzJztcbmltcG9ydCBXZWJwYWNrRGV2U2VydmVyIGZyb20gJ3dlYnBhY2stZGV2LXNlcnZlcic7XG5pbXBvcnQgaW1wb3J0RnJlc2ggZnJvbSAnaW1wb3J0LWZyZXNoJztcbmltcG9ydCBsb2dnaW5nIGZyb20gJ3dlYnBhY2svbGliL2xvZ2dpbmcvcnVudGltZSc7XG5cbmltcG9ydCAnY3Jvc3MtZmV0Y2gvcG9seWZpbGwnO1xuaW1wb3J0IHsgQm91bmRSZW5kZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gcnVuIGRpcmVjdGx5IGZyb20gbm9kZVxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGNvbnN0IGVudHJ5cG9pbnQgPSBwcm9jZXNzLmFyZ3ZbMl07XG4gIC8vcHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfSE9TVCA9IGBodHRwOi8vbG9jYWxob3N0OiR7UE9SVH1gOyB0aGlzIGJyZWFrcyBjb21wYXRpYmlsaXR5IHdpdGggc3RhY2tibGl0elxuICBwcm9jZXNzLmVudi5XRUJQQUNLX1BVQkxJQ19QQVRIID0gJy9hc3NldHMvJztcblxuICBpZiAoIWVudHJ5cG9pbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgVXNhZ2U6IHN0YXJ0LWFuYW5zaSA8ZW50cnlwb2ludC1maWxlPmApO1xuICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gIH1cblxuICBzdGFydERldlNlcnZlcihlbnRyeXBvaW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnREZXZTZXJ2ZXIoXG4gIGVudHJ5cG9pbnQ6IHN0cmluZyxcbiAgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9LFxuKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIGNvbnN0IHdlYnBhY2tDb25maWcgPSByZXF1aXJlKHJlcXVpcmUucmVzb2x2ZShcbiAgICAvLyBUT0RPOiB1c2Ugbm9ybWFsIHJlc29sdXRpb24gYWxnb3JpdGhtIHRvIGZpbmQgd2VicGFjayBmaWxlXG4gICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZycpLFxuICApKTtcblxuICBjb25zdCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignYW5hbnNpLWRldnNlcnZlcicpO1xuXG4gIC8vIFNldCB1cCBpbiBtZW1vcnkgZmlsZXN5c3RlbVxuICBjb25zdCB2b2x1bWUgPSBuZXcgVm9sdW1lKCk7XG4gIGNvbnN0IGZzID0gY3JlYXRlRnNGcm9tVm9sdW1lKHZvbHVtZSk7XG4gIHVmcy51c2UoZGlza0ZzKS51c2UoZnMgYXMgYW55KTtcblxuICBwYXRjaFJlcXVpcmUodWZzKTtcbiAgY29uc3QgcmVhZEZpbGUgPSBwcm9taXNpZnkodWZzLnJlYWRGaWxlKTtcbiAgbGV0IHNlcnZlcjogU2VydmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8vIEdlbmVyYXRlIGEgdGVtcG9yYXJ5IGZpbGUgc28gd2UgY2FuIGhvdCByZWxvYWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgYXBwbGljYXRpb25cbiAgZnVuY3Rpb24gaG90RW50cnkoZW50cnlQYXRoOiBzdHJpbmcpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAvLyBAdHMtaWdub3JlIGZvciBzb21lIHJlYXNvbiBpdCdzIG5vdCBwaWNraW5nIHVwIHRoYXQgb3RoZXIgb3B0aW9ucyBhcmUgb3B0aW9uYWxcbiAgICBjb25zdCBnZW5lcmF0ZWRFbnRyeXBvaW50ID0gdG1wLmZpbGVTeW5jKHsgcG9zdGZpeDogJy5qcycgfSk7XG4gICAgZGlza0ZzLndyaXRlU3luYyhcbiAgICAgIGdlbmVyYXRlZEVudHJ5cG9pbnQuZmQsXG4gICAgICBgXG4gIGltcG9ydCBlbnRyeSBmcm9tIFwiJHtwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZW50cnlQYXRoKX1cIjtcblxuICBpZiAobW9kdWxlLmhvdCkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KCk7XG4gIH1cblxuICBleHBvcnQgZGVmYXVsdCBlbnRyeTtcbiAgICBgLFxuICAgICk7XG4gICAgcmV0dXJuIGdlbmVyYXRlZEVudHJ5cG9pbnQ7XG4gIH1cblxuICBjb25zdCB3ZWJwYWNrQ29uZmlncyA9IFtcbiAgICB3ZWJwYWNrQ29uZmlnKFxuICAgICAge1xuICAgICAgICAuLi5lbnYsXG4gICAgICAgIGVudHJ5cGF0aDogaG90RW50cnkoZW50cnlwb2ludCkubmFtZSxcbiAgICAgICAgbmFtZTogJ2NsaWVudCcsXG4gICAgICB9LFxuICAgICAgeyBtb2RlOiAnZGV2ZWxvcG1lbnQnIH0sXG4gICAgKSxcbiAgICB3ZWJwYWNrQ29uZmlnKFxuICAgICAge1xuICAgICAgICAuLi5lbnYsXG4gICAgICAgIGVudHJ5cGF0aDogZW50cnlwb2ludC5yZXBsYWNlKCcudHN4JywgJy5zZXJ2ZXIudHN4JyksXG4gICAgICAgIG5hbWU6ICdzZXJ2ZXInLFxuICAgICAgICBCUk9XU0VSU0xJU1RfRU5WOiAnY3VycmVudCBub2RlJyxcbiAgICAgIH0sXG4gICAgICB7IG1vZGU6ICdkZXZlbG9wbWVudCcsIHRhcmdldDogJ25vZGUnIH0sXG4gICAgKSxcbiAgXSBhcyBjb25zdDtcbiAgLy8gb25seSBoYXZlIG9uZSBvdXRwdXQgZm9yIHNlcnZlciBzbyB3ZSBjYW4gYXZvaWQgY2FjaGVkIG1vZHVsZXNcbiAgd2VicGFja0NvbmZpZ3NbMV0ucGx1Z2lucy5wdXNoKFxuICAgIG5ldyB3ZWJwYWNrLm9wdGltaXplLkxpbWl0Q2h1bmtDb3VudFBsdWdpbih7IG1heENodW5rczogMSB9KSxcbiAgKTtcbiAgLy8gaW5pdGlhbGl6ZSB0aGUgd2VicGFjayBjb21waWxlclxuICBjb25zdCBjb21waWxlcjogTXVsdGlDb21waWxlciA9IHdlYnBhY2sod2VicGFja0NvbmZpZ3MpO1xuXG4gIHNvdXJjZU1hcFN1cHBvcnQuaW5zdGFsbCh7IGhvb2tSZXF1aXJlOiB0cnVlIH0pO1xuXG4gIGZ1bmN0aW9uIGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0czogd2VicGFjay5TdGF0cykge1xuICAgIGNvbnN0IHNlcnZlckpzb24gPSBzZXJ2ZXJTdGF0cy50b0pzb24oeyBhc3NldHM6IHRydWUgfSk7XG4gICAgcmV0dXJuIHBhdGguam9pbihzZXJ2ZXJKc29uLm91dHB1dFBhdGggPz8gJycsICdzZXJ2ZXIuanMnKTtcbiAgfVxuICBmdW5jdGlvbiBoYW5kbGVFcnJvcnM8XG4gICAgRiBleHRlbmRzIChcbiAgICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICApID0+IFByb21pc2U8dm9pZD4sXG4gID4oZm46IEYpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgICAgcmVzOiBSZXNwb25zZSB8IFNlcnZlclJlc3BvbnNlLFxuICAgICAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKHJlcSwgcmVzKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgbmV4dCh4KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgaW5pdFJlbmRlcjpcbiAgICB8IHsgYXJnczogUGFyYW1ldGVyczxCb3VuZFJlbmRlcj47IHJlc29sdmU6ICgpID0+IHZvaWQgfVtdXG4gICAgfCB1bmRlZmluZWQgPSBbXTtcbiAgbGV0IHJlbmRlcjogQm91bmRSZW5kZXIgPSAoLi4uYXJncykgPT5cbiAgICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGluaXRSZW5kZXIucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSk7XG4gICAgfSk7XG5cbiAgZnVuY3Rpb24gaW1wb3J0UmVuZGVyKHN0YXRzOiB3ZWJwYWNrLlN0YXRzW10pIHtcbiAgICBjb25zdCBbY2xpZW50U3RhdHMsIHNlcnZlclN0YXRzXSA9IHN0YXRzO1xuICAgIGlmIChcbiAgICAgIGNsaWVudFN0YXRzPy5jb21waWxhdGlvbj8uZXJyb3JzPy5sZW5ndGggfHxcbiAgICAgIHNlcnZlclN0YXRzPy5jb21waWxhdGlvbj8uZXJyb3JzPy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZy5lcnJvcignRXJyb3JzIGZvciBjbGllbnQgYnVpbGQ6ICcgKyBjbGllbnRTdGF0cy5jb21waWxhdGlvbi5lcnJvcnMpO1xuICAgICAgbG9nLmVycm9yKCdFcnJvcnMgZm9yIHNlcnZlciBidWlsZDogJyArIHNlcnZlclN0YXRzLmNvbXBpbGF0aW9uLmVycm9ycyk7XG4gICAgICAvLyBUT0RPOiBoYW5kbGUgbW9yZSBncmFjZWZ1bGx5XG4gICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbygnTGF1bmNoaW5nIFNTUicpO1xuICAgIH1cblxuICAgIC8vIEFTU0VUU1xuICAgIGNvbnN0IGNsaWVudE1hbmlmZXN0ID0gY2xpZW50U3RhdHMudG9Kc29uKCk7XG5cbiAgICAvLyBTRVJWRVIgU0lERSBFTlRSWVBPSU5UXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdFJlbmRlcikpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgICByZW5kZXIgPSAocmVxdWlyZShnZXRTZXJ2ZXJCdW5kbGUoc2VydmVyU3RhdHMpKSBhcyBhbnkpLmRlZmF1bHQuYmluZChcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBjbGllbnRNYW5pZmVzdCxcbiAgICAgICk7XG4gICAgICBpbml0UmVuZGVyLmZvckVhY2goaW5pdCA9PiByZW5kZXIoLi4uaW5pdC5hcmdzKS50aGVuKGluaXQucmVzb2x2ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW5kZXIgPSAoaW1wb3J0RnJlc2goZ2V0U2VydmVyQnVuZGxlKHNlcnZlclN0YXRzKSkgYXMgYW55KS5kZWZhdWx0LmJpbmQoXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgY2xpZW50TWFuaWZlc3QsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRldlNlcnZlciA9IG5ldyBXZWJwYWNrRGV2U2VydmVyKFxuICAgIC8vIHdyaXRlIHRvIG1lbW9yeSBmaWxlc3lzdGVtIHNvIHdlIGNhbiBpbXBvcnRcbiAgICB7XG4gICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXIsXG4gICAgICAvKmNsaWVudDoge1xuICAgICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXI/LmNsaWVudCxcbiAgICAgICAgd2ViU29ja2V0VVJMOiB7XG4gICAgICAgICAgLi4ud2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyPy5jbGllbnQud2ViU29ja2V0VVJMLFxuICAgICAgICAgIHBvcnQ6IDgwODAsXG4gICAgICAgIH0sXG4gICAgICB9LCovXG4gICAgICBkZXZNaWRkbGV3YXJlOiB7XG4gICAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdPy5kZXZTZXJ2ZXI/LmRldk1pZGRsZXdhcmUsXG4gICAgICAgIG91dHB1dEZpbGVTeXN0ZW06IHtcbiAgICAgICAgICAuLi5mcyxcbiAgICAgICAgICBqb2luOiBwYXRoLmpvaW4gYXMgYW55LFxuICAgICAgICB9IGFzIGFueSBhcyB0eXBlb2YgZnMsXG4gICAgICB9LFxuICAgICAgc2V0dXBNaWRkbGV3YXJlczogKG1pZGRsZXdhcmVzLCBkZXZTZXJ2ZXIpID0+IHtcbiAgICAgICAgaWYgKCFkZXZTZXJ2ZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dlYnBhY2stZGV2LXNlcnZlciBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3RoZXJSb3V0ZXMgPSBbXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCxcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyh3ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXI/LnByb3h5ID8/IHt9KSxcbiAgICAgICAgXTtcbiAgICAgICAgLy8gc2VydmUgU1NSIGZvciBub24tV0VCUEFDS19QVUJMSUNfUEFUSFxuICAgICAgICBkZXZTZXJ2ZXIuYXBwPy5nZXQoXG4gICAgICAgICAgbmV3IFJlZ0V4cChgXig/ISR7b3RoZXJSb3V0ZXMuam9pbignfCcpfSlgKSxcbiAgICAgICAgICBoYW5kbGVFcnJvcnMoYXN5bmMgZnVuY3Rpb24gKHJlcTogYW55LCByZXM6IGFueSkge1xuICAgICAgICAgICAgaWYgKHJlcS51cmwuZW5kc1dpdGgoJ2Zhdmljb24uaWNvJykpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XG4gICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICAgICAgcmVzLnNlbmQoJ25vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMuc29ja2V0Lm9uKCdlcnJvcicsIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCcsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCByZW5kZXIocmVxLCByZXMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlcztcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21waWxlcixcbiAgKTtcbiAgY29uc3QgcnVuU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRldlNlcnZlci5zdGFydCgpO1xuICAgIGRldlNlcnZlci5jb21waWxlci5ob29rcy5kb25lLnRhcChcbiAgICAgICdBbmFuc2kgU2VydmVyJyxcbiAgICAgIChtdWx0aVN0YXRzOiB3ZWJwYWNrLk11bHRpU3RhdHMgfCB3ZWJwYWNrLlN0YXRzKSA9PiB7XG4gICAgICAgIGlmICghbXVsdGlTdGF0cykge1xuICAgICAgICAgIGxvZy5lcnJvcignc3RhdHMgbm90IHNlbmQnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duKG11bHRpU3RhdHMsICdzdGF0cycpKSByZXR1cm47XG4gICAgICAgIGlmICgobXVsdGlTdGF0cyBhcyB3ZWJwYWNrLk11bHRpU3RhdHMpLnN0YXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW1wb3J0UmVuZGVyKChtdWx0aVN0YXRzIGFzIHdlYnBhY2suTXVsdGlTdGF0cykuc3RhdHMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBzZXJ2ZSBlbnRyeXBvaW50Jyk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2cuZXJyb3IoJ09ubHkgY29tcGlsZXIgb25lIHN0YXQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9O1xuICBjb25zdCBzdG9wU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgIGxvZy5pbmZvKCdTdG9wcGluZyBzZXJ2ZXIuLi4nKTtcbiAgICBhd2FpdCBkZXZTZXJ2ZXIuc3RvcCgpO1xuICAgIGxvZy5pbmZvKCdTZXJ2ZXIgY2xvc2VkJyk7XG4gIH07XG5cbiAgcHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGxvZy53YXJuKCdSZWNlaXZlZCBTSUdJTlQsIGRldnNlcnZlciBzaHV0dGluZyBkb3duJyk7XG4gICAgc3RvcFNlcnZlcigpO1xuICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gIH0pO1xuXG4gIHJ1blNlcnZlcigpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFB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
@@ -0,0 +1,7 @@
1
+ /// <reference types="node" />
2
+ import { ServerResponse, IncomingMessage } from 'http';
3
+ import { StatsCompilation } from 'webpack';
4
+ import { Request, Response } from 'express';
5
+ export declare type Render = (clientManifest: StatsCompilation, req: Request | IncomingMessage, res: Response | ServerResponse) => Promise<void>;
6
+ export declare type BoundRender = (req: Request | IncomingMessage, res: Response | ServerResponse) => Promise<void>;
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scripts/types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C,oBAAY,MAAM,GAAG,CACnB,cAAc,EAAE,gBAAgB,EAChC,GAAG,EAAE,OAAO,GAAG,eAAe,EAC9B,GAAG,EAAE,QAAQ,GAAG,cAAc,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,oBAAY,WAAW,GAAG,CACxB,GAAG,EAAE,OAAO,GAAG,eAAe,EAC9B,GAAG,EAAE,QAAQ,GAAG,cAAc,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /// <reference types="react" />
2
+ declare type Props = {
3
+ children: React.ReactNode;
4
+ assets: {
5
+ href: string;
6
+ as?: string;
7
+ rel?: string;
8
+ }[];
9
+ head: React.ReactNode;
10
+ title: string;
11
+ rootId: string;
12
+ charSet: string;
13
+ };
14
+ declare function Document({ assets, head, children, title, rootId, charSet, }: Props): JSX.Element;
15
+ declare namespace Document {
16
+ var defaultProps: {
17
+ head: JSX.Element;
18
+ charSet: string;
19
+ rootId: string;
20
+ };
21
+ }
22
+ export default Document;
23
+ //# sourceMappingURL=DocumentComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentComponent.d.ts","sourceRoot":"","sources":["../../src/spouts/DocumentComponent.tsx"],"names":[],"mappings":";AAAA,aAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,iBAAwB,QAAQ,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAE,KAAK,eA2BP;kBAlCuB,QAAQ;;;;;;;eAAR,QAAQ"}
@@ -9,14 +9,19 @@ var _jsx2 = _interopRequireDefault(require("@babel/runtime/helpers/jsx"));
9
9
 
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
 
12
+ var _process$env$WEBPACK_;
13
+
12
14
  function Document({
13
15
  assets,
14
16
  head,
15
17
  children,
16
18
  title,
17
- rootId
19
+ rootId,
20
+ charSet
18
21
  }) {
19
- return /*#__PURE__*/(0, _jsx2.default)("html", {}, void 0, /*#__PURE__*/(0, _jsx2.default)("head", {}, void 0, head, assets.map((asset, i) => /*#__PURE__*/_react.default.createElement("link", {
22
+ return /*#__PURE__*/(0, _jsx2.default)("html", {}, void 0, /*#__PURE__*/(0, _jsx2.default)("head", {}, void 0, /*#__PURE__*/(0, _jsx2.default)("meta", {
23
+ charSet: charSet
24
+ }), head, assets.map((asset, i) => /*#__PURE__*/_react.default.createElement("link", {
20
25
  key: i,
21
26
  rel: "preload",
22
27
  ...asset
@@ -38,14 +43,13 @@ function Document({
38
43
 
39
44
  Document.defaultProps = {
40
45
  head: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/(0, _jsx2.default)("meta", {
41
- charSet: "utf-8"
42
- }), /*#__PURE__*/(0, _jsx2.default)("meta", {
43
46
  name: "viewport",
44
47
  content: "width=device-width, initial-scale=1"
45
48
  }), /*#__PURE__*/(0, _jsx2.default)("link", {
46
49
  rel: "shortcut icon",
47
- href: "/assets/favicon.ico"
50
+ href: `${(_process$env$WEBPACK_ = process.env.WEBPACK_PUBLIC_PATH) != null ? _process$env$WEBPACK_ : '/'}favicon.ico`
48
51
  })),
52
+ charSet: 'utf-8',
49
53
  rootId: 'anansi-root'
50
54
  };
51
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwibWFwIiwiYXNzZXQiLCJpIiwiX19odG1sIiwiSlNPTiIsInN0cmluZ2lmeSIsImZpbHRlciIsImhyZWYiLCJlbmRzV2l0aCIsImRlZmF1bHRQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvRG9jdW1lbnRDb21wb25lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFzc2V0czogeyBocmVmOiBzdHJpbmc7IGFzPzogc3RyaW5nOyByZWw/OiBzdHJpbmcgfVtdO1xuICBoZWFkOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnQoe1xuICBhc3NldHMsXG4gIGhlYWQsXG4gIGNoaWxkcmVuLFxuICB0aXRsZSxcbiAgcm9vdElkLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aHRtbD5cbiAgICAgIDxoZWFkPlxuICAgICAgICB7aGVhZH1cbiAgICAgICAge2Fzc2V0cy5tYXAoKGFzc2V0LCBpKSA9PiAoXG4gICAgICAgICAgPGxpbmsga2V5PXtpfSByZWw9XCJwcmVsb2FkXCIgey4uLmFzc2V0fSAvPlxuICAgICAgICApKX1cbiAgICAgICAgPHRpdGxlPnt0aXRsZX08L3RpdGxlPlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDxkaXYgaWQ9e3Jvb3RJZH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICB7LyogdGhpcyBlbnN1cmVzIHRoZSBjbGllbnQgY2FuIGh5ZHJhdGUgdGhlIGFzc2V0cyBwcm9wICovfVxuICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogYGFzc2V0TWFuaWZlc3QgPSAke0pTT04uc3RyaW5naWZ5KGFzc2V0cyl9O2AsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAge2Fzc2V0c1xuICAgICAgICAgIC5maWx0ZXIoKHsgaHJlZiB9KSA9PiBocmVmLmVuZHNXaXRoKCcuanMnKSlcbiAgICAgICAgICAubWFwKCh7IGhyZWYgfSwgaSkgPT4gKFxuICAgICAgICAgICAgPHNjcmlwdCBrZXk9e2l9IHNyYz17aHJlZn0gYXN5bmMgLz5cbiAgICAgICAgICApKX1cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gICk7XG59XG5Eb2N1bWVudC5kZWZhdWx0UHJvcHMgPSB7XG4gIGhlYWQ6IChcbiAgICA8PlxuICAgICAgPG1ldGEgY2hhclNldD1cInV0Zi04XCIgLz5cbiAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiIC8+XG4gICAgICA8bGluayByZWw9XCJzaG9ydGN1dCBpY29uXCIgaHJlZj1cIi9hc3NldHMvZmF2aWNvbi5pY29cIiAvPlxuICAgIDwvPlxuICApLFxuICByb290SWQ6ICdhbmFuc2ktcm9vdCcsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFlLFNBQVNBLFFBQVQsQ0FBa0I7RUFDL0JDLE1BRCtCO0VBRS9CQyxJQUYrQjtFQUcvQkMsUUFIK0I7RUFJL0JDLEtBSitCO0VBSy9CQztBQUwrQixDQUFsQixFQU1MO0VBQ1Isb0JBQ0Usb0RBQ0UsdUNBQ0dILElBREgsRUFFR0QsTUFBTSxDQUFDSyxHQUFQLENBQVcsQ0FBQ0MsS0FBRCxFQUFRQyxDQUFSLGtCQUNWO0lBQU0sR0FBRyxFQUFFQSxDQUFYO0lBQWMsR0FBRyxFQUFDLFNBQWxCO0lBQUEsR0FBZ0NEO0VBQWhDLEVBREQsQ0FGSCxlQUtFLHdDQUFRSCxLQUFSLENBTEYsQ0FERixlQVFFLG9EQUNFO0lBQUssRUFBRSxFQUFFQztFQUFULFdBQWtCRixRQUFsQixDQURGLGVBR0U7SUFDRSx1QkFBdUIsRUFBRTtNQUN2Qk0sTUFBTSxFQUFHLG1CQUFrQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVWLE1BQWYsQ0FBdUI7SUFEM0I7RUFEM0IsRUFIRixFQVFHQSxNQUFNLENBQ0pXLE1BREYsQ0FDUyxDQUFDO0lBQUVDO0VBQUYsQ0FBRCxLQUFjQSxJQUFJLENBQUNDLFFBQUwsQ0FBYyxLQUFkLENBRHZCLEVBRUVSLEdBRkYsQ0FFTSxDQUFDO0lBQUVPO0VBQUYsQ0FBRCxFQUFXTCxDQUFYLGtCQUNIO0lBQWdCLEdBQUcsRUFBRUssSUFBckI7SUFBMkIsS0FBSztFQUFoQyxHQUFhTCxDQUFiLENBSEgsQ0FSSCxDQVJGLENBREY7QUF5QkQ7O0FBQ0RSLFFBQVEsQ0FBQ2UsWUFBVCxHQUF3QjtFQUN0QmIsSUFBSSxlQUNGLHlFQUNFO0lBQU0sT0FBTyxFQUFDO0VBQWQsRUFERixlQUVFO0lBQU0sSUFBSSxFQUFDLFVBQVg7SUFBc0IsT0FBTyxFQUFDO0VBQTlCLEVBRkYsZUFHRTtJQUFNLEdBQUcsRUFBQyxlQUFWO0lBQTBCLElBQUksRUFBQztFQUEvQixFQUhGLENBRm9CO0VBUXRCRyxNQUFNLEVBQUU7QUFSYyxDQUF4QiJ9
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsIm1hcCIsImFzc2V0IiwiaSIsIl9faHRtbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJmaWx0ZXIiLCJocmVmIiwiZW5kc1dpdGgiLCJkZWZhdWx0UHJvcHMiLCJwcm9jZXNzIiwiZW52IiwiV0VCUEFDS19QVUJMSUNfUEFUSCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvRG9jdW1lbnRDb21wb25lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFzc2V0czogeyBocmVmOiBzdHJpbmc7IGFzPzogc3RyaW5nOyByZWw/OiBzdHJpbmcgfVtdO1xuICBoZWFkOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZDogc3RyaW5nO1xuICBjaGFyU2V0OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEb2N1bWVudCh7XG4gIGFzc2V0cyxcbiAgaGVhZCxcbiAgY2hpbGRyZW4sXG4gIHRpdGxlLFxuICByb290SWQsXG4gIGNoYXJTZXQsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxodG1sPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJTZXQ9e2NoYXJTZXR9IC8+XG4gICAgICAgIHtoZWFkfVxuICAgICAgICB7YXNzZXRzLm1hcCgoYXNzZXQsIGkpID0+IChcbiAgICAgICAgICA8bGluayBrZXk9e2l9IHJlbD1cInByZWxvYWRcIiB7Li4uYXNzZXR9IC8+XG4gICAgICAgICkpfVxuICAgICAgICA8dGl0bGU+e3RpdGxlfTwvdGl0bGU+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPGRpdiBpZD17cm9vdElkfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgIHsvKiB0aGlzIGVuc3VyZXMgdGhlIGNsaWVudCBjYW4gaHlkcmF0ZSB0aGUgYXNzZXRzIHByb3AgKi99XG4gICAgICAgIDxzY3JpcHRcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgX19odG1sOiBgYXNzZXRNYW5pZmVzdCA9ICR7SlNPTi5zdHJpbmdpZnkoYXNzZXRzKX07YCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICB7YXNzZXRzXG4gICAgICAgICAgLmZpbHRlcigoeyBocmVmIH0pID0+IGhyZWYuZW5kc1dpdGgoJy5qcycpKVxuICAgICAgICAgIC5tYXAoKHsgaHJlZiB9LCBpKSA9PiAoXG4gICAgICAgICAgICA8c2NyaXB0IGtleT17aX0gc3JjPXtocmVmfSBhc3luYyAvPlxuICAgICAgICAgICkpfVxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbkRvY3VtZW50LmRlZmF1bHRQcm9wcyA9IHtcbiAgaGVhZDogKFxuICAgIDw+XG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxuICAgICAgPGxpbmtcbiAgICAgICAgcmVsPVwic2hvcnRjdXQgaWNvblwiXG4gICAgICAgIGhyZWY9e2Ake3Byb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggPz8gJy8nfWZhdmljb24uaWNvYH1cbiAgICAgIC8+XG4gICAgPC8+XG4gICksXG4gIGNoYXJTZXQ6ICd1dGYtOCcsXG4gIHJvb3RJZDogJ2FuYW5zaS1yb290Jyxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFTZSxTQUFTQSxRQUFULENBQWtCO0VBQy9CQyxNQUQrQjtFQUUvQkMsSUFGK0I7RUFHL0JDLFFBSCtCO0VBSS9CQyxLQUorQjtFQUsvQkMsTUFMK0I7RUFNL0JDO0FBTitCLENBQWxCLEVBT0w7RUFDUixvQkFDRSxvREFDRSxvREFDRTtJQUFNLE9BQU8sRUFBRUE7RUFBZixFQURGLEVBRUdKLElBRkgsRUFHR0QsTUFBTSxDQUFDTSxHQUFQLENBQVcsQ0FBQ0MsS0FBRCxFQUFRQyxDQUFSLGtCQUNWO0lBQU0sR0FBRyxFQUFFQSxDQUFYO0lBQWMsR0FBRyxFQUFDLFNBQWxCO0lBQUEsR0FBZ0NEO0VBQWhDLEVBREQsQ0FISCxlQU1FLHdDQUFRSixLQUFSLENBTkYsQ0FERixlQVNFLG9EQUNFO0lBQUssRUFBRSxFQUFFQztFQUFULFdBQWtCRixRQUFsQixDQURGLGVBR0U7SUFDRSx1QkFBdUIsRUFBRTtNQUN2Qk8sTUFBTSxFQUFHLG1CQUFrQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVYLE1BQWYsQ0FBdUI7SUFEM0I7RUFEM0IsRUFIRixFQVFHQSxNQUFNLENBQ0pZLE1BREYsQ0FDUyxDQUFDO0lBQUVDO0VBQUYsQ0FBRCxLQUFjQSxJQUFJLENBQUNDLFFBQUwsQ0FBYyxLQUFkLENBRHZCLEVBRUVSLEdBRkYsQ0FFTSxDQUFDO0lBQUVPO0VBQUYsQ0FBRCxFQUFXTCxDQUFYLGtCQUNIO0lBQWdCLEdBQUcsRUFBRUssSUFBckI7SUFBMkIsS0FBSztFQUFoQyxHQUFhTCxDQUFiLENBSEgsQ0FSSCxDQVRGLENBREY7QUEwQkQ7O0FBQ0RULFFBQVEsQ0FBQ2dCLFlBQVQsR0FBd0I7RUFDdEJkLElBQUksZUFDRix5RUFDRTtJQUFNLElBQUksRUFBQyxVQUFYO0lBQXNCLE9BQU8sRUFBQztFQUE5QixFQURGLGVBRUU7SUFDRSxHQUFHLEVBQUMsZUFETjtJQUVFLElBQUksRUFBRyxHQUFELHlCQUFHZSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsbUJBQWYsb0NBQXNDLEdBQUk7RUFGbEQsRUFGRixDQUZvQjtFQVV0QmIsT0FBTyxFQUFFLE9BVmE7RUFXdEJELE1BQU0sRUFBRTtBQVhjLENBQXhCIn0=
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { Route } from '@anansi/router';
3
+ import type { ResolveProps } from './types';
4
+ declare type NeededProps = {
5
+ matchedRoutes: Route<any>[];
6
+ title?: string;
7
+ } & ResolveProps;
8
+ export default function documentSpout(options: {
9
+ head?: React.ReactNode;
10
+ title: string;
11
+ }): <T extends NeededProps>(next: () => Promise<T>) => () => Promise<T>;
12
+ export {};
13
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/spouts/document.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,aAAK,WAAW,GAAG;IACjB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,YAAY,CAAC;AAEjB,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE;IAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf,uEAQA"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import type { Route } from '@anansi/router';
3
+ import type { ServerProps, ResolveProps } from './types';
4
+ declare type NeededProps = {
5
+ matchedRoutes: Route<any>[];
6
+ title?: string;
7
+ charSet?: string;
8
+ } & ResolveProps;
9
+ export default function DocumentSpout(options: {
10
+ head?: React.ReactNode;
11
+ title: string;
12
+ rootId: string;
13
+ charSet: string;
14
+ }): <T extends NeededProps>(next: (props: ServerProps) => Promise<T>) => (props: ServerProps) => Promise<T & {
15
+ app: JSX.Element;
16
+ }>;
17
+ export {};
18
+ //# sourceMappingURL=document.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.server.d.ts","sourceRoot":"","sources":["../../src/spouts/document.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGzD,aAAK,WAAW,GAAG;IACjB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,YAAY,CAAC;AAEjB,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE;IAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,yCAEiB,WAAW,4BAEJ,WAAW;;GAkEnC"}