@anansi/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -0
- package/lib/floodSpouts.d.ts +4 -0
- package/lib/floodSpouts.d.ts.map +1 -0
- package/lib/floodSpouts.js +14 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +23 -0
- package/lib/index.server.d.ts +6 -0
- package/lib/index.server.d.ts.map +1 -0
- package/lib/index.server.js +27 -0
- package/lib/laySpouts.d.ts +8 -0
- package/lib/laySpouts.d.ts.map +1 -0
- package/lib/laySpouts.js +71 -0
- package/lib/scripts/startDevserver.d.ts +2 -0
- package/lib/scripts/startDevserver.d.ts.map +1 -0
- package/lib/scripts/startDevserver.js +248 -0
- package/lib/scripts/types.d.ts +6 -0
- package/lib/scripts/types.d.ts.map +1 -0
- package/lib/scripts/types.js +4 -0
- package/lib/spouts/DocumentComponent.d.ts +19 -0
- package/lib/spouts/DocumentComponent.d.ts.map +1 -0
- package/lib/spouts/DocumentComponent.js +47 -0
- package/lib/spouts/document.d.ts +15 -0
- package/lib/spouts/document.d.ts.map +1 -0
- package/lib/spouts/document.js +27 -0
- package/lib/spouts/document.server.d.ts +15 -0
- package/lib/spouts/document.server.d.ts.map +1 -0
- package/lib/spouts/document.server.js +48 -0
- package/lib/spouts/prefetch.server.d.ts +8 -0
- package/lib/spouts/prefetch.server.d.ts.map +1 -0
- package/lib/spouts/prefetch.server.js +27 -0
- package/lib/spouts/restHooks.d.ts +8 -0
- package/lib/spouts/restHooks.d.ts.map +1 -0
- package/lib/spouts/restHooks.js +34 -0
- package/lib/spouts/restHooks.server.d.ts +9 -0
- package/lib/spouts/restHooks.server.d.ts.map +1 -0
- package/lib/spouts/restHooks.server.js +30 -0
- package/lib/spouts/router.d.ts +11 -0
- package/lib/spouts/router.d.ts.map +1 -0
- package/lib/spouts/router.js +41 -0
- package/lib/spouts/router.server.d.ts +11 -0
- package/lib/spouts/router.server.d.ts.map +1 -0
- package/lib/spouts/router.server.js +43 -0
- package/lib/spouts/types.d.ts +16 -0
- package/lib/spouts/types.d.ts.map +1 -0
- package/lib/spouts/types.js +4 -0
- package/package.json +117 -0
- package/server.d.ts +1 -0
- package/src/floodSpouts.tsx +11 -0
- package/src/index.server.ts +5 -0
- package/src/index.ts +4 -0
- package/src/laySpouts.tsx +60 -0
- package/src/scripts/monkey.d.ts +1 -0
- package/src/scripts/startDevserver.ts +239 -0
- package/src/scripts/types.ts +9 -0
- package/src/spouts/DocumentComponent.tsx +43 -0
- package/src/spouts/document.server.tsx +60 -0
- package/src/spouts/document.tsx +34 -0
- package/src/spouts/prefetch.server.tsx +34 -0
- package/src/spouts/restHooks.server.tsx +30 -0
- package/src/spouts/restHooks.tsx +30 -0
- package/src/spouts/router.server.tsx +47 -0
- package/src/spouts/router.tsx +43 -0
- package/src/spouts/types.ts +21 -0
package/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# @anansi/core
|
|
2
|
+
<!--[](https://circleci.com/gh/notwillk/pojo-router)-->
|
|
3
|
+
[](https://www.npmjs.com/package/@anansi/core)
|
|
4
|
+
[](https://bundlephobia.com/result?p=@anansi/core)
|
|
5
|
+
[](https://www.npmjs.com/package/@anansi/core)
|
|
6
|
+
[](http://makeapullrequest.com)
|
|
7
|
+
|
|
8
|
+
> The itsy bitsy spider crawled up the water spout.
|
|
9
|
+
> Down came the rain, and washed the spider out.
|
|
10
|
+
> Out came the sun, and dried up all the rain,
|
|
11
|
+
> and the itsy bitsy spider went up the spout again
|
|
12
|
+
|
|
13
|
+
## Entry
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
yarn start-anansi./src/index.tsx
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
This script uses two entry points for client/server.
|
|
20
|
+
|
|
21
|
+
<details open><summary>index.server.tsx</summary>
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { useController } from 'rest-hooks';
|
|
25
|
+
import {
|
|
26
|
+
laySpouts,
|
|
27
|
+
documentSpout,
|
|
28
|
+
restHooksSpout,
|
|
29
|
+
prefetchSpout,
|
|
30
|
+
routerSpout,
|
|
31
|
+
} from '@anansi/core/server';
|
|
32
|
+
|
|
33
|
+
import app from 'app';
|
|
34
|
+
|
|
35
|
+
import { createRouter } from './routing';
|
|
36
|
+
|
|
37
|
+
const appSpout = () => Promise.resolve({ app });
|
|
38
|
+
|
|
39
|
+
const spouts = prefetchSpout('controller')(
|
|
40
|
+
documentSpout({ title: 'anansi' })(
|
|
41
|
+
restHooksSpout()(
|
|
42
|
+
routerSpout({ useResolveWith: useController, createRouter })(appSpout),
|
|
43
|
+
),
|
|
44
|
+
),
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
export default laySpouts(spouts);
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
</details>
|
|
52
|
+
|
|
53
|
+
<details open><summary>index.tsx</summary>
|
|
54
|
+
|
|
55
|
+
```tsx
|
|
56
|
+
import { useController } from 'rest-hooks';
|
|
57
|
+
import {
|
|
58
|
+
floodSpouts,
|
|
59
|
+
documentSpout,
|
|
60
|
+
restHooksSpout,
|
|
61
|
+
routerSpout,
|
|
62
|
+
} from '@anansi/core';
|
|
63
|
+
|
|
64
|
+
import app from 'app';
|
|
65
|
+
|
|
66
|
+
import { createRouter } from './routing';
|
|
67
|
+
|
|
68
|
+
const appSpout = () => Promise.resolve({ app });
|
|
69
|
+
|
|
70
|
+
const spouts = documentSpout({ title: 'anansi' })(
|
|
71
|
+
restHooksSpout()(
|
|
72
|
+
routerSpout({ useResolveWith: useController, createRouter })(appSpout),
|
|
73
|
+
),
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
floodSpouts(spouts);
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
</details>
|
|
80
|
+
|
|
81
|
+
Anansi can quickly traverse spouts setup by a user.
|
|
82
|
+
|
|
83
|
+
The server lays the spouts for anansi to travel in. Once delivered to the client, the spouts can be flooded (hydration).
|
|
84
|
+
|
|
85
|
+
In both cases, we need the route and application data.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floodSpouts.d.ts","sourceRoot":"","sources":["../src/floodSpouts.tsx"],"names":[],"mappings":"AAEA,wBAA8B,WAAW,CACvC,MAAM,EAAE,MAAM,OAAO,CAAC;IACpB,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC;CAClB,CAAC,iBAKH"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = floodSpouts;
|
|
5
|
+
|
|
6
|
+
var _client = require("react-dom/client");
|
|
7
|
+
|
|
8
|
+
async function floodSpouts(spouts) {
|
|
9
|
+
const {
|
|
10
|
+
app
|
|
11
|
+
} = await spouts();
|
|
12
|
+
(0, _client.hydrateRoot)(document, app);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mbG9vZFNwb3V0cy50c3giXSwibmFtZXMiOlsiZmxvb2RTcG91dHMiLCJzcG91dHMiLCJhcHAiLCJkb2N1bWVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFZSxlQUFlQSxXQUFmLENBQ2JDLE1BRGEsRUFJYjtBQUNBLFFBQU07QUFBRUMsSUFBQUE7QUFBRixNQUFVLE1BQU1ELE1BQU0sRUFBNUI7QUFFQSwyQkFBWUUsUUFBWixFQUFzQkQsR0FBdEI7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGh5ZHJhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGZsb29kU3BvdXRzKFxuICBzcG91dHM6ICgpID0+IFByb21pc2U8e1xuICAgIGFwcDogSlNYLkVsZW1lbnQ7XG4gIH0+LFxuKSB7XG4gIGNvbnN0IHsgYXBwIH0gPSBhd2FpdCBzcG91dHMoKTtcblxuICBoeWRyYXRlUm9vdChkb2N1bWVudCwgYXBwKTtcbn1cbiJdfQ==
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as floodSpouts } from './floodSpouts';
|
|
2
|
+
export { default as documentSpout } from './spouts/document';
|
|
3
|
+
export { default as restHooksSpout } from './spouts/restHooks';
|
|
4
|
+
export { default as routerSpout } from './spouts/router';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.routerSpout = exports.restHooksSpout = exports.floodSpouts = exports.documentSpout = void 0;
|
|
7
|
+
|
|
8
|
+
var _floodSpouts = _interopRequireDefault(require("./floodSpouts"));
|
|
9
|
+
|
|
10
|
+
exports.floodSpouts = _floodSpouts.default;
|
|
11
|
+
|
|
12
|
+
var _document = _interopRequireDefault(require("./spouts/document"));
|
|
13
|
+
|
|
14
|
+
exports.documentSpout = _document.default;
|
|
15
|
+
|
|
16
|
+
var _restHooks = _interopRequireDefault(require("./spouts/restHooks"));
|
|
17
|
+
|
|
18
|
+
exports.restHooksSpout = _restHooks.default;
|
|
19
|
+
|
|
20
|
+
var _router = _interopRequireDefault(require("./spouts/router"));
|
|
21
|
+
|
|
22
|
+
exports.routerSpout = _router.default;
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IGFzIGZsb29kU3BvdXRzIH0gZnJvbSAnLi9mbG9vZFNwb3V0cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRvY3VtZW50U3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9kb2N1bWVudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3RIb29rc1Nwb3V0IH0gZnJvbSAnLi9zcG91dHMvcmVzdEhvb2tzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcm91dGVyU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9yb3V0ZXInO1xuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as laySpouts } from './laySpouts';
|
|
2
|
+
export { default as documentSpout } from './spouts/document.server';
|
|
3
|
+
export { default as restHooksSpout } from './spouts/restHooks.server';
|
|
4
|
+
export { default as routerSpout } from './spouts/router.server';
|
|
5
|
+
export { default as prefetchSpout } from './spouts/prefetch.server';
|
|
6
|
+
//# sourceMappingURL=index.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.server.d.ts","sourceRoot":"","sources":["../src/index.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.routerSpout = exports.restHooksSpout = exports.prefetchSpout = exports.laySpouts = exports.documentSpout = void 0;
|
|
7
|
+
|
|
8
|
+
var _laySpouts = _interopRequireDefault(require("./laySpouts"));
|
|
9
|
+
|
|
10
|
+
exports.laySpouts = _laySpouts.default;
|
|
11
|
+
|
|
12
|
+
var _document = _interopRequireDefault(require("./spouts/document.server"));
|
|
13
|
+
|
|
14
|
+
exports.documentSpout = _document.default;
|
|
15
|
+
|
|
16
|
+
var _restHooks = _interopRequireDefault(require("./spouts/restHooks.server"));
|
|
17
|
+
|
|
18
|
+
exports.restHooksSpout = _restHooks.default;
|
|
19
|
+
|
|
20
|
+
var _router = _interopRequireDefault(require("./spouts/router.server"));
|
|
21
|
+
|
|
22
|
+
exports.routerSpout = _router.default;
|
|
23
|
+
|
|
24
|
+
var _prefetch = _interopRequireDefault(require("./spouts/prefetch.server"));
|
|
25
|
+
|
|
26
|
+
exports.prefetchSpout = _prefetch.default;
|
|
27
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IGFzIGxheVNwb3V0cyB9IGZyb20gJy4vbGF5U3BvdXRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50LnNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3RIb29rc1Nwb3V0IH0gZnJvbSAnLi9zcG91dHMvcmVzdEhvb2tzLnNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJvdXRlclNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcm91dGVyLnNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByZWZldGNoU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9wcmVmZXRjaC5zZXJ2ZXInO1xuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Render } from './scripts/types';
|
|
2
|
+
import { ServerProps } from './spouts/types';
|
|
3
|
+
export default function laySpouts(spouts: (props: ServerProps) => Promise<{
|
|
4
|
+
app: JSX.Element;
|
|
5
|
+
}>, { timeoutMS }?: {
|
|
6
|
+
timeoutMS?: number;
|
|
7
|
+
}): Render;
|
|
8
|
+
//# sourceMappingURL=laySpouts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"laySpouts.d.ts","sourceRoot":"","sources":["../src/laySpouts.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC;IACtC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC;CAClB,CAAC,EACF,EAAE,SAAgB,EAAE,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,UAkDlD"}
|
package/lib/laySpouts.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = laySpouts;
|
|
5
|
+
|
|
6
|
+
var _server = require("react-dom/server");
|
|
7
|
+
|
|
8
|
+
function laySpouts(spouts, {
|
|
9
|
+
timeoutMS = 1000
|
|
10
|
+
} = {}) {
|
|
11
|
+
const render = async (clientManifest, req, res) => {
|
|
12
|
+
const {
|
|
13
|
+
app
|
|
14
|
+
} = await spouts({
|
|
15
|
+
clientManifest,
|
|
16
|
+
req,
|
|
17
|
+
res
|
|
18
|
+
});
|
|
19
|
+
let didError = false;
|
|
20
|
+
const {
|
|
21
|
+
pipe,
|
|
22
|
+
abort
|
|
23
|
+
} = (0, _server.renderToPipeableStream)(app,
|
|
24
|
+
/*
|
|
25
|
+
This is not documented, so included the types here for reference:
|
|
26
|
+
type Options = {|
|
|
27
|
+
identifierPrefix?: string,
|
|
28
|
+
namespaceURI?: string,
|
|
29
|
+
nonce?: string,
|
|
30
|
+
bootstrapScriptContent?: string,
|
|
31
|
+
bootstrapScripts?: Array<string>,
|
|
32
|
+
bootstrapModules?: Array<string>,
|
|
33
|
+
progressiveChunkSize?: number,
|
|
34
|
+
onShellReady?: () => void,
|
|
35
|
+
onShellError?: () => void,
|
|
36
|
+
onAllReady?: () => void,
|
|
37
|
+
onError?: (error: mixed) => void,
|
|
38
|
+
|};
|
|
39
|
+
*/
|
|
40
|
+
{
|
|
41
|
+
//bootstrapScripts: assets.filter(asset => asset.endsWith('.js')),
|
|
42
|
+
onShellReady() {
|
|
43
|
+
//managers.forEach(manager => manager.cleanup());
|
|
44
|
+
// If something errored before we started streaming, we set the error code appropriately.
|
|
45
|
+
res.statusCode = didError ? 500 : 200;
|
|
46
|
+
res.setHeader('Content-type', 'text/html');
|
|
47
|
+
pipe(res);
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
onShellError() {
|
|
51
|
+
didError = true;
|
|
52
|
+
res.statusCode = 500;
|
|
53
|
+
pipe(res);
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
onError(x) {
|
|
57
|
+
didError = true;
|
|
58
|
+
console.error(x);
|
|
59
|
+
res.statusCode = 500;
|
|
60
|
+
pipe(res);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}); // Abandon and switch to client rendering if enough time passes.
|
|
64
|
+
// Try lowering this to see the client recover.
|
|
65
|
+
|
|
66
|
+
setTimeout(abort, timeoutMS);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
return render;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sYXlTcG91dHMudHN4Il0sIm5hbWVzIjpbImxheVNwb3V0cyIsInNwb3V0cyIsInRpbWVvdXRNUyIsInJlbmRlciIsImNsaWVudE1hbmlmZXN0IiwicmVxIiwicmVzIiwiYXBwIiwiZGlkRXJyb3IiLCJwaXBlIiwiYWJvcnQiLCJvblNoZWxsUmVhZHkiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwib25TaGVsbEVycm9yIiwib25FcnJvciIsIngiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUtlLFNBQVNBLFNBQVQsQ0FDYkMsTUFEYSxFQUliO0FBQUVDLEVBQUFBLFNBQVMsR0FBRztBQUFkLElBQStDLEVBSmxDLEVBS2I7QUFDQSxRQUFNQyxNQUFjLEdBQUcsT0FBT0MsY0FBUCxFQUF1QkMsR0FBdkIsRUFBNEJDLEdBQTVCLEtBQW9DO0FBQ3pELFVBQU07QUFBRUMsTUFBQUE7QUFBRixRQUFVLE1BQU1OLE1BQU0sQ0FBQztBQUFFRyxNQUFBQSxjQUFGO0FBQWtCQyxNQUFBQSxHQUFsQjtBQUF1QkMsTUFBQUE7QUFBdkIsS0FBRCxDQUE1QjtBQUNBLFFBQUlFLFFBQVEsR0FBRyxLQUFmO0FBQ0EsVUFBTTtBQUFFQyxNQUFBQSxJQUFGO0FBQVFDLE1BQUFBO0FBQVIsUUFBa0Isb0NBQ3RCSCxHQURzQjtBQUV0QjtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNNO0FBQ0U7QUFDQUksTUFBQUEsWUFBWSxHQUFHO0FBQ2I7QUFDQTtBQUNBTCxRQUFBQSxHQUFHLENBQUNNLFVBQUosR0FBaUJKLFFBQVEsR0FBRyxHQUFILEdBQVMsR0FBbEM7QUFDQUYsUUFBQUEsR0FBRyxDQUFDTyxTQUFKLENBQWMsY0FBZCxFQUE4QixXQUE5QjtBQUNBSixRQUFBQSxJQUFJLENBQUNILEdBQUQsQ0FBSjtBQUNELE9BUkg7O0FBU0VRLE1BQUFBLFlBQVksR0FBRztBQUNiTixRQUFBQSxRQUFRLEdBQUcsSUFBWDtBQUNBRixRQUFBQSxHQUFHLENBQUNNLFVBQUosR0FBaUIsR0FBakI7QUFDQUgsUUFBQUEsSUFBSSxDQUFDSCxHQUFELENBQUo7QUFDRCxPQWJIOztBQWNFUyxNQUFBQSxPQUFPLENBQUNDLENBQUQsRUFBUztBQUNkUixRQUFBQSxRQUFRLEdBQUcsSUFBWDtBQUNBUyxRQUFBQSxPQUFPLENBQUNDLEtBQVIsQ0FBY0YsQ0FBZDtBQUNBVixRQUFBQSxHQUFHLENBQUNNLFVBQUosR0FBaUIsR0FBakI7QUFDQUgsUUFBQUEsSUFBSSxDQUFDSCxHQUFELENBQUo7QUFDRDs7QUFuQkgsS0FsQnNCLENBQXhCLENBSHlELENBMkN6RDtBQUNBOztBQUNBYSxJQUFBQSxVQUFVLENBQUNULEtBQUQsRUFBUVIsU0FBUixDQUFWO0FBQ0QsR0E5Q0Q7O0FBK0NBLFNBQU9DLE1BQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlclRvUGlwZWFibGVTdHJlYW0gYXMgcmVhY3RSZW5kZXIgfSBmcm9tICdyZWFjdC1kb20vc2VydmVyJztcblxuaW1wb3J0IHsgUmVuZGVyIH0gZnJvbSAnLi9zY3JpcHRzL3R5cGVzJztcbmltcG9ydCB7IFNlcnZlclByb3BzIH0gZnJvbSAnLi9zcG91dHMvdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYXlTcG91dHMoXG4gIHNwb3V0czogKHByb3BzOiBTZXJ2ZXJQcm9wcykgPT4gUHJvbWlzZTx7XG4gICAgYXBwOiBKU1guRWxlbWVudDtcbiAgfT4sXG4gIHsgdGltZW91dE1TID0gMTAwMCB9OiB7IHRpbWVvdXRNUz86IG51bWJlciB9ID0ge30sXG4pIHtcbiAgY29uc3QgcmVuZGVyOiBSZW5kZXIgPSBhc3luYyAoY2xpZW50TWFuaWZlc3QsIHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QgeyBhcHAgfSA9IGF3YWl0IHNwb3V0cyh7IGNsaWVudE1hbmlmZXN0LCByZXEsIHJlcyB9KTtcbiAgICBsZXQgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICBjb25zdCB7IHBpcGUsIGFib3J0IH0gPSByZWFjdFJlbmRlcihcbiAgICAgIGFwcCxcbiAgICAgIC8qXG4gICAgICBUaGlzIGlzIG5vdCBkb2N1bWVudGVkLCBzbyBpbmNsdWRlZCB0aGUgdHlwZXMgaGVyZSBmb3IgcmVmZXJlbmNlOlxudHlwZSBPcHRpb25zID0ge3xcbiAgaWRlbnRpZmllclByZWZpeD86IHN0cmluZyxcbiAgbmFtZXNwYWNlVVJJPzogc3RyaW5nLFxuICBub25jZT86IHN0cmluZyxcbiAgYm9vdHN0cmFwU2NyaXB0Q29udGVudD86IHN0cmluZyxcbiAgYm9vdHN0cmFwU2NyaXB0cz86IEFycmF5PHN0cmluZz4sXG4gIGJvb3RzdHJhcE1vZHVsZXM/OiBBcnJheTxzdHJpbmc+LFxuICBwcm9ncmVzc2l2ZUNodW5rU2l6ZT86IG51bWJlcixcbiAgb25TaGVsbFJlYWR5PzogKCkgPT4gdm9pZCxcbiAgb25TaGVsbEVycm9yPzogKCkgPT4gdm9pZCxcbiAgb25BbGxSZWFkeT86ICgpID0+IHZvaWQsXG4gIG9uRXJyb3I/OiAoZXJyb3I6IG1peGVkKSA9PiB2b2lkLFxufH07XG4gICovXG4gICAgICB7XG4gICAgICAgIC8vYm9vdHN0cmFwU2NyaXB0czogYXNzZXRzLmZpbHRlcihhc3NldCA9PiBhc3NldC5lbmRzV2l0aCgnLmpzJykpLFxuICAgICAgICBvblNoZWxsUmVhZHkoKSB7XG4gICAgICAgICAgLy9tYW5hZ2Vycy5mb3JFYWNoKG1hbmFnZXIgPT4gbWFuYWdlci5jbGVhbnVwKCkpO1xuICAgICAgICAgIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIGJlZm9yZSB3ZSBzdGFydGVkIHN0cmVhbWluZywgd2Ugc2V0IHRoZSBlcnJvciBjb2RlIGFwcHJvcHJpYXRlbHkuXG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSBkaWRFcnJvciA/IDUwMCA6IDIwMDtcbiAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvblNoZWxsRXJyb3IoKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIHBpcGUocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcih4OiBhbnkpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS5lcnJvcih4KTtcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgLy8gQWJhbmRvbiBhbmQgc3dpdGNoIHRvIGNsaWVudCByZW5kZXJpbmcgaWYgZW5vdWdoIHRpbWUgcGFzc2VzLlxuICAgIC8vIFRyeSBsb3dlcmluZyB0aGlzIHRvIHNlZSB0aGUgY2xpZW50IHJlY292ZXIuXG4gICAgc2V0VGltZW91dChhYm9ydCwgdGltZW91dE1TKTtcbiAgfTtcbiAgcmV0dXJuIHJlbmRlcjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startDevserver.d.ts","sourceRoot":"","sources":["../../src/scripts/startDevserver.ts"],"names":[],"mappings":"AAeA,OAAO,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
var _util = require("util");
|
|
6
|
+
|
|
7
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
8
|
+
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
|
|
11
|
+
var _webpack = _interopRequireDefault(require("webpack"));
|
|
12
|
+
|
|
13
|
+
var _webpackHotMiddleware = _interopRequireDefault(require("webpack-hot-middleware"));
|
|
14
|
+
|
|
15
|
+
var _memfs = require("memfs");
|
|
16
|
+
|
|
17
|
+
var _express = _interopRequireDefault(require("express"));
|
|
18
|
+
|
|
19
|
+
var _ora = _interopRequireDefault(require("ora"));
|
|
20
|
+
|
|
21
|
+
var _fsMonkey = require("fs-monkey");
|
|
22
|
+
|
|
23
|
+
var _tmp = _interopRequireDefault(require("tmp"));
|
|
24
|
+
|
|
25
|
+
var _sourceMapSupport = _interopRequireDefault(require("source-map-support"));
|
|
26
|
+
|
|
27
|
+
var _unionfs = require("unionfs");
|
|
28
|
+
|
|
29
|
+
var _compression = _interopRequireDefault(require("compression"));
|
|
30
|
+
|
|
31
|
+
require("cross-fetch/polyfill");
|
|
32
|
+
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
34
|
+
const webpackConfig = require(require.resolve( // TODO: use normal resolution algorithm to find webpack file
|
|
35
|
+
_path.default.join(process.cwd(), 'webpack.config')));
|
|
36
|
+
|
|
37
|
+
const entrypoint = process.argv[2];
|
|
38
|
+
const PORT = process.env.PORT || 3000;
|
|
39
|
+
process.env.WEBPACK_PUBLIC_HOST = `http://localhost:${PORT}`;
|
|
40
|
+
process.env.WEBPACK_PUBLIC_PATH = '/assets/';
|
|
41
|
+
|
|
42
|
+
if (!entrypoint) {
|
|
43
|
+
console.log(`Usage: ${process.argv[0]} <entrypoint-file>`);
|
|
44
|
+
process.exit(-1);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const loader = (0, _ora.default)('Building the assets').start(); // Set up in memory filesystem
|
|
48
|
+
|
|
49
|
+
const volume = new _memfs.Volume();
|
|
50
|
+
const fs = (0, _memfs.createFsFromVolume)(volume);
|
|
51
|
+
|
|
52
|
+
_unionfs.ufs.use(_fs.default).use(fs);
|
|
53
|
+
|
|
54
|
+
(0, _fsMonkey.patchRequire)(_unionfs.ufs);
|
|
55
|
+
const readFile = (0, _util.promisify)(_unionfs.ufs.readFile);
|
|
56
|
+
let server; // Generate a temporary file so we can hot reload from the root of the application
|
|
57
|
+
|
|
58
|
+
function hotEntry(entryPath) {
|
|
59
|
+
// eslint-disable-next-line
|
|
60
|
+
// @ts-ignore for some reason it's not picking up that other options are optional
|
|
61
|
+
const generatedEntrypoint = _tmp.default.fileSync({
|
|
62
|
+
postfix: '.js'
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
_fs.default.writeSync(generatedEntrypoint.fd, `
|
|
66
|
+
import entry from "${_path.default.resolve(process.cwd(), entryPath)}";
|
|
67
|
+
|
|
68
|
+
if (module.hot) {
|
|
69
|
+
module.hot.accept();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export default entry;
|
|
73
|
+
`);
|
|
74
|
+
|
|
75
|
+
return generatedEntrypoint;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const webpackConfigs = [webpackConfig({
|
|
79
|
+
entrypoint: hotEntry(entrypoint).name,
|
|
80
|
+
name: 'client'
|
|
81
|
+
}, {
|
|
82
|
+
mode: 'development'
|
|
83
|
+
}), webpackConfig({
|
|
84
|
+
entrypoint: hotEntry(entrypoint.replace('.tsx', '.server.tsx')).name,
|
|
85
|
+
name: 'server'
|
|
86
|
+
}, {
|
|
87
|
+
mode: 'development',
|
|
88
|
+
target: 'node'
|
|
89
|
+
})]; // initialize the webpack compiler
|
|
90
|
+
|
|
91
|
+
const compiler = (0, _webpack.default)(webpackConfigs);
|
|
92
|
+
compiler.outputFileSystem = { ...fs,
|
|
93
|
+
join: _path.default.join
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
_sourceMapSupport.default.install({
|
|
97
|
+
hookRequire: true
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
function getServerBundle(serverStats) {
|
|
101
|
+
var _serverJson$outputPat;
|
|
102
|
+
|
|
103
|
+
const serverJson = serverStats.toJson({
|
|
104
|
+
assets: true
|
|
105
|
+
});
|
|
106
|
+
return _path.default.join((_serverJson$outputPat = serverJson.outputPath) != null ? _serverJson$outputPat : '', 'main.js');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function handleErrors(fn) {
|
|
110
|
+
return async function (req, res, next) {
|
|
111
|
+
try {
|
|
112
|
+
return await fn(req, res);
|
|
113
|
+
} catch (x) {
|
|
114
|
+
next(x);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
} // Start the express server after the first compilation
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
function initializeApp(stats) {
|
|
121
|
+
var _clientStats$compilat, _clientStats$compilat2, _serverStats$compilat, _serverStats$compilat2;
|
|
122
|
+
|
|
123
|
+
loader.info('Launching server');
|
|
124
|
+
const [clientStats, serverStats] = stats;
|
|
125
|
+
|
|
126
|
+
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) {
|
|
127
|
+
console.log('Errors for client build: ', clientStats.compilation.errors);
|
|
128
|
+
console.log('Errors for server build:', serverStats.compilation.errors); // TODO: handle more gracefully
|
|
129
|
+
|
|
130
|
+
process.exit(-1);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const wrappingApp = (0, _express.default)(); // eslint-disable-next-line
|
|
134
|
+
//@ts-ignore
|
|
135
|
+
|
|
136
|
+
wrappingApp.use((0, _compression.default)()); // ASSETS
|
|
137
|
+
|
|
138
|
+
wrappingApp.use((0, _webpackHotMiddleware.default)(compiler.compilers[0], {
|
|
139
|
+
log: console.log,
|
|
140
|
+
path: '/__webpack_hmr',
|
|
141
|
+
heartbeat: 10 * 1000 //noInfo: true,
|
|
142
|
+
//name: 'client',
|
|
143
|
+
|
|
144
|
+
}));
|
|
145
|
+
const clientManifest = clientStats.toJson();
|
|
146
|
+
|
|
147
|
+
const assetRoute = async (req, res) => {
|
|
148
|
+
var _req$url$substr, _req$url, _clientManifest$outpu;
|
|
149
|
+
|
|
150
|
+
const filename = (_req$url$substr = (_req$url = req.url) === null || _req$url === void 0 ? void 0 : _req$url.substr(process.env.WEBPACK_PUBLIC_PATH.length)) != null ? _req$url$substr : '';
|
|
151
|
+
|
|
152
|
+
const assetPath = _path.default.join((_clientManifest$outpu = clientManifest.outputPath) != null ? _clientManifest$outpu : '', filename);
|
|
153
|
+
|
|
154
|
+
try {
|
|
155
|
+
const fileContent = (await readFile(assetPath)).toString();
|
|
156
|
+
res.contentType(filename);
|
|
157
|
+
res.send(fileContent);
|
|
158
|
+
} catch (e) {
|
|
159
|
+
res.status(404);
|
|
160
|
+
res.send(e);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
wrappingApp.get(`${process.env.WEBPACK_PUBLIC_PATH}*`, assetRoute); // SERVER SIDE RENDERING
|
|
166
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
167
|
+
|
|
168
|
+
const render = require(getServerBundle(serverStats)).default;
|
|
169
|
+
|
|
170
|
+
wrappingApp.get('/*', handleErrors(async function (req, res) {
|
|
171
|
+
if (req.url.endsWith('favicon.ico')) {
|
|
172
|
+
res.statusCode = 404;
|
|
173
|
+
res.setHeader('Content-type', 'text/html');
|
|
174
|
+
res.send('not found');
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
res.socket.on('error', error => {
|
|
179
|
+
console.error('Fatal', error);
|
|
180
|
+
});
|
|
181
|
+
await render(clientManifest, req, res);
|
|
182
|
+
}));
|
|
183
|
+
server = wrappingApp.listen(PORT, () => {
|
|
184
|
+
console.log(`Listening at ${PORT}...`);
|
|
185
|
+
}).on('error', function (error) {
|
|
186
|
+
if (error.syscall !== 'listen') {
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const isPipe = portOrPipe => Number.isNaN(portOrPipe);
|
|
191
|
+
|
|
192
|
+
const bind = isPipe(PORT) ? 'Pipe ' + PORT : 'Port ' + PORT;
|
|
193
|
+
|
|
194
|
+
switch (error.code) {
|
|
195
|
+
case 'EACCES':
|
|
196
|
+
console.error(bind + ' requires elevated privileges');
|
|
197
|
+
process.exit(1);
|
|
198
|
+
break;
|
|
199
|
+
|
|
200
|
+
case 'EADDRINUSE':
|
|
201
|
+
console.error(bind + ' is already in use');
|
|
202
|
+
process.exit(1);
|
|
203
|
+
break;
|
|
204
|
+
|
|
205
|
+
default:
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
} // Watch the files for changes
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
const watcher = compiler.watch({}, (err, multiStats) => {
|
|
213
|
+
if (!multiStats) {
|
|
214
|
+
console.error('stats not send');
|
|
215
|
+
process.exit(-1);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (err) {
|
|
219
|
+
console.error(err);
|
|
220
|
+
process.exit(-1);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (server) {
|
|
224
|
+
loader.succeed('Webpack bundle updated');
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
try {
|
|
229
|
+
initializeApp(multiStats.stats);
|
|
230
|
+
} catch (e) {
|
|
231
|
+
console.error('Failed to initialize app');
|
|
232
|
+
console.error(e);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
process.on('SIGINT', () => {
|
|
236
|
+
var _server;
|
|
237
|
+
|
|
238
|
+
loader.warn('Received SIGINT, devserver shutting down');
|
|
239
|
+
if (server) console.log('Closing server');
|
|
240
|
+
(_server = server) === null || _server === void 0 ? void 0 : _server.close(() => {
|
|
241
|
+
loader.info('Server closed');
|
|
242
|
+
});
|
|
243
|
+
watcher.close(() => {
|
|
244
|
+
loader.info('webpack build stopped');
|
|
245
|
+
});
|
|
246
|
+
process.exit(-1);
|
|
247
|
+
});
|
|
248
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3N0YXJ0RGV2c2VydmVyLnRzIl0sIm5hbWVzIjpbIndlYnBhY2tDb25maWciLCJyZXF1aXJlIiwicmVzb2x2ZSIsInBhdGgiLCJqb2luIiwicHJvY2VzcyIsImN3ZCIsImVudHJ5cG9pbnQiLCJhcmd2IiwiUE9SVCIsImVudiIsIldFQlBBQ0tfUFVCTElDX0hPU1QiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwiY29uc29sZSIsImxvZyIsImV4aXQiLCJsb2FkZXIiLCJzdGFydCIsInZvbHVtZSIsIlZvbHVtZSIsImZzIiwidWZzIiwidXNlIiwiZGlza0ZzIiwicmVhZEZpbGUiLCJzZXJ2ZXIiLCJob3RFbnRyeSIsImVudHJ5UGF0aCIsImdlbmVyYXRlZEVudHJ5cG9pbnQiLCJ0bXAiLCJmaWxlU3luYyIsInBvc3RmaXgiLCJ3cml0ZVN5bmMiLCJmZCIsIndlYnBhY2tDb25maWdzIiwibmFtZSIsIm1vZGUiLCJyZXBsYWNlIiwidGFyZ2V0IiwiY29tcGlsZXIiLCJvdXRwdXRGaWxlU3lzdGVtIiwic291cmNlTWFwU3VwcG9ydCIsImluc3RhbGwiLCJob29rUmVxdWlyZSIsImdldFNlcnZlckJ1bmRsZSIsInNlcnZlclN0YXRzIiwic2VydmVySnNvbiIsInRvSnNvbiIsImFzc2V0cyIsIm91dHB1dFBhdGgiLCJoYW5kbGVFcnJvcnMiLCJmbiIsInJlcSIsInJlcyIsIm5leHQiLCJ4IiwiaW5pdGlhbGl6ZUFwcCIsInN0YXRzIiwiaW5mbyIsImNsaWVudFN0YXRzIiwiY29tcGlsYXRpb24iLCJlcnJvcnMiLCJsZW5ndGgiLCJ3cmFwcGluZ0FwcCIsImNvbXBpbGVycyIsImhlYXJ0YmVhdCIsImNsaWVudE1hbmlmZXN0IiwiYXNzZXRSb3V0ZSIsImZpbGVuYW1lIiwidXJsIiwic3Vic3RyIiwiYXNzZXRQYXRoIiwiZmlsZUNvbnRlbnQiLCJ0b1N0cmluZyIsImNvbnRlbnRUeXBlIiwic2VuZCIsImUiLCJzdGF0dXMiLCJnZXQiLCJyZW5kZXIiLCJkZWZhdWx0IiwiZW5kc1dpdGgiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwic29ja2V0Iiwib24iLCJlcnJvciIsImxpc3RlbiIsInN5c2NhbGwiLCJpc1BpcGUiLCJwb3J0T3JQaXBlIiwiTnVtYmVyIiwiaXNOYU4iLCJiaW5kIiwiY29kZSIsIndhdGNoZXIiLCJ3YXRjaCIsImVyciIsIm11bHRpU3RhdHMiLCJzdWNjZWVkIiwid2FybiIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBR0E7QUFDQSxNQUFNQSxhQUFhLEdBQUdDLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDQyxPQUFSLEVBQzVCO0FBQ0FDLGNBQUtDLElBQUwsQ0FBVUMsT0FBTyxDQUFDQyxHQUFSLEVBQVYsRUFBeUIsZ0JBQXpCLENBRjRCLENBQUQsQ0FBN0I7O0FBS0EsTUFBTUMsVUFBVSxHQUFHRixPQUFPLENBQUNHLElBQVIsQ0FBYSxDQUFiLENBQW5CO0FBQ0EsTUFBTUMsSUFBSSxHQUFHSixPQUFPLENBQUNLLEdBQVIsQ0FBWUQsSUFBWixJQUFvQixJQUFqQztBQUNBSixPQUFPLENBQUNLLEdBQVIsQ0FBWUMsbUJBQVosR0FBbUMsb0JBQW1CRixJQUFLLEVBQTNEO0FBQ0FKLE9BQU8sQ0FBQ0ssR0FBUixDQUFZRSxtQkFBWixHQUFrQyxVQUFsQzs7QUFFQSxJQUFJLENBQUNMLFVBQUwsRUFBaUI7QUFDZk0sRUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQWEsVUFBU1QsT0FBTyxDQUFDRyxJQUFSLENBQWEsQ0FBYixDQUFnQixvQkFBdEM7QUFDQUgsRUFBQUEsT0FBTyxDQUFDVSxJQUFSLENBQWEsQ0FBQyxDQUFkO0FBQ0Q7O0FBRUQsTUFBTUMsTUFBTSxHQUFHLGtCQUFJLHFCQUFKLEVBQTJCQyxLQUEzQixFQUFmLEMsQ0FFQTs7QUFDQSxNQUFNQyxNQUFNLEdBQUcs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cG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IGRpc2tGcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB3ZWJwYWNrLCB7IE11bHRpQ29tcGlsZXIgfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCB3ZWJwYWNrSG90TWlkZGxld2FyZSBmcm9tICd3ZWJwYWNrLWhvdC1taWRkbGV3YXJlJztcbmltcG9ydCB7IGNyZWF0ZUZzRnJvbVZvbHVtZSwgVm9sdW1lIH0gZnJvbSAnbWVtZnMnO1xuaW1wb3J0IHsgU2VydmVyLCBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgZXhwcmVzcywgeyBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7IHBhdGNoUmVxdWlyZSB9IGZyb20gJ2ZzLW1vbmtleSc7XG5pbXBvcnQgdG1wIGZyb20gJ3RtcCc7XG5pbXBvcnQgc291cmNlTWFwU3VwcG9ydCBmcm9tICdzb3VyY2UtbWFwLXN1cHBvcnQnO1xuaW1wb3J0IHsgdWZzIH0gZnJvbSAndW5pb25mcyc7XG5pbXBvcnQgY29tcHJlc3MgZnJvbSAnY29tcHJlc3Npb24nO1xuXG5pbXBvcnQgJ2Nyb3NzLWZldGNoL3BvbHlmaWxsJztcbmltcG9ydCB7IFJlbmRlciB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuY29uc3Qgd2VicGFja0NvbmZpZyA9IHJlcXVpcmUocmVxdWlyZS5yZXNvbHZlKFxuICAvLyBUT0RPOiB1c2Ugbm9ybWFsIHJlc29sdXRpb24gYWxnb3JpdGhtIHRvIGZpbmQgd2VicGFjayBmaWxlXG4gIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcnKSxcbikpO1xuXG5jb25zdCBlbnRyeXBvaW50ID0gcHJvY2Vzcy5hcmd2WzJdO1xuY29uc3QgUE9SVCA9IHByb2Nlc3MuZW52LlBPUlQgfHwgMzAwMDtcbnByb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX0hPU1QgPSBgaHR0cDovL2xvY2FsaG9zdDoke1BPUlR9YDtcbnByb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggPSAnL2Fzc2V0cy8nO1xuXG5pZiAoIWVudHJ5cG9pbnQpIHtcbiAgY29uc29sZS5sb2coYFVzYWdlOiAke3Byb2Nlc3MuYXJndlswXX0gPGVudHJ5cG9pbnQtZmlsZT5gKTtcbiAgcHJvY2Vzcy5leGl0KC0xKTtcbn1cblxuY29uc3QgbG9hZGVyID0gb3JhKCdCdWlsZGluZyB0aGUgYXNzZXRzJykuc3RhcnQoKTtcblxuLy8gU2V0IHVwIGluIG1lbW9yeSBmaWxlc3lzdGVtXG5jb25zdCB2b2x1bWUgPSBuZXcgVm9sdW1lKCk7XG5jb25zdCBmcyA9IGNyZWF0ZUZzRnJvbVZvbHVtZSh2b2x1bWUpO1xudWZzLnVzZShkaXNrRnMpLnVzZShmcyBhcyBhbnkpO1xuXG5wYXRjaFJlcXVpcmUodWZzKTtcbmNvbnN0IHJlYWRGaWxlID0gcHJvbWlzaWZ5KHVmcy5yZWFkRmlsZSk7XG5sZXQgc2VydmVyOiBTZXJ2ZXIgfCB1bmRlZmluZWQ7XG5cbi8vIEdlbmVyYXRlIGEgdGVtcG9yYXJ5IGZpbGUgc28gd2UgY2FuIGhvdCByZWxvYWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgYXBwbGljYXRpb25cbmZ1bmN0aW9uIGhvdEVudHJ5KGVudHJ5UGF0aDogc3RyaW5nKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAvLyBAdHMtaWdub3JlIGZvciBzb21lIHJlYXNvbiBpdCdzIG5vdCBwaWNraW5nIHVwIHRoYXQgb3RoZXIgb3B0aW9ucyBhcmUgb3B0aW9uYWxcbiAgY29uc3QgZ2VuZXJhdGVkRW50cnlwb2ludCA9IHRtcC5maWxlU3luYyh7IHBvc3RmaXg6ICcuanMnIH0pO1xuICBkaXNrRnMud3JpdGVTeW5jKFxuICAgIGdlbmVyYXRlZEVudHJ5cG9pbnQuZmQsXG4gICAgYFxuaW1wb3J0IGVudHJ5IGZyb20gXCIke3BhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBlbnRyeVBhdGgpfVwiO1xuXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlbnRyeTtcbiAgYCxcbiAgKTtcbiAgcmV0dXJuIGdlbmVyYXRlZEVudHJ5cG9pbnQ7XG59XG5cbmNvbnN0IHdlYnBhY2tDb25maWdzID0gW1xuICB3ZWJwYWNrQ29uZmlnKFxuICAgIHtcbiAgICAgIGVudHJ5cG9pbnQ6IGhvdEVudHJ5KGVudHJ5cG9pbnQpLm5hbWUsXG4gICAgICBuYW1lOiAnY2xpZW50JyxcbiAgICB9LFxuICAgIHsgbW9kZTogJ2RldmVsb3BtZW50JyB9LFxuICApLFxuICB3ZWJwYWNrQ29uZmlnKFxuICAgIHtcbiAgICAgIGVudHJ5cG9pbnQ6IGhvdEVudHJ5KGVudHJ5cG9pbnQucmVwbGFjZSgnLnRzeCcsICcuc2VydmVyLnRzeCcpKS5uYW1lLFxuICAgICAgbmFtZTogJ3NlcnZlcicsXG4gICAgfSxcbiAgICB7IG1vZGU6ICdkZXZlbG9wbWVudCcsIHRhcmdldDogJ25vZGUnIH0sXG4gICksXG5dIGFzIGNvbnN0O1xuLy8gaW5pdGlhbGl6ZSB0aGUgd2VicGFjayBjb21waWxlclxuY29uc3QgY29tcGlsZXI6IE11bHRpQ29tcGlsZXIgPSB3ZWJwYWNrKHdlYnBhY2tDb25maWdzKTtcblxuY29tcGlsZXIub3V0cHV0RmlsZVN5c3RlbSA9IHtcbiAgLi4uZnMsXG4gIGpvaW46IHBhdGguam9pbiBhcyBhbnksXG59IGFzIGFueSBhcyB0eXBlb2YgZnM7XG5cbnNvdXJjZU1hcFN1cHBvcnQuaW5zdGFsbCh7IGhvb2tSZXF1aXJlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBnZXRTZXJ2ZXJCdW5kbGUoc2VydmVyU3RhdHM6IHdlYnBhY2suU3RhdHMpIHtcbiAgY29uc3Qgc2VydmVySnNvbiA9IHNlcnZlclN0YXRzLnRvSnNvbih7IGFzc2V0czogdHJ1ZSB9KTtcbiAgcmV0dXJuIHBhdGguam9pbihzZXJ2ZXJKc29uLm91dHB1dFBhdGggPz8gJycsICdtYWluLmpzJyk7XG59XG5mdW5jdGlvbiBoYW5kbGVFcnJvcnM8XG4gIEYgZXh0ZW5kcyAoXG4gICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgKSA9PiBQcm9taXNlPHZvaWQ+LFxuPihmbjogRikge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKFxuICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICByZXM6IFJlc3BvbnNlIHwgU2VydmVyUmVzcG9uc2UsXG4gICAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuICApIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZuKHJlcSwgcmVzKTtcbiAgICB9IGNhdGNoICh4KSB7XG4gICAgICBuZXh0KHgpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gU3RhcnQgdGhlIGV4cHJlc3Mgc2VydmVyIGFmdGVyIHRoZSBmaXJzdCBjb21waWxhdGlvblxuZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcChzdGF0czogd2VicGFjay5TdGF0c1tdKSB7XG4gIGxvYWRlci5pbmZvKCdMYXVuY2hpbmcgc2VydmVyJyk7XG4gIGNvbnN0IFtjbGllbnRTdGF0cywgc2VydmVyU3RhdHNdID0gc3RhdHM7XG4gIGlmIChcbiAgICBjbGllbnRTdGF0cz8uY29tcGlsYXRpb24/LmVycm9ycz8ubGVuZ3RoIHx8XG4gICAgc2VydmVyU3RhdHM/LmNvbXBpbGF0aW9uPy5lcnJvcnM/Lmxlbmd0aFxuICApIHtcbiAgICBjb25zb2xlLmxvZygnRXJyb3JzIGZvciBjbGllbnQgYnVpbGQ6ICcsIGNsaWVudFN0YXRzLmNvbXBpbGF0aW9uLmVycm9ycyk7XG4gICAgY29uc29sZS5sb2coJ0Vycm9ycyBmb3Igc2VydmVyIGJ1aWxkOicsIHNlcnZlclN0YXRzLmNvbXBpbGF0aW9uLmVycm9ycyk7XG4gICAgLy8gVE9ETzogaGFuZGxlIG1vcmUgZ3JhY2VmdWxseVxuICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gIH1cblxuICBjb25zdCB3cmFwcGluZ0FwcCA9IGV4cHJlc3MoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIC8vQHRzLWlnbm9yZVxuICB3cmFwcGluZ0FwcC51c2UoY29tcHJlc3MoKSk7XG5cbiAgLy8gQVNTRVRTXG4gIHdyYXBwaW5nQXBwLnVzZShcbiAgICB3ZWJwYWNrSG90TWlkZGxld2FyZShjb21waWxlci5jb21waWxlcnNbMF0sIHtcbiAgICAgIGxvZzogY29uc29sZS5sb2csXG4gICAgICBwYXRoOiAnL19fd2VicGFja19obXInLFxuICAgICAgaGVhcnRiZWF0OiAxMCAqIDEwMDAsXG4gICAgICAvL25vSW5mbzogdHJ1ZSxcbiAgICAgIC8vbmFtZTogJ2NsaWVudCcsXG4gICAgfSksXG4gICk7XG4gIGNvbnN0IGNsaWVudE1hbmlmZXN0ID0gY2xpZW50U3RhdHMudG9Kc29uKCk7XG4gIGNvbnN0IGFzc2V0Um91dGUgPSBhc3luYyAocmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLCByZXM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lID1cbiAgICAgIHJlcS51cmw/LnN1YnN0cigocHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCBhcyBzdHJpbmcpLmxlbmd0aCkgPz8gJyc7XG4gICAgY29uc3QgYXNzZXRQYXRoID0gcGF0aC5qb2luKGNsaWVudE1hbmlmZXN0Lm91dHB1dFBhdGggPz8gJycsIGZpbGVuYW1lKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlQ29udGVudCA9IChhd2FpdCByZWFkRmlsZShhc3NldFBhdGgpKS50b1N0cmluZygpO1xuICAgICAgcmVzLmNvbnRlbnRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIHJlcy5zZW5kKGZpbGVDb250ZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICByZXMuc2VuZChlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH07XG4gIHdyYXBwaW5nQXBwLmdldChgJHtwcm9jZXNzLmVudi5XRUJQQUNLX1BVQkxJQ19QQVRIfSpgLCBhc3NldFJvdXRlKTtcblxuICAvLyBTRVJWRVIgU0lERSBSRU5ERVJJTkdcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgY29uc3QgcmVuZGVyOiBSZW5kZXIgPSByZXF1aXJlKGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0cykpLmRlZmF1bHQ7XG4gIHdyYXBwaW5nQXBwLmdldChcbiAgICAnLyonLFxuICAgIGhhbmRsZUVycm9ycyhhc3luYyBmdW5jdGlvbiAocmVxOiBhbnksIHJlczogYW55KSB7XG4gICAgICBpZiAocmVxLnVybC5lbmRzV2l0aCgnZmF2aWNvbi5pY28nKSkge1xuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDQwNDtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICByZXMuc2VuZCgnbm90IGZvdW5kJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlcy5zb2NrZXQub24oJ2Vycm9yJywgKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhdGFsJywgZXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHJlbmRlcihjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMpO1xuICAgIH0pLFxuICApO1xuXG4gIHNlcnZlciA9IHdyYXBwaW5nQXBwXG4gICAgLmxpc3RlbihQT1JULCAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgTGlzdGVuaW5nIGF0ICR7UE9SVH0uLi5gKTtcbiAgICB9KVxuICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKGVycm9yLnN5c2NhbGwgIT09ICdsaXN0ZW4nKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNQaXBlID0gKHBvcnRPclBpcGU6IHN0cmluZyB8IG51bWJlcikgPT4gTnVtYmVyLmlzTmFOKHBvcnRPclBpcGUpO1xuICAgICAgY29uc3QgYmluZCA9IGlzUGlwZShQT1JUKSA/ICdQaXBlICcgKyBQT1JUIDogJ1BvcnQgJyArIFBPUlQ7XG4gICAgICBzd2l0Y2ggKGVycm9yLmNvZGUpIHtcbiAgICAgICAgY2FzZSAnRUFDQ0VTJzpcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGJpbmQgKyAnIHJlcXVpcmVzIGVsZXZhdGVkIHByaXZpbGVnZXMnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0VBRERSSU5VU0UnOlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYmluZCArICcgaXMgYWxyZWFkeSBpbiB1c2UnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbi8vIFdhdGNoIHRoZSBmaWxlcyBmb3IgY2hhbmdlc1xuY29uc3Qgd2F0Y2hlciA9IGNvbXBpbGVyLndhdGNoKHt9LCAoZXJyLCBtdWx0aVN0YXRzKSA9PiB7XG4gIGlmICghbXVsdGlTdGF0cykge1xuICAgIGNvbnNvbGUuZXJyb3IoJ3N0YXRzIG5vdCBzZW5kJyk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfVxuICBpZiAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gIH1cbiAgaWYgKHNlcnZlcikge1xuICAgIGxvYWRlci5zdWNjZWVkKCdXZWJwYWNrIGJ1bmRsZSB1cGRhdGVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgaW5pdGlhbGl6ZUFwcChtdWx0aVN0YXRzLnN0YXRzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIGFwcCcpO1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gIH1cbn0pO1xuXG5wcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gIGxvYWRlci53YXJuKCdSZWNlaXZlZCBTSUdJTlQsIGRldnNlcnZlciBzaHV0dGluZyBkb3duJyk7XG4gIGlmIChzZXJ2ZXIpIGNvbnNvbGUubG9nKCdDbG9zaW5nIHNlcnZlcicpO1xuICBzZXJ2ZXI/LmNsb3NlKCgpID0+IHtcbiAgICBsb2FkZXIuaW5mbygnU2VydmVyIGNsb3NlZCcpO1xuICB9KTtcbiAgd2F0Y2hlci5jbG9zZSgoKSA9PiB7XG4gICAgbG9hZGVyLmluZm8oJ3dlYnBhY2sgYnVpbGQgc3RvcHBlZCcpO1xuICB9KTtcbiAgcHJvY2Vzcy5leGl0KC0xKTtcbn0pO1xuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
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
|
+
//# 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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
};
|
|
12
|
+
declare function Document({ assets, head, children, title }: Props): JSX.Element;
|
|
13
|
+
declare namespace Document {
|
|
14
|
+
var defaultProps: {
|
|
15
|
+
head: JSX.Element;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export default Document;
|
|
19
|
+
//# 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;CACf,CAAC;AAEF,iBAAwB,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,eA0BxE;kBA1BuB,QAAQ;;;;;eAAR,QAAQ"}
|