UNPKG

3.21 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.printDrainHydrateMarks = exports.waitForMarks = exports.rehydrateMarks = exports.drainHydrateMarks = exports.getUsedMarks = exports.assignLoadableMark = exports.consumeMark = void 0;
4var stream_1 = require("./stream");
5var utils_1 = require("./utils");
6var LOADABLE_MARKS = new Map();
7var consumeMark = function (stream, marks) {
8 if (stream === void 0) { stream = stream_1.defaultStream; }
9 (0, stream_1.checkStream)(stream);
10 if (marks && marks.length) {
11 marks.forEach(function (a) { return (stream.marks[a] = true); });
12 }
13};
14exports.consumeMark = consumeMark;
15var assignLoadableMark = function (mark, loadable) {
16 LOADABLE_MARKS.set(JSON.stringify(mark), { mark: mark, loadable: loadable });
17};
18exports.assignLoadableMark = assignLoadableMark;
19/**
20 * returns marks used in the stream
21 * @param stream
22 */
23var getUsedMarks = function (stream) {
24 if (stream === void 0) { stream = stream_1.defaultStream; }
25 return (stream ? Object.keys(stream.marks) : []);
26};
27exports.getUsedMarks = getUsedMarks;
28/**
29 * SSR
30 * @returns list or marks used
31 */
32var drainHydrateMarks = function (stream) {
33 if (stream === void 0) { stream = stream_1.defaultStream; }
34 (0, stream_1.checkStream)(stream);
35 var marks = (0, exports.getUsedMarks)(stream);
36 (0, stream_1.clearStream)(stream);
37 return marks;
38};
39exports.drainHydrateMarks = drainHydrateMarks;
40/**
41 * Loads a given marks/chunks
42 * @see returns a promise for a given marks only. In order to await all requests currently in flight use {@link waitForMarks}
43 * @param marks
44 * @returns a resolution promise
45 */
46var rehydrateMarks = function (marks) {
47 var rehydratedMarks = marks || global.___REACT_DEFERRED_COMPONENT_MARKS || [];
48 var tasks = [];
49 var usedMarks = new Set();
50 LOADABLE_MARKS.forEach(function (_a) {
51 var mark = _a.mark, loadable = _a.loadable;
52 if ((0, utils_1.markerOverlap)(mark, rehydratedMarks)) {
53 mark.forEach(function (m) { return usedMarks.add(m); });
54 tasks.push(loadable.load());
55 }
56 });
57 rehydratedMarks.forEach(function (m) {
58 if (!usedMarks.has(m)) {
59 throw new Error("react-imported-component: unknown mark(" + m + ") has been used. Client and Server should have the same babel configuration.");
60 }
61 });
62 return Promise.all(tasks);
63};
64exports.rehydrateMarks = rehydrateMarks;
65/**
66 * waits for the given marks to load
67 * @param marks
68 */
69var waitForMarks = function (marks) {
70 var tasks = [];
71 LOADABLE_MARKS.forEach(function (_a) {
72 var mark = _a.mark, loadable = _a.loadable;
73 if ((0, utils_1.markerOverlap)(mark, marks)) {
74 tasks.push(loadable.resolution);
75 }
76 });
77 return Promise.all(tasks);
78};
79exports.waitForMarks = waitForMarks;
80/**
81 * @returns a <script> tag with all used marks
82 */
83var printDrainHydrateMarks = function (stream) {
84 (0, stream_1.checkStream)(stream);
85 return "<script>window.___REACT_DEFERRED_COMPONENT_MARKS=" + JSON.stringify((0, exports.drainHydrateMarks)(stream)) + ";</script>";
86};
87exports.printDrainHydrateMarks = printDrainHydrateMarks;