@plumile/site 0.2.3 → 0.2.5
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 +102 -29
- package/lib/esm/node/httpResponse.d.ts +4 -0
- package/lib/esm/node/httpResponse.d.ts.map +1 -0
- package/lib/esm/node/httpResponse.js +29 -0
- package/lib/esm/node/index.d.ts +4 -48
- package/lib/esm/node/index.d.ts.map +1 -1
- package/lib/esm/node/index.js +4 -102
- package/lib/esm/node/renderSiteRequest.d.ts +4 -0
- package/lib/esm/node/renderSiteRequest.d.ts.map +1 -0
- package/lib/esm/node/renderSiteRequest.js +293 -0
- package/lib/esm/node/types.d.ts +106 -0
- package/lib/esm/node/types.d.ts.map +1 -0
- package/lib/esm/node/types.js +2 -0
- package/lib/esm/node/writeStaticSite.d.ts +3 -0
- package/lib/esm/node/writeStaticSite.d.ts.map +1 -0
- package/lib/esm/node/writeStaticSite.js +77 -0
- package/lib/esm/runtime/hydrationPayload.d.ts +8 -0
- package/lib/esm/runtime/hydrationPayload.d.ts.map +1 -0
- package/lib/esm/runtime/hydrationPayload.js +81 -0
- package/lib/esm/runtime/index.d.ts +36 -28
- package/lib/esm/runtime/index.d.ts.map +1 -1
- package/lib/esm/runtime/index.js +92 -78
- package/lib/esm/runtime/scrollRestoration.d.ts +12 -0
- package/lib/esm/runtime/scrollRestoration.d.ts.map +1 -0
- package/lib/esm/runtime/scrollRestoration.js +66 -0
- package/lib/esm/vite/index.d.ts +3 -1
- package/lib/esm/vite/index.d.ts.map +1 -1
- package/lib/esm/vite/index.js +23 -5
- package/lib/esm/vite/resolveSiteAssetsFromViteManifest.d.ts +14 -0
- package/lib/esm/vite/resolveSiteAssetsFromViteManifest.d.ts.map +1 -0
- package/lib/esm/vite/resolveSiteAssetsFromViteManifest.js +81 -0
- package/lib/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/node/httpResponse.d.ts +4 -0
- package/lib/types/node/httpResponse.d.ts.map +1 -0
- package/lib/types/node/index.d.ts +4 -48
- package/lib/types/node/index.d.ts.map +1 -1
- package/lib/types/node/renderSiteRequest.d.ts +4 -0
- package/lib/types/node/renderSiteRequest.d.ts.map +1 -0
- package/lib/types/node/types.d.ts +106 -0
- package/lib/types/node/types.d.ts.map +1 -0
- package/lib/types/node/writeStaticSite.d.ts +3 -0
- package/lib/types/node/writeStaticSite.d.ts.map +1 -0
- package/lib/types/runtime/hydrationPayload.d.ts +8 -0
- package/lib/types/runtime/hydrationPayload.d.ts.map +1 -0
- package/lib/types/runtime/index.d.ts +36 -28
- package/lib/types/runtime/index.d.ts.map +1 -1
- package/lib/types/runtime/scrollRestoration.d.ts +12 -0
- package/lib/types/runtime/scrollRestoration.d.ts.map +1 -0
- package/lib/types/vite/index.d.ts +3 -1
- package/lib/types/vite/index.d.ts.map +1 -1
- package/lib/types/vite/resolveSiteAssetsFromViteManifest.d.ts +14 -0
- package/lib/types/vite/resolveSiteAssetsFromViteManifest.d.ts.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export function readHydrationPayload(document) {
|
|
2
|
+
const elements = document.querySelectorAll('#__PLUMILE_SITE__');
|
|
3
|
+
if (elements.length !== 1) {
|
|
4
|
+
throw new Error('Expected exactly one Plumile site hydration payload');
|
|
5
|
+
}
|
|
6
|
+
const text = document.getElementById('__PLUMILE_SITE__')?.textContent;
|
|
7
|
+
if (text == null || text.trim() === '') {
|
|
8
|
+
throw new Error('Plumile site hydration payload is empty');
|
|
9
|
+
}
|
|
10
|
+
let value;
|
|
11
|
+
try {
|
|
12
|
+
value = JSON.parse(text);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
throw new Error('Plumile site hydration payload is invalid JSON');
|
|
16
|
+
}
|
|
17
|
+
assertHydrationPayload(value);
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
function assertHydrationPayload(value) {
|
|
21
|
+
if (typeof value !== 'object' || value == null) {
|
|
22
|
+
throw new Error('Plumile site hydration payload is malformed');
|
|
23
|
+
}
|
|
24
|
+
const payload = value;
|
|
25
|
+
assertExactKeys(payload, ['version', 'routePath', 'router']);
|
|
26
|
+
if (payload.version !== 1 || typeof payload.routePath !== 'string') {
|
|
27
|
+
throw new Error('Plumile site hydration payload is malformed');
|
|
28
|
+
}
|
|
29
|
+
const router = payload.router;
|
|
30
|
+
if (typeof router?.version !== 'number' ||
|
|
31
|
+
router.version !== 1 ||
|
|
32
|
+
!Array.isArray(router.segments)) {
|
|
33
|
+
throw new Error('Plumile site router hydration payload is malformed');
|
|
34
|
+
}
|
|
35
|
+
const location = router.location;
|
|
36
|
+
if (typeof location !== 'object' ||
|
|
37
|
+
location == null ||
|
|
38
|
+
typeof location.pathname !== 'string' ||
|
|
39
|
+
typeof location.search !== 'string' ||
|
|
40
|
+
typeof location.hash !== 'string') {
|
|
41
|
+
throw new Error('Plumile site router hydration payload is malformed');
|
|
42
|
+
}
|
|
43
|
+
router.segments.forEach((segment) => {
|
|
44
|
+
if (typeof segment !== 'object' ||
|
|
45
|
+
segment == null ||
|
|
46
|
+
typeof segment.key !== 'string' ||
|
|
47
|
+
!('prepared' in segment)) {
|
|
48
|
+
throw new Error('Plumile site router hydration payload is malformed');
|
|
49
|
+
}
|
|
50
|
+
assertJsonValue(segment.prepared);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function assertExactKeys(value, expected) {
|
|
54
|
+
const expectedKeys = new Set(expected);
|
|
55
|
+
if (Object.keys(value).length !== expected.length ||
|
|
56
|
+
Object.keys(value).some((key) => {
|
|
57
|
+
return !expectedKeys.has(key);
|
|
58
|
+
})) {
|
|
59
|
+
throw new Error('Plumile site hydration payload is malformed');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function assertJsonValue(value) {
|
|
63
|
+
if (value == null ||
|
|
64
|
+
typeof value === 'string' ||
|
|
65
|
+
typeof value === 'boolean') {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (Array.isArray(value)) {
|
|
72
|
+
value.forEach(assertJsonValue);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (typeof value !== 'object' ||
|
|
76
|
+
Object.getPrototypeOf(value) !== Object.prototype) {
|
|
77
|
+
throw new Error('Plumile site router hydration payload is malformed');
|
|
78
|
+
}
|
|
79
|
+
Object.values(value).forEach(assertJsonValue);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uUGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW50aW1lL2h5ZHJhdGlvblBheWxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxRQUFrQjtJQUVsQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNoRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQ3RFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCxJQUFJLEtBQWMsQ0FBQztJQUNuQixJQUFJLENBQUM7UUFDSCxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQVksQ0FBQztJQUN0QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFHRCxTQUFTLHNCQUFzQixDQUM3QixLQUFjO0lBRWQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsTUFB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LENBQUMsS0FBSyxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFDakQsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUm91dGVySHlkcmF0aW9uU25hcHNob3QgfSBmcm9tICdAcGx1bWlsZS9yb3V0ZXIvdHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBQbHVtaWxlU2l0ZUh5ZHJhdGlvblBheWxvYWQgPSB7XG4gIHZlcnNpb246IDE7XG4gIHJvdXRlUGF0aDogc3RyaW5nO1xuICByb3V0ZXI6IFJvdXRlckh5ZHJhdGlvblNuYXBzaG90O1xufTtcblxuLyoqIFJlYWRzIGFuZCB2YWxpZGF0ZXMgdGhlIHNlcnZlci1wcm92aWRlZCBoeWRyYXRpb24gcGF5bG9hZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkSHlkcmF0aW9uUGF5bG9hZChcbiAgZG9jdW1lbnQ6IERvY3VtZW50LFxuKTogUGx1bWlsZVNpdGVIeWRyYXRpb25QYXlsb2FkIHtcbiAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjX19QTFVNSUxFX1NJVEVfXycpO1xuICBpZiAoZWxlbWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBleGFjdGx5IG9uZSBQbHVtaWxlIHNpdGUgaHlkcmF0aW9uIHBheWxvYWQnKTtcbiAgfVxuICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19fUExVTUlMRV9TSVRFX18nKT8udGV4dENvbnRlbnQ7XG4gIGlmICh0ZXh0ID09IG51bGwgfHwgdGV4dC50cmltKCkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQbHVtaWxlIHNpdGUgaHlkcmF0aW9uIHBheWxvYWQgaXMgZW1wdHknKTtcbiAgfVxuICBsZXQgdmFsdWU6IHVua25vd247XG4gIHRyeSB7XG4gICAgdmFsdWUgPSBKU09OLnBhcnNlKHRleHQpIGFzIHVua25vd247XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcignUGx1bWlsZSBzaXRlIGh5ZHJhdGlvbiBwYXlsb2FkIGlzIGludmFsaWQgSlNPTicpO1xuICB9XG4gIGFzc2VydEh5ZHJhdGlvblBheWxvYWQodmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKiBWYWxpZGF0ZXMgdGhlIGNvbXBsZXRlIGh5ZHJhdGlvbiBwYXlsb2FkIGJvdW5kYXJ5LiAqL1xuZnVuY3Rpb24gYXNzZXJ0SHlkcmF0aW9uUGF5bG9hZChcbiAgdmFsdWU6IHVua25vd24sXG4pOiBhc3NlcnRzIHZhbHVlIGlzIFBsdW1pbGVTaXRlSHlkcmF0aW9uUGF5bG9hZCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsdW1pbGUgc2l0ZSBoeWRyYXRpb24gcGF5bG9hZCBpcyBtYWxmb3JtZWQnKTtcbiAgfVxuICBjb25zdCBwYXlsb2FkID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGFzc2VydEV4YWN0S2V5cyhwYXlsb2FkLCBbJ3ZlcnNpb24nLCAncm91dGVQYXRoJywgJ3JvdXRlciddKTtcbiAgaWYgKHBheWxvYWQudmVyc2lvbiAhPT0gMSB8fCB0eXBlb2YgcGF5bG9hZC5yb3V0ZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQbHVtaWxlIHNpdGUgaHlkcmF0aW9uIHBheWxvYWQgaXMgbWFsZm9ybWVkJyk7XG4gIH1cbiAgY29uc3Qgcm91dGVyID0gcGF5bG9hZC5yb3V0ZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdHlwZW9mIHJvdXRlcj8udmVyc2lvbiAhPT0gJ251bWJlcicgfHxcbiAgICByb3V0ZXIudmVyc2lvbiAhPT0gMSB8fFxuICAgICFBcnJheS5pc0FycmF5KHJvdXRlci5zZWdtZW50cylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQbHVtaWxlIHNpdGUgcm91dGVyIGh5ZHJhdGlvbiBwYXlsb2FkIGlzIG1hbGZvcm1lZCcpO1xuICB9XG4gIGNvbnN0IGxvY2F0aW9uID0gcm91dGVyLmxvY2F0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgaWYgKFxuICAgIHR5cGVvZiBsb2NhdGlvbiAhPT0gJ29iamVjdCcgfHxcbiAgICBsb2NhdGlvbiA9PSBudWxsIHx8XG4gICAgdHlwZW9mIGxvY2F0aW9uLnBhdGhuYW1lICE9PSAnc3RyaW5nJyB8fFxuICAgIHR5cGVvZiBsb2NhdGlvbi5zZWFyY2ggIT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIGxvY2F0aW9uLmhhc2ggIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGx1bWlsZSBzaXRlIHJvdXRlciBoeWRyYXRpb24gcGF5bG9hZCBpcyBtYWxmb3JtZWQnKTtcbiAgfVxuICByb3V0ZXIuc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBzZWdtZW50ICE9PSAnb2JqZWN0JyB8fFxuICAgICAgc2VnbWVudCA9PSBudWxsIHx8XG4gICAgICB0eXBlb2YgKHNlZ21lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmtleSAhPT0gJ3N0cmluZycgfHxcbiAgICAgICEoJ3ByZXBhcmVkJyBpbiBzZWdtZW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbHVtaWxlIHNpdGUgcm91dGVyIGh5ZHJhdGlvbiBwYXlsb2FkIGlzIG1hbGZvcm1lZCcpO1xuICAgIH1cbiAgICBhc3NlcnRKc29uVmFsdWUoKHNlZ21lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnByZXBhcmVkKTtcbiAgfSk7XG59XG5cbi8qKiBSZXF1aXJlcyBhbiBvYmplY3QgdG8gY29udGFpbiBleGFjdGx5IHRoZSBleHBlY3RlZCBrZXlzLiAqL1xuZnVuY3Rpb24gYXNzZXJ0RXhhY3RLZXlzKFxuICB2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGV4cGVjdGVkOiByZWFkb25seSBzdHJpbmdbXSxcbik6IHZvaWQge1xuICBjb25zdCBleHBlY3RlZEtleXMgPSBuZXcgU2V0KGV4cGVjdGVkKTtcbiAgaWYgKFxuICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggIT09IGV4cGVjdGVkLmxlbmd0aCB8fFxuICAgIE9iamVjdC5rZXlzKHZhbHVlKS5zb21lKChrZXkpID0+IHtcbiAgICAgIHJldHVybiAhZXhwZWN0ZWRLZXlzLmhhcyhrZXkpO1xuICAgIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGx1bWlsZSBzaXRlIGh5ZHJhdGlvbiBwYXlsb2FkIGlzIG1hbGZvcm1lZCcpO1xuICB9XG59XG5cbi8qKiBSZWplY3RzIHZhbHVlcyBvdXRzaWRlIHRoZSBmaW5pdGUgSlNPTiBoeWRyYXRpb24gY29udHJhY3QuICovXG5mdW5jdGlvbiBhc3NlcnRKc29uVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKFxuICAgIHZhbHVlID09IG51bGwgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChhc3NlcnRKc29uVmFsdWUpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoXG4gICAgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fFxuICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgIT09IE9iamVjdC5wcm90b3R5cGVcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQbHVtaWxlIHNpdGUgcm91dGVyIGh5ZHJhdGlvbiBwYXlsb2FkIGlzIG1hbGZvcm1lZCcpO1xuICB9XG4gIE9iamVjdC52YWx1ZXModmFsdWUpLmZvckVhY2goYXNzZXJ0SnNvblZhbHVlKTtcbn1cbiJdfQ==
|
|
@@ -1,35 +1,26 @@
|
|
|
1
|
-
import { type PlumileSiteManifest } from '../manifest/index.js';
|
|
2
1
|
import type { ComponentType, ReactElement, ReactNode, createElement } from 'react';
|
|
3
2
|
import type { hydrateRoot } from 'react-dom/client';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
export type LinkClickLike = {
|
|
11
|
-
altKey?: boolean;
|
|
12
|
-
button?: number;
|
|
13
|
-
ctrlKey?: boolean;
|
|
14
|
-
metaKey?: boolean;
|
|
15
|
-
shiftKey?: boolean;
|
|
16
|
-
};
|
|
17
|
-
export type BrowserNavigationEvent = LinkClickLike & {
|
|
18
|
-
currentTarget?: EventTarget | null;
|
|
19
|
-
preventDefault?: () => void;
|
|
20
|
-
};
|
|
3
|
+
import type { ParamData } from 'path-to-regexp';
|
|
4
|
+
import type { RouteEntry, RouteNode, RouterHydrationSnapshot } from '@plumile/router/types.js';
|
|
5
|
+
import { type PlumileSiteHydrationPayload } from './hydrationPayload.js';
|
|
6
|
+
export type { PlumileSiteHydrationPayload } from './hydrationPayload.js';
|
|
7
|
+
export { createScrollRestoration, type SiteScrollRestoration, } from './scrollRestoration.js';
|
|
21
8
|
export type HydrateSiteRuntime = {
|
|
22
9
|
createElement: typeof createElement;
|
|
23
10
|
hydrateRoot: typeof hydrateRoot;
|
|
24
11
|
};
|
|
25
12
|
export type HydrateSiteRouterModule<TContext> = {
|
|
26
|
-
createRouter: (routes:
|
|
13
|
+
createRouter: (routes: RouteNode[], options: {
|
|
27
14
|
context?: TContext;
|
|
15
|
+
getContext?: () => TContext;
|
|
16
|
+
hydrationSnapshot: RouterHydrationSnapshot;
|
|
28
17
|
}) => {
|
|
29
18
|
context: unknown;
|
|
19
|
+
cleanup?: () => void;
|
|
30
20
|
};
|
|
31
21
|
RouterRenderer: ComponentType<{
|
|
32
22
|
fallback?: ReactNode;
|
|
23
|
+
onRouteCommit?: (entry: RouteEntry<ParamData>) => void;
|
|
33
24
|
}>;
|
|
34
25
|
RoutingContext: {
|
|
35
26
|
Provider: ComponentType<{
|
|
@@ -38,21 +29,38 @@ export type HydrateSiteRouterModule<TContext> = {
|
|
|
38
29
|
}>;
|
|
39
30
|
};
|
|
40
31
|
};
|
|
41
|
-
export type HydrateSiteOptions<TContext
|
|
42
|
-
|
|
32
|
+
export type HydrateSiteOptions<TContext> = {
|
|
33
|
+
routes: RouteNode[];
|
|
43
34
|
context?: TContext;
|
|
44
|
-
|
|
35
|
+
getContext?: () => TContext;
|
|
45
36
|
fallback?: ReactElement | string | null;
|
|
46
|
-
|
|
47
|
-
|
|
37
|
+
container?: Element;
|
|
38
|
+
document?: Document;
|
|
48
39
|
runtime?: HydrateSiteRuntime;
|
|
49
40
|
routerModule?: HydrateSiteRouterModule<TContext>;
|
|
50
|
-
|
|
51
|
-
window?: Window;
|
|
41
|
+
onRouteCommit?: (entry: RouteEntry<ParamData>) => void;
|
|
52
42
|
};
|
|
53
43
|
export type HydrateSiteResult = {
|
|
54
|
-
|
|
44
|
+
payload: PlumileSiteHydrationPayload;
|
|
55
45
|
routerContext: unknown;
|
|
46
|
+
cleanup?: () => void;
|
|
47
|
+
};
|
|
48
|
+
export type InternalLinkDecision = {
|
|
49
|
+
external: boolean;
|
|
50
|
+
hashOnly: boolean;
|
|
51
|
+
modified: boolean;
|
|
52
|
+
shouldHandle: boolean;
|
|
53
|
+
};
|
|
54
|
+
export type LinkClickLike = {
|
|
55
|
+
altKey?: boolean;
|
|
56
|
+
button?: number;
|
|
57
|
+
ctrlKey?: boolean;
|
|
58
|
+
metaKey?: boolean;
|
|
59
|
+
shiftKey?: boolean;
|
|
60
|
+
};
|
|
61
|
+
export type BrowserNavigationEvent = LinkClickLike & {
|
|
62
|
+
currentTarget?: EventTarget | null;
|
|
63
|
+
preventDefault?: () => void;
|
|
56
64
|
};
|
|
57
65
|
export type SiteSearchIndexEntry = {
|
|
58
66
|
content?: string;
|
|
@@ -70,13 +78,13 @@ export type SiteSearchIndex = {
|
|
|
70
78
|
export type SiteSearchResult = SiteSearchIndexEntry & {
|
|
71
79
|
score: number;
|
|
72
80
|
};
|
|
81
|
+
export declare function hydratePlumileSite<TContext = unknown>(options: HydrateSiteOptions<TContext>): Promise<HydrateSiteResult>;
|
|
73
82
|
export declare function shouldHandleSiteNavigation(href: string, currentUrl: string, event?: LinkClickLike): InternalLinkDecision;
|
|
74
83
|
export declare function normalizeSitePath(pathname: string): string;
|
|
75
84
|
export declare function searchSiteIndex(index: SiteSearchIndex, query: string, options?: {
|
|
76
85
|
locale?: string;
|
|
77
86
|
limit?: number;
|
|
78
87
|
}): SiteSearchResult[];
|
|
79
|
-
export declare function hydratePlumileSite<TContext = unknown>(options: HydrateSiteOptions<TContext>): Promise<HydrateSiteResult>;
|
|
80
88
|
export declare function attachSiteNavigationHandler(input: {
|
|
81
89
|
currentUrl: string;
|
|
82
90
|
event: BrowserNavigationEvent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/runtime/index.js
CHANGED
|
@@ -1,4 +1,57 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readHydrationPayload, } from './hydrationPayload.js';
|
|
2
|
+
export { createScrollRestoration, } from './scrollRestoration.js';
|
|
3
|
+
export async function hydratePlumileSite(options) {
|
|
4
|
+
const doc = options.document ?? globalThis.document;
|
|
5
|
+
const container = options.container ?? doc.getElementById('root') ?? undefined;
|
|
6
|
+
if (container == null) {
|
|
7
|
+
throw new Error('Cannot hydrate Plumile site without a root container');
|
|
8
|
+
}
|
|
9
|
+
const payload = readHydrationPayload(doc);
|
|
10
|
+
const win = doc.defaultView ?? globalThis.window;
|
|
11
|
+
if (payload.routePath !== win.location.pathname) {
|
|
12
|
+
throw new Error('Plumile site route path does not match window location');
|
|
13
|
+
}
|
|
14
|
+
const browserSearchValue = win.location.search;
|
|
15
|
+
const browserHashValue = win.location.hash;
|
|
16
|
+
let browserSearch = '';
|
|
17
|
+
let browserHash = '';
|
|
18
|
+
if (typeof browserSearchValue === 'string') {
|
|
19
|
+
browserSearch = browserSearchValue;
|
|
20
|
+
}
|
|
21
|
+
if (typeof browserHashValue === 'string') {
|
|
22
|
+
browserHash = browserHashValue;
|
|
23
|
+
}
|
|
24
|
+
let hydrationSnapshot = payload.router;
|
|
25
|
+
if (payload.router.segments.length === 0 &&
|
|
26
|
+
(payload.router.location.search !== browserSearch ||
|
|
27
|
+
payload.router.location.hash !== browserHash)) {
|
|
28
|
+
hydrationSnapshot = {
|
|
29
|
+
...payload.router,
|
|
30
|
+
location: {
|
|
31
|
+
pathname: win.location.pathname,
|
|
32
|
+
search: browserSearch,
|
|
33
|
+
hash: browserHash,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const runtime = options.runtime ?? (await loadHydrateRuntime());
|
|
38
|
+
const routerModule = options.routerModule ?? (await loadHydrateRouterModule());
|
|
39
|
+
const router = routerModule.createRouter(options.routes, {
|
|
40
|
+
context: options.context,
|
|
41
|
+
getContext: options.getContext,
|
|
42
|
+
hydrationSnapshot,
|
|
43
|
+
});
|
|
44
|
+
const element = runtime.createElement(routerModule.RoutingContext.Provider, { value: router.context }, runtime.createElement(routerModule.RouterRenderer, {
|
|
45
|
+
fallback: options.fallback ?? null,
|
|
46
|
+
onRouteCommit: options.onRouteCommit,
|
|
47
|
+
}));
|
|
48
|
+
runtime.hydrateRoot(container, element);
|
|
49
|
+
return {
|
|
50
|
+
payload,
|
|
51
|
+
routerContext: router.context,
|
|
52
|
+
cleanup: router.cleanup,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
2
55
|
export function shouldHandleSiteNavigation(href, currentUrl, event = {}) {
|
|
3
56
|
const modified = event.altKey === true ||
|
|
4
57
|
event.ctrlKey === true ||
|
|
@@ -21,33 +74,31 @@ export function shouldHandleSiteNavigation(href, currentUrl, event = {}) {
|
|
|
21
74
|
}
|
|
22
75
|
export function normalizeSitePath(pathname) {
|
|
23
76
|
const trimmed = pathname.trim();
|
|
24
|
-
if (trimmed === '')
|
|
77
|
+
if (trimmed === '')
|
|
25
78
|
return '/';
|
|
26
|
-
}
|
|
27
79
|
const normalized = `/${trimmed}`.replace(/\/+/g, '/');
|
|
28
|
-
if (normalized === '/')
|
|
29
|
-
return normalized;
|
|
30
|
-
}
|
|
31
|
-
if (normalized.endsWith('/')) {
|
|
80
|
+
if (normalized === '/' || normalized.endsWith('/'))
|
|
32
81
|
return normalized;
|
|
33
|
-
}
|
|
34
82
|
return `${normalized}/`;
|
|
35
83
|
}
|
|
36
84
|
export function searchSiteIndex(index, query, options = {}) {
|
|
37
|
-
const terms =
|
|
38
|
-
|
|
85
|
+
const terms = query
|
|
86
|
+
.toLocaleLowerCase()
|
|
87
|
+
.split(/\s+/)
|
|
88
|
+
.map((term) => {
|
|
89
|
+
return term.trim();
|
|
90
|
+
})
|
|
91
|
+
.filter((term) => {
|
|
92
|
+
return term !== '';
|
|
93
|
+
});
|
|
94
|
+
if (terms.length === 0)
|
|
39
95
|
return [];
|
|
40
|
-
}
|
|
41
|
-
const limit = options.limit ?? 10;
|
|
42
96
|
return index.entries
|
|
43
97
|
.filter((entry) => {
|
|
44
98
|
return options.locale == null || entry.locale === options.locale;
|
|
45
99
|
})
|
|
46
100
|
.map((entry) => {
|
|
47
|
-
return {
|
|
48
|
-
...entry,
|
|
49
|
-
score: scoreSearchEntry(entry, terms),
|
|
50
|
-
};
|
|
101
|
+
return { ...entry, score: scoreSearchEntry(entry, terms) };
|
|
51
102
|
})
|
|
52
103
|
.filter((entry) => {
|
|
53
104
|
return entry.score > 0;
|
|
@@ -59,30 +110,7 @@ export function searchSiteIndex(index, query, options = {}) {
|
|
|
59
110
|
}
|
|
60
111
|
return left.path.localeCompare(right.path);
|
|
61
112
|
})
|
|
62
|
-
.slice(0, limit);
|
|
63
|
-
}
|
|
64
|
-
export async function hydratePlumileSite(options) {
|
|
65
|
-
const doc = options.document ?? globalThis.document;
|
|
66
|
-
const win = options.window ?? globalThis.window;
|
|
67
|
-
const container = options.container ?? doc.getElementById('root');
|
|
68
|
-
if (container == null) {
|
|
69
|
-
throw new Error('Cannot hydrate Plumile site without a root container');
|
|
70
|
-
}
|
|
71
|
-
const manifest = options.manifest ??
|
|
72
|
-
readSerializedSiteManifest(win, options.manifestGlobalName);
|
|
73
|
-
const runtime = options.runtime ?? (await loadHydrateRuntime());
|
|
74
|
-
const routerModule = options.routerModule ?? (await loadHydrateRouterModule());
|
|
75
|
-
const router = routerModule.createRouter(options.routes, {
|
|
76
|
-
context: options.context,
|
|
77
|
-
});
|
|
78
|
-
const element = runtime.createElement(routerModule.RoutingContext.Provider, { value: router.context }, runtime.createElement(routerModule.RouterRenderer, {
|
|
79
|
-
fallback: options.fallback ?? null,
|
|
80
|
-
}));
|
|
81
|
-
runtime.hydrateRoot(container, element);
|
|
82
|
-
return {
|
|
83
|
-
manifest,
|
|
84
|
-
routerContext: router.context,
|
|
85
|
-
};
|
|
113
|
+
.slice(0, options.limit ?? 10);
|
|
86
114
|
}
|
|
87
115
|
export function attachSiteNavigationHandler(input) {
|
|
88
116
|
const href = readAnchorHref(input.event.currentTarget);
|
|
@@ -95,23 +123,13 @@ export function attachSiteNavigationHandler(input) {
|
|
|
95
123
|
};
|
|
96
124
|
}
|
|
97
125
|
const decision = shouldHandleSiteNavigation(href, input.currentUrl, input.event);
|
|
98
|
-
if (!decision.shouldHandle)
|
|
126
|
+
if (!decision.shouldHandle)
|
|
99
127
|
return decision;
|
|
100
|
-
}
|
|
101
128
|
input.event.preventDefault?.();
|
|
102
129
|
const target = new URL(href, input.currentUrl);
|
|
103
130
|
input.navigate(`${target.pathname}${target.search}${target.hash}`);
|
|
104
131
|
return decision;
|
|
105
132
|
}
|
|
106
|
-
function normalizeSearchTerms(query) {
|
|
107
|
-
return query
|
|
108
|
-
.toLocaleLowerCase()
|
|
109
|
-
.split(/\s+/)
|
|
110
|
-
.map((term) => {
|
|
111
|
-
return term.trim();
|
|
112
|
-
})
|
|
113
|
-
.filter(Boolean);
|
|
114
|
-
}
|
|
115
133
|
function scoreSearchEntry(entry, terms) {
|
|
116
134
|
const title = entry.title.toLocaleLowerCase();
|
|
117
135
|
const description = entry.description?.toLocaleLowerCase() ?? '';
|
|
@@ -122,40 +140,29 @@ function scoreSearchEntry(entry, terms) {
|
|
|
122
140
|
.join(' ')
|
|
123
141
|
.toLocaleLowerCase() ?? '';
|
|
124
142
|
const content = entry.content?.toLocaleLowerCase() ?? '';
|
|
125
|
-
|
|
126
|
-
|
|
143
|
+
return terms.reduce((score, term) => {
|
|
144
|
+
let termScore = 0;
|
|
127
145
|
if (title.includes(term)) {
|
|
128
|
-
|
|
146
|
+
termScore += 8;
|
|
129
147
|
}
|
|
130
148
|
if (headings.includes(term)) {
|
|
131
|
-
|
|
149
|
+
termScore += 4;
|
|
132
150
|
}
|
|
133
151
|
if (description.includes(term)) {
|
|
134
|
-
|
|
152
|
+
termScore += 2;
|
|
135
153
|
}
|
|
136
154
|
if (content.includes(term)) {
|
|
137
|
-
|
|
155
|
+
termScore += 1;
|
|
138
156
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
function readSerializedSiteManifest(windowValue, globalName = '__PLUMILE_SITE__') {
|
|
143
|
-
if (windowValue == null) {
|
|
144
|
-
throw new Error('Cannot read Plumile site manifest without window');
|
|
145
|
-
}
|
|
146
|
-
const value = Reflect.get(windowValue, globalName);
|
|
147
|
-
assertSiteManifest(value);
|
|
148
|
-
return value;
|
|
157
|
+
return score + termScore;
|
|
158
|
+
}, 0);
|
|
149
159
|
}
|
|
150
160
|
function readAnchorHref(target) {
|
|
151
|
-
|
|
152
|
-
|
|
161
|
+
const href = target?.href;
|
|
162
|
+
if (typeof href === 'string' && href !== '') {
|
|
163
|
+
return href;
|
|
153
164
|
}
|
|
154
|
-
|
|
155
|
-
if (typeof value.href !== 'string' || value.href === '') {
|
|
156
|
-
return null;
|
|
157
|
-
}
|
|
158
|
-
return value.href;
|
|
165
|
+
return null;
|
|
159
166
|
}
|
|
160
167
|
async function loadHydrateRuntime() {
|
|
161
168
|
const [reactModule, domModule] = await Promise.all([
|
|
@@ -168,8 +175,15 @@ async function loadHydrateRuntime() {
|
|
|
168
175
|
};
|
|
169
176
|
}
|
|
170
177
|
async function loadHydrateRouterModule() {
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
178
|
+
const [createRouterModule, rendererModule, contextModule] = await Promise.all([
|
|
179
|
+
import('@plumile/router/routing/createRouter.js'),
|
|
180
|
+
import('@plumile/router/routing/RouterRenderer.js'),
|
|
181
|
+
import('@plumile/router/routing/RoutingContext.js'),
|
|
182
|
+
]);
|
|
183
|
+
return {
|
|
184
|
+
createRouter: createRouterModule.default,
|
|
185
|
+
RouterRenderer: rendererModule.default,
|
|
186
|
+
RoutingContext: contextModule.default,
|
|
187
|
+
};
|
|
174
188
|
}
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVudGltZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsa0JBQWtCLEdBRW5CLE1BQU0sc0JBQXNCLENBQUM7QUF1RjlCLE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsSUFBWSxFQUNaLFVBQWtCLEVBQ2xCLEtBQUssR0FBa0IsRUFBRTtJQUV6QixNQUFNLFFBQVEsR0FDWixLQUFLLENBQUMsTUFBTSxLQUFLLElBQUk7UUFDckIsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJO1FBQ3RCLEtBQUssQ0FBQyxPQUFPLEtBQUssSUFBSTtRQUN0QixLQUFLLENBQUMsUUFBUSxLQUFLLElBQUk7UUFDdkIsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDaEQsTUFBTSxRQUFRLEdBQ1osQ0FBQyxRQUFRO1FBQ1QsSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsUUFBUTtRQUNsQyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNO1FBQzlCLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQztJQUU3QixPQUFPO1FBQ0wsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsWUFBWSxFQUFFLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUTtLQUNsRCxDQUFDO0FBQ0osQ0FBQztBQUtELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxRQUFnQjtJQUNoRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbkIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUksVUFBVSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDO0FBQzFCLENBQUM7QUFLRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixLQUFzQixFQUN0QixLQUFhLEVBQ2IsT0FBTyxHQUdILEVBQUU7SUFFTixNQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDbEMsT0FBTyxLQUFLLENBQUMsT0FBTztTQUNqQixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNoQixPQUFPLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNuRSxDQUFDLENBQUM7U0FDRCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNiLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztTQUN0QyxDQUFDO0lBQ0osQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDaEIsT0FBTyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDcEIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2pELElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUM7U0FDRCxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLENBQUM7QUFLRCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxPQUFxQztJQUVyQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDcEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ2hELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRSxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUNaLE9BQU8sQ0FBQyxRQUFRO1FBQ2hCLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxZQUFZLEdBQ2hCLE9BQU8sQ0FBQyxZQUFZLElBQUksQ0FBQyxNQUFNLHVCQUF1QixFQUFZLENBQUMsQ0FBQztJQUN0RSxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDdkQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0tBQ3pCLENBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQ25DLFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUNwQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQ3pCLE9BQU8sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRTtRQUNqRCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJO0tBQ25DLENBQUMsQ0FDSCxDQUFDO0lBQ0YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFeEMsT0FBTztRQUNMLFFBQVE7UUFDUixhQUFhLEVBQUUsTUFBTSxDQUFDLE9BQU87S0FDOUIsQ0FBQztBQUNKLENBQUM7QUFLRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsS0FJM0M7SUFDQyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNqQixPQUFPO1lBQ0wsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsS0FBSztZQUNmLFFBQVEsRUFBRSxLQUFLO1lBQ2YsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRywwQkFBMEIsQ0FDekMsSUFBSSxFQUNKLEtBQUssQ0FBQyxVQUFVLEVBQ2hCLEtBQUssQ0FBQyxLQUFLLENBQ1osQ0FBQztJQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztJQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUtELFNBQVMsb0JBQW9CLENBQUMsS0FBYTtJQUN6QyxPQUFPLEtBQUs7U0FDVCxpQkFBaUIsRUFBRTtTQUNuQixLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ1osR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUtELFNBQVMsZ0JBQWdCLENBQ3ZCLEtBQTJCLEVBQzNCLEtBQXdCO0lBRXhCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2pFLE1BQU0sUUFBUSxHQUNaLEtBQUssQ0FBQyxRQUFRO1FBQ1osRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNoQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDdEIsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNULGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDO0lBQy9CLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6QixLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2IsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVCLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDYixDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0IsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNiLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFLRCxTQUFTLDBCQUEwQixDQUNqQyxXQUErQixFQUMvQixVQUFVLEdBQUcsa0JBQWtCO0lBRS9CLElBQUksV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFZLENBQUM7SUFDOUQsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBS0QsU0FBUyxjQUFjLENBQUMsTUFBc0M7SUFDNUQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBNEIsQ0FBQztJQUMzQyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDcEIsQ0FBQztBQUtELEtBQUssVUFBVSxrQkFBa0I7SUFDL0IsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDakQsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNmLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztLQUMzQixDQUFDLENBQUM7SUFDSCxPQUFPO1FBQ0wsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUFhO1FBQ3hDLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztLQUNuQyxDQUFDO0FBQ0osQ0FBQztBQUtELEtBQUssVUFBVSx1QkFBdUI7SUFHcEMsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBWSxDQUFDO0lBQ2hFLE9BQU8sWUFBaUQsQ0FBQztBQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXNzZXJ0U2l0ZU1hbmlmZXN0LFxuICB0eXBlIFBsdW1pbGVTaXRlTWFuaWZlc3QsXG59IGZyb20gJy4uL21hbmlmZXN0L2luZGV4LmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50VHlwZSxcbiAgUmVhY3RFbGVtZW50LFxuICBSZWFjdE5vZGUsXG4gIGNyZWF0ZUVsZW1lbnQsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgaHlkcmF0ZVJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxMaW5rRGVjaXNpb24gPSB7XG4gIGV4dGVybmFsOiBib29sZWFuO1xuICBoYXNoT25seTogYm9vbGVhbjtcbiAgbW9kaWZpZWQ6IGJvb2xlYW47XG4gIHNob3VsZEhhbmRsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIExpbmtDbGlja0xpa2UgPSB7XG4gIGFsdEtleT86IGJvb2xlYW47XG4gIGJ1dHRvbj86IG51bWJlcjtcbiAgY3RybEtleT86IGJvb2xlYW47XG4gIG1ldGFLZXk/OiBib29sZWFuO1xuICBzaGlmdEtleT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcm93c2VyTmF2aWdhdGlvbkV2ZW50ID0gTGlua0NsaWNrTGlrZSAmIHtcbiAgY3VycmVudFRhcmdldD86IEV2ZW50VGFyZ2V0IHwgbnVsbDtcbiAgcHJldmVudERlZmF1bHQ/OiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgSHlkcmF0ZVNpdGVSdW50aW1lID0ge1xuICBjcmVhdGVFbGVtZW50OiB0eXBlb2YgY3JlYXRlRWxlbWVudDtcbiAgaHlkcmF0ZVJvb3Q6IHR5cGVvZiBoeWRyYXRlUm9vdDtcbn07XG5cbmV4cG9ydCB0eXBlIEh5ZHJhdGVTaXRlUm91dGVyTW9kdWxlPFRDb250ZXh0PiA9IHtcbiAgY3JlYXRlUm91dGVyOiAoXG4gICAgcm91dGVzOiB1bmtub3duW10sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGNvbnRleHQ/OiBUQ29udGV4dDtcbiAgICB9LFxuICApID0+IHtcbiAgICBjb250ZXh0OiB1bmtub3duO1xuICB9O1xuICBSb3V0ZXJSZW5kZXJlcjogQ29tcG9uZW50VHlwZTx7IGZhbGxiYWNrPzogUmVhY3ROb2RlIH0+O1xuICBSb3V0aW5nQ29udGV4dDoge1xuICAgIFByb3ZpZGVyOiBDb21wb25lbnRUeXBlPHsgdmFsdWU6IHVua25vd247IGNoaWxkcmVuPzogUmVhY3ROb2RlIH0+O1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgSHlkcmF0ZVNpdGVPcHRpb25zPFRDb250ZXh0ID0gdW5rbm93bj4gPSB7XG4gIGNvbnRhaW5lcj86IEVsZW1lbnQgfCBudWxsO1xuICBjb250ZXh0PzogVENvbnRleHQ7XG4gIGRvY3VtZW50PzogRG9jdW1lbnQ7XG4gIGZhbGxiYWNrPzogUmVhY3RFbGVtZW50IHwgc3RyaW5nIHwgbnVsbDtcbiAgbWFuaWZlc3Q/OiBQbHVtaWxlU2l0ZU1hbmlmZXN0O1xuICBtYW5pZmVzdEdsb2JhbE5hbWU/OiBzdHJpbmc7XG4gIHJ1bnRpbWU/OiBIeWRyYXRlU2l0ZVJ1bnRpbWU7XG4gIHJvdXRlck1vZHVsZT86IEh5ZHJhdGVTaXRlUm91dGVyTW9kdWxlPFRDb250ZXh0PjtcbiAgcm91dGVzOiB1bmtub3duW107XG4gIHdpbmRvdz86IFdpbmRvdztcbn07XG5cbmV4cG9ydCB0eXBlIEh5ZHJhdGVTaXRlUmVzdWx0ID0ge1xuICBtYW5pZmVzdDogUGx1bWlsZVNpdGVNYW5pZmVzdDtcbiAgcm91dGVyQ29udGV4dDogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFNpdGVTZWFyY2hJbmRleEVudHJ5ID0ge1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGw7XG4gIGhlYWRpbmdzPzogcmVhZG9ubHkgeyB0ZXh0OiBzdHJpbmcgfVtdO1xuICBsb2NhbGU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2l0ZVNlYXJjaEluZGV4ID0ge1xuICBlbnRyaWVzOiByZWFkb25seSBTaXRlU2VhcmNoSW5kZXhFbnRyeVtdO1xufTtcblxuZXhwb3J0IHR5cGUgU2l0ZVNlYXJjaFJlc3VsdCA9IFNpdGVTZWFyY2hJbmRleEVudHJ5ICYge1xuICBzY29yZTogbnVtYmVyO1xufTtcblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkSGFuZGxlU2l0ZU5hdmlnYXRpb24oXG4gIGhyZWY6IHN0cmluZyxcbiAgY3VycmVudFVybDogc3RyaW5nLFxuICBldmVudDogTGlua0NsaWNrTGlrZSA9IHt9LFxuKTogSW50ZXJuYWxMaW5rRGVjaXNpb24ge1xuICBjb25zdCBtb2RpZmllZCA9XG4gICAgZXZlbnQuYWx0S2V5ID09PSB0cnVlIHx8XG4gICAgZXZlbnQuY3RybEtleSA9PT0gdHJ1ZSB8fFxuICAgIGV2ZW50Lm1ldGFLZXkgPT09IHRydWUgfHxcbiAgICBldmVudC5zaGlmdEtleSA9PT0gdHJ1ZSB8fFxuICAgIChldmVudC5idXR0b24gIT0gbnVsbCAmJiBldmVudC5idXR0b24gIT09IDApO1xuXG4gIGNvbnN0IGN1cnJlbnQgPSBuZXcgVVJMKGN1cnJlbnRVcmwpO1xuICBjb25zdCBuZXh0ID0gbmV3IFVSTChocmVmLCBjdXJyZW50KTtcbiAgY29uc3QgZXh0ZXJuYWwgPSBuZXh0Lm9yaWdpbiAhPT0gY3VycmVudC5vcmlnaW47XG4gIGNvbnN0IGhhc2hPbmx5ID1cbiAgICAhZXh0ZXJuYWwgJiZcbiAgICBuZXh0LnBhdGhuYW1lID09PSBjdXJyZW50LnBhdGhuYW1lICYmXG4gICAgbmV4dC5zZWFyY2ggPT09IGN1cnJlbnQuc2VhcmNoICYmXG4gICAgbmV4dC5oYXNoICE9PSBjdXJyZW50Lmhhc2g7XG5cbiAgcmV0dXJuIHtcbiAgICBleHRlcm5hbCxcbiAgICBoYXNoT25seSxcbiAgICBtb2RpZmllZCxcbiAgICBzaG91bGRIYW5kbGU6ICFtb2RpZmllZCAmJiAhZXh0ZXJuYWwgJiYgIWhhc2hPbmx5LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTaXRlUGF0aChwYXRobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZCA9IHBhdGhuYW1lLnRyaW0oKTtcbiAgaWYgKHRyaW1tZWQgPT09ICcnKSB7XG4gICAgcmV0dXJuICcvJztcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gYC8ke3RyaW1tZWR9YC5yZXBsYWNlKC9cXC8rL2csICcvJyk7XG4gIGlmIChub3JtYWxpemVkID09PSAnLycpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuICBpZiAobm9ybWFsaXplZC5lbmRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cbiAgcmV0dXJuIGAke25vcm1hbGl6ZWR9L2A7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFNpdGVJbmRleChcbiAgaW5kZXg6IFNpdGVTZWFyY2hJbmRleCxcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3B0aW9uczoge1xuICAgIGxvY2FsZT86IHN0cmluZztcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgfSA9IHt9LFxuKTogU2l0ZVNlYXJjaFJlc3VsdFtdIHtcbiAgY29uc3QgdGVybXMgPSBub3JtYWxpemVTZWFyY2hUZXJtcyhxdWVyeSk7XG4gIGlmICh0ZXJtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0ID8/IDEwO1xuICByZXR1cm4gaW5kZXguZW50cmllc1xuICAgIC5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5sb2NhbGUgPT0gbnVsbCB8fCBlbnRyeS5sb2NhbGUgPT09IG9wdGlvbnMubG9jYWxlO1xuICAgIH0pXG4gICAgLm1hcCgoZW50cnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudHJ5LFxuICAgICAgICBzY29yZTogc2NvcmVTZWFyY2hFbnRyeShlbnRyeSwgdGVybXMpLFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgICByZXR1cm4gZW50cnkuc2NvcmUgPiAwO1xuICAgIH0pXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBzY29yZURpZmZlcmVuY2UgPSByaWdodC5zY29yZSAtIGxlZnQuc2NvcmU7XG4gICAgICBpZiAoc2NvcmVEaWZmZXJlbmNlICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzY29yZURpZmZlcmVuY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5wYXRoLmxvY2FsZUNvbXBhcmUocmlnaHQucGF0aCk7XG4gICAgfSlcbiAgICAuc2xpY2UoMCwgbGltaXQpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoeWRyYXRlUGx1bWlsZVNpdGU8VENvbnRleHQgPSB1bmtub3duPihcbiAgb3B0aW9uczogSHlkcmF0ZVNpdGVPcHRpb25zPFRDb250ZXh0Pixcbik6IFByb21pc2U8SHlkcmF0ZVNpdGVSZXN1bHQ+IHtcbiAgY29uc3QgZG9jID0gb3B0aW9ucy5kb2N1bWVudCA/PyBnbG9iYWxUaGlzLmRvY3VtZW50O1xuICBjb25zdCB3aW4gPSBvcHRpb25zLndpbmRvdyA/PyBnbG9iYWxUaGlzLndpbmRvdztcbiAgY29uc3QgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgPz8gZG9jLmdldEVsZW1lbnRCeUlkKCdyb290Jyk7XG4gIGlmIChjb250YWluZXIgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGh5ZHJhdGUgUGx1bWlsZSBzaXRlIHdpdGhvdXQgYSByb290IGNvbnRhaW5lcicpO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3QgPVxuICAgIG9wdGlvbnMubWFuaWZlc3QgPz9cbiAgICByZWFkU2VyaWFsaXplZFNpdGVNYW5pZmVzdCh3aW4sIG9wdGlvbnMubWFuaWZlc3RHbG9iYWxOYW1lKTtcbiAgY29uc3QgcnVudGltZSA9IG9wdGlvbnMucnVudGltZSA/PyAoYXdhaXQgbG9hZEh5ZHJhdGVSdW50aW1lKCkpO1xuICBjb25zdCByb3V0ZXJNb2R1bGUgPVxuICAgIG9wdGlvbnMucm91dGVyTW9kdWxlID8/IChhd2FpdCBsb2FkSHlkcmF0ZVJvdXRlck1vZHVsZTxUQ29udGV4dD4oKSk7XG4gIGNvbnN0IHJvdXRlciA9IHJvdXRlck1vZHVsZS5jcmVhdGVSb3V0ZXIob3B0aW9ucy5yb3V0ZXMsIHtcbiAgICBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsXG4gIH0pO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBydW50aW1lLmNyZWF0ZUVsZW1lbnQoXG4gICAgcm91dGVyTW9kdWxlLlJvdXRpbmdDb250ZXh0LlByb3ZpZGVyLFxuICAgIHsgdmFsdWU6IHJvdXRlci5jb250ZXh0IH0sXG4gICAgcnVudGltZS5jcmVhdGVFbGVtZW50KHJvdXRlck1vZHVsZS5Sb3V0ZXJSZW5kZXJlciwge1xuICAgICAgZmFsbGJhY2s6IG9wdGlvbnMuZmFsbGJhY2sgPz8gbnVsbCxcbiAgICB9KSxcbiAgKTtcbiAgcnVudGltZS5oeWRyYXRlUm9vdChjb250YWluZXIsIGVsZW1lbnQpO1xuXG4gIHJldHVybiB7XG4gICAgbWFuaWZlc3QsXG4gICAgcm91dGVyQ29udGV4dDogcm91dGVyLmNvbnRleHQsXG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaFNpdGVOYXZpZ2F0aW9uSGFuZGxlcihpbnB1dDoge1xuICBjdXJyZW50VXJsOiBzdHJpbmc7XG4gIGV2ZW50OiBCcm93c2VyTmF2aWdhdGlvbkV2ZW50O1xuICBuYXZpZ2F0ZTogKHBhdGhuYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG59KTogSW50ZXJuYWxMaW5rRGVjaXNpb24ge1xuICBjb25zdCBocmVmID0gcmVhZEFuY2hvckhyZWYoaW5wdXQuZXZlbnQuY3VycmVudFRhcmdldCk7XG4gIGlmIChocmVmID09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgaGFzaE9ubHk6IGZhbHNlLFxuICAgICAgbW9kaWZpZWQ6IGZhbHNlLFxuICAgICAgc2hvdWxkSGFuZGxlOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZGVjaXNpb24gPSBzaG91bGRIYW5kbGVTaXRlTmF2aWdhdGlvbihcbiAgICBocmVmLFxuICAgIGlucHV0LmN1cnJlbnRVcmwsXG4gICAgaW5wdXQuZXZlbnQsXG4gICk7XG4gIGlmICghZGVjaXNpb24uc2hvdWxkSGFuZGxlKSB7XG4gICAgcmV0dXJuIGRlY2lzaW9uO1xuICB9XG5cbiAgaW5wdXQuZXZlbnQucHJldmVudERlZmF1bHQ/LigpO1xuICBjb25zdCB0YXJnZXQgPSBuZXcgVVJMKGhyZWYsIGlucHV0LmN1cnJlbnRVcmwpO1xuICBpbnB1dC5uYXZpZ2F0ZShgJHt0YXJnZXQucGF0aG5hbWV9JHt0YXJnZXQuc2VhcmNofSR7dGFyZ2V0Lmhhc2h9YCk7XG4gIHJldHVybiBkZWNpc2lvbjtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTZWFyY2hUZXJtcyhxdWVyeTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gcXVlcnlcbiAgICAudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgodGVybSkgPT4ge1xuICAgICAgcmV0dXJuIHRlcm0udHJpbSgpO1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBzY29yZVNlYXJjaEVudHJ5KFxuICBlbnRyeTogU2l0ZVNlYXJjaEluZGV4RW50cnksXG4gIHRlcm1zOiByZWFkb25seSBzdHJpbmdbXSxcbik6IG51bWJlciB7XG4gIGNvbnN0IHRpdGxlID0gZW50cnkudGl0bGUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBlbnRyeS5kZXNjcmlwdGlvbj8udG9Mb2NhbGVMb3dlckNhc2UoKSA/PyAnJztcbiAgY29uc3QgaGVhZGluZ3MgPVxuICAgIGVudHJ5LmhlYWRpbmdzXG4gICAgICA/Lm1hcCgoaGVhZGluZykgPT4ge1xuICAgICAgICByZXR1cm4gaGVhZGluZy50ZXh0O1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcgJylcbiAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpID8/ICcnO1xuICBjb25zdCBjb250ZW50ID0gZW50cnkuY29udGVudD8udG9Mb2NhbGVMb3dlckNhc2UoKSA/PyAnJztcbiAgbGV0IHNjb3JlID0gMDtcbiAgZm9yIChjb25zdCB0ZXJtIG9mIHRlcm1zKSB7XG4gICAgaWYgKHRpdGxlLmluY2x1ZGVzKHRlcm0pKSB7XG4gICAgICBzY29yZSArPSA4O1xuICAgIH1cbiAgICBpZiAoaGVhZGluZ3MuaW5jbHVkZXModGVybSkpIHtcbiAgICAgIHNjb3JlICs9IDQ7XG4gICAgfVxuICAgIGlmIChkZXNjcmlwdGlvbi5pbmNsdWRlcyh0ZXJtKSkge1xuICAgICAgc2NvcmUgKz0gMjtcbiAgICB9XG4gICAgaWYgKGNvbnRlbnQuaW5jbHVkZXModGVybSkpIHtcbiAgICAgIHNjb3JlICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBzY29yZTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiByZWFkU2VyaWFsaXplZFNpdGVNYW5pZmVzdChcbiAgd2luZG93VmFsdWU6IFdpbmRvdyB8IHVuZGVmaW5lZCxcbiAgZ2xvYmFsTmFtZSA9ICdfX1BMVU1JTEVfU0lURV9fJyxcbik6IFBsdW1pbGVTaXRlTWFuaWZlc3Qge1xuICBpZiAod2luZG93VmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlYWQgUGx1bWlsZSBzaXRlIG1hbmlmZXN0IHdpdGhvdXQgd2luZG93Jyk7XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBSZWZsZWN0LmdldCh3aW5kb3dWYWx1ZSwgZ2xvYmFsTmFtZSkgYXMgdW5rbm93bjtcbiAgYXNzZXJ0U2l0ZU1hbmlmZXN0KHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIHJlYWRBbmNob3JIcmVmKHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gdGFyZ2V0IGFzIHsgaHJlZj86IHVua25vd24gfTtcbiAgaWYgKHR5cGVvZiB2YWx1ZS5ocmVmICE9PSAnc3RyaW5nJyB8fCB2YWx1ZS5ocmVmID09PSAnJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB2YWx1ZS5ocmVmO1xufVxuXG4vKipcbiAqXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRIeWRyYXRlUnVudGltZSgpOiBQcm9taXNlPEh5ZHJhdGVTaXRlUnVudGltZT4ge1xuICBjb25zdCBbcmVhY3RNb2R1bGUsIGRvbU1vZHVsZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgaW1wb3J0KCdyZWFjdCcpLFxuICAgIGltcG9ydCgncmVhY3QtZG9tL2NsaWVudCcpLFxuICBdKTtcbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVFbGVtZW50OiByZWFjdE1vZHVsZS5jcmVhdGVFbGVtZW50LFxuICAgIGh5ZHJhdGVSb290OiBkb21Nb2R1bGUuaHlkcmF0ZVJvb3QsXG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZEh5ZHJhdGVSb3V0ZXJNb2R1bGU8VENvbnRleHQ+KCk6IFByb21pc2U8XG4gIEh5ZHJhdGVTaXRlUm91dGVyTW9kdWxlPFRDb250ZXh0PlxuPiB7XG4gIGNvbnN0IHJvdXRlclNwZWNpZmllciA9ICdAcGx1bWlsZS9yb3V0ZXInO1xuICBjb25zdCByb3V0ZXJNb2R1bGUgPSAoYXdhaXQgaW1wb3J0KHJvdXRlclNwZWNpZmllcikpIGFzIHVua25vd247XG4gIHJldHVybiByb3V0ZXJNb2R1bGUgYXMgSHlkcmF0ZVNpdGVSb3V0ZXJNb2R1bGU8VENvbnRleHQ+O1xufVxuIl19
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVudGltZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFhQSxPQUFPLEVBQ0wsb0JBQW9CLEdBRXJCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUNMLHVCQUF1QixHQUV4QixNQUFNLHdCQUF3QixDQUFDO0FBMkVoQyxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxPQUFxQztJQUVyQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDcEQsTUFBTSxTQUFTLEdBQ2IsT0FBTyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUMvRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxXQUFXLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFpQixDQUFDO0lBQzFELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFlLENBQUM7SUFDdEQsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNyQixJQUFJLE9BQU8s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QUFrQixFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzNFO1FBQ0UsTUFBTSxDQUFDLHlDQUF5QyxDQUFDO1FBQ2pELE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQztRQUNuRCxNQUFNLENBQUMsMkNBQTJDLENBQUM7S0FDcEQsQ0FDRixDQUFDO0lBQ0YsT0FBTztRQUNMLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxPQUFPO1FBQ3hDLGNBQWMsRUFBRSxjQUFjLENBQUMsT0FBTztRQUN0QyxjQUFjLEVBQUUsYUFBYSxDQUFDLE9BQU87S0FDRCxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIENvbXBvbmVudFR5cGUsXG4gIFJlYWN0RWxlbWVudCxcbiAgUmVhY3ROb2RlLFxuICBjcmVhdGVFbGVtZW50LFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IGh5ZHJhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCB0eXBlIHtcbiAgUm91dGVFbnRyeSxcbiAgUm91dGVOb2RlLFxuICBSb3V0ZXJIeWRyYXRpb25TbmFwc2hvdCxcbn0gZnJvbSAnQHBsdW1pbGUvcm91dGVyL3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIHJlYWRIeWRyYXRpb25QYXlsb2FkLFxuICB0eXBlIFBsdW1pbGVTaXRlSHlkcmF0aW9uUGF5bG9hZCxcbn0gZnJvbSAnLi9oeWRyYXRpb25QYXlsb2FkLmpzJztcblxuZXhwb3J0IHR5cGUgeyBQbHVtaWxlU2l0ZUh5ZHJhdGlvblBheWxvYWQgfSBmcm9tICcuL2h5ZHJhdGlvblBheWxvYWQuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlU2Nyb2xsUmVzdG9yYXRpb24sXG4gIHR5cGUgU2l0ZVNjcm9sbFJlc3RvcmF0aW9uLFxufSBmcm9tICcuL3Njcm9sbFJlc3RvcmF0aW9uLmpzJztcblxuZXhwb3J0IHR5cGUgSHlkcmF0ZVNpdGVSdW50aW1lID0ge1xuICBjcmVhdGVFbGVtZW50OiB0eXBlb2YgY3JlYXRlRWxlbWVudDtcbiAgaHlkcmF0ZVJvb3Q6IHR5cGVvZiBoeWRyYXRlUm9vdDtcbn07XG5cbmV4cG9ydCB0eXBlIEh5ZHJhdGVTaXRlUm91dGVyTW9kdWxlPFRDb250ZXh0PiA9IHtcbiAgY3JlYXRlUm91dGVyOiAoXG4gICAgcm91dGVzOiBSb3V0ZU5vZGVbXSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjb250ZXh0PzogVENvbnRleHQ7XG4gICAgICBnZXRDb250ZXh0PzogKCkgPT4gVENvbnRleHQ7XG4gICAgICBoeWRyYXRpb25TbmFwc2hvdDogUm91dGVySHlkcmF0aW9uU25hcHNob3Q7XG4gICAgfSxcbiAgKSA9PiB7IGNvbnRleHQ6IHVua25vd247IGNsZWFudXA/OiAoKSA9PiB2b2lkIH07XG4gIFJvdXRlclJlbmRlcmVyOiBDb21wb25lbnRUeXBlPHtcbiAgICBmYWxsYmFjaz86IFJlYWN0Tm9kZTtcbiAgICBvblJvdXRlQ29tbWl0PzogKGVudHJ5OiBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4pID0+IHZvaWQ7XG4gIH0+O1xuICBSb3V0aW5nQ29udGV4dDoge1xuICAgIFByb3ZpZGVyOiBDb21wb25lbnRUeXBlPHsgdmFsdWU6IHVua25vd247IGNoaWxkcmVuPzogUmVhY3ROb2RlIH0+O1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgSHlkcmF0ZVNpdGVPcHRpb25zPFRDb250ZXh0PiA9IHtcbiAgcm91dGVzOiBSb3V0ZU5vZGVbXTtcbiAgY29udGV4dD86IFRDb250ZXh0O1xuICBnZXRDb250ZXh0PzogKCkgPT4gVENvbnRleHQ7XG4gIGZhbGxiYWNrPzogUmVhY3RFbGVtZW50IHwgc3RyaW5nIHwgbnVsbDtcbiAgY29udGFpbmVyPzogRWxlbWVudDtcbiAgZG9jdW1lbnQ/OiBEb2N1bWVudDtcbiAgcnVudGltZT86IEh5ZHJhdGVTaXRlUnVudGltZTtcbiAgcm91dGVyTW9kdWxlPzogSHlkcmF0ZVNpdGVSb3V0ZXJNb2R1bGU8VENvbnRleHQ+O1xuICBvblJvdXRlQ29tbWl0PzogKGVudHJ5OiBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4pID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBIeWRyYXRlU2l0ZVJlc3VsdCA9IHtcbiAgcGF5bG9hZDogUGx1bWlsZVNpdGVIeWRyYXRpb25QYXlsb2FkO1xuICByb3V0ZXJDb250ZXh0OiB1bmtub3duO1xuICBjbGVhbnVwPzogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIEludGVybmFsTGlua0RlY2lzaW9uID0ge1xuICBleHRlcm5hbDogYm9vbGVhbjtcbiAgaGFzaE9ubHk6IGJvb2xlYW47XG4gIG1vZGlmaWVkOiBib29sZWFuO1xuICBzaG91bGRIYW5kbGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBMaW5rQ2xpY2tMaWtlID0ge1xuICBhbHRLZXk/OiBib29sZWFuO1xuICBidXR0b24/OiBudW1iZXI7XG4gIGN0cmxLZXk/OiBib29sZWFuO1xuICBtZXRhS2V5PzogYm9vbGVhbjtcbiAgc2hpZnRLZXk/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQnJvd3Nlck5hdmlnYXRpb25FdmVudCA9IExpbmtDbGlja0xpa2UgJiB7XG4gIGN1cnJlbnRUYXJnZXQ/OiBFdmVudFRhcmdldCB8IG51bGw7XG4gIHByZXZlbnREZWZhdWx0PzogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIFNpdGVTZWFyY2hJbmRleEVudHJ5ID0ge1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGw7XG4gIGhlYWRpbmdzPzogcmVhZG9ubHkgeyB0ZXh0OiBzdHJpbmcgfVtdO1xuICBsb2NhbGU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFNpdGVTZWFyY2hJbmRleCA9IHsgZW50cmllczogcmVhZG9ubHkgU2l0ZVNlYXJjaEluZGV4RW50cnlbXSB9O1xuZXhwb3J0IHR5cGUgU2l0ZVNlYXJjaFJlc3VsdCA9IFNpdGVTZWFyY2hJbmRleEVudHJ5ICYgeyBzY29yZTogbnVtYmVyIH07XG5cbi8qKiBIeWRyYXRlcyBhIHNlcnZlci1yZW5kZXJlZCBzaXRlIHdpdGggdGhlIG1hdGNoaW5nIHJvdXRlciBzbmFwc2hvdC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoeWRyYXRlUGx1bWlsZVNpdGU8VENvbnRleHQgPSB1bmtub3duPihcbiAgb3B0aW9uczogSHlkcmF0ZVNpdGVPcHRpb25zPFRDb250ZXh0Pixcbik6IFByb21pc2U8SHlkcmF0ZVNpdGVSZXN1bHQ+IHtcbiAgY29uc3QgZG9jID0gb3B0aW9ucy5kb2N1bWVudCA/PyBnbG9iYWxUaGlzLmRvY3VtZW50O1xuICBjb25zdCBjb250YWluZXIgPVxuICAgIG9wdGlvbnMuY29udGFpbmVyID8/IGRvYy5nZXRFbGVtZW50QnlJZCgncm9vdCcpID8/IHVuZGVmaW5lZDtcbiAgaWYgKGNvbnRhaW5lciA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaHlkcmF0ZSBQbHVtaWxlIHNpdGUgd2l0aG91dCBhIHJvb3QgY29udGFpbmVyJyk7XG4gIH1cbiAgY29uc3QgcGF5bG9hZCA9IHJlYWRIeWRyYXRpb25QYXlsb2FkKGRvYyk7XG4gIGNvbnN0IHdpbiA9IGRvYy5kZWZhdWx0VmlldyA/PyBnbG9iYWxUaGlzLndpbmRvdztcbiAgaWYgKHBheWxvYWQucm91dGVQYXRoICE9PSB3aW4ubG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsdW1pbGUgc2l0ZSByb3V0ZSBwYXRoIGRvZXMgbm90IG1hdGNoIHdpbmRvdyBsb2NhdGlvbicpO1xuICB9XG4gIGNvbnN0IGJyb3dzZXJTZWFyY2hWYWx1ZSA9IHdpbi5sb2NhdGlvbi5zZWFyY2ggYXMgdW5rbm93bjtcbiAgY29uc3QgYnJvd3Nlckhhc2hWYWx1ZSA9IHdpbi5sb2NhdGlvbi5oYXNoIGFzIHVua25vd247XG4gIGxldCBicm93c2VyU2VhcmNoID0gJyc7XG4gIGxldCBicm93c2VySGFzaCA9ICcnO1xuICBpZiAodHlwZW9mIGJyb3dzZXJTZWFyY2hWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBicm93c2VyU2VhcmNoID0gYnJvd3NlclNlYXJjaFZhbHVlO1xuICB9XG4gIGlmICh0eXBlb2YgYnJvd3Nlckhhc2hWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBicm93c2VySGFzaCA9IGJyb3dzZXJIYXNoVmFsdWU7XG4gIH1cbiAgbGV0IGh5ZHJhdGlvblNuYXBzaG90ID0gcGF5bG9hZC5yb3V0ZXI7XG4gIGlmIChcbiAgICBwYXlsb2FkLnJvdXRlci5zZWdtZW50cy5sZW5ndGggPT09IDAgJiZcbiAgICAocGF5bG9hZC5yb3V0ZXIubG9jYXRpb24uc2VhcmNoICE9PSBicm93c2VyU2VhcmNoIHx8XG4gICAgICBwYXlsb2FkLnJvdXRlci5sb2NhdGlvbi5oYXNoICE9PSBicm93c2VySGFzaClcbiAgKSB7XG4gICAgaHlkcmF0aW9uU25hcHNob3QgPSB7XG4gICAgICAuLi5wYXlsb2FkLnJvdXRlcixcbiAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIHBhdGhuYW1lOiB3aW4ubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogYnJvd3NlclNlYXJjaCxcbiAgICAgICAgaGFzaDogYnJvd3Nlckhhc2gsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgY29uc3QgcnVudGltZSA9IG9wdGlvbnMucnVudGltZSA/PyAoYXdhaXQgbG9hZEh5ZHJhdGVSdW50aW1lKCkpO1xuICBjb25zdCByb3V0ZXJNb2R1bGUgPVxuICAgIG9wdGlvbnMucm91dGVyTW9kdWxlID8/IChhd2FpdCBsb2FkSHlkcmF0ZVJvdXRlck1vZHVsZTxUQ29udGV4dD4oKSk7XG4gIGNvbnN0IHJvdXRlciA9IHJvdXRlck1vZHVsZS5jcmVhdGVSb3V0ZXIob3B0aW9ucy5yb3V0ZXMsIHtcbiAgICBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsXG4gICAgZ2V0Q29udGV4dDogb3B0aW9ucy5nZXRDb250ZXh0LFxuICAgIGh5ZHJhdGlvblNuYXBzaG90LFxuICB9KTtcbiAgY29uc3QgZWxlbWVudCA9IHJ1bnRpbWUuY3JlYXRlRWxlbWVudChcbiAgICByb3V0ZXJNb2R1bGUuUm91dGluZ0NvbnRleHQuUHJvdmlkZXIsXG4gICAgeyB2YWx1ZTogcm91dGVyLmNvbnRleHQgfSxcbiAgICBydW50aW1lLmNyZWF0ZUVsZW1lbnQocm91dGVyTW9kdWxlLlJvdXRlclJlbmRlcmVyLCB7XG4gICAgICBmYWxsYmFjazogb3B0aW9ucy5mYWxsYmFjayA/PyBudWxsLFxuICAgICAgb25Sb3V0ZUNvbW1pdDogb3B0aW9ucy5vblJvdXRlQ29tbWl0LFxuICAgIH0pLFxuICApO1xuICBydW50aW1lLmh5ZHJhdGVSb290KGNvbnRhaW5lciwgZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgcGF5bG9hZCxcbiAgICByb3V0ZXJDb250ZXh0OiByb3V0ZXIuY29udGV4dCxcbiAgICBjbGVhbnVwOiByb3V0ZXIuY2xlYW51cCxcbiAgfTtcbn1cblxuLyoqIENsYXNzaWZpZXMgYSBsaW5rIGZvciBjbGllbnQtc2lkZSBzaXRlIG5hdmlnYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkSGFuZGxlU2l0ZU5hdmlnYXRpb24oXG4gIGhyZWY6IHN0cmluZyxcbiAgY3VycmVudFVybDogc3RyaW5nLFxuICBldmVudDogTGlua0NsaWNrTGlrZSA9IHt9LFxuKTogSW50ZXJuYWxMaW5rRGVjaXNpb24ge1xuICBjb25zdCBtb2RpZmllZCA9XG4gICAgZXZlbnQuYWx0S2V5ID09PSB0cnVlIHx8XG4gICAgZXZlbnQuY3RybEtleSA9PT0gdHJ1ZSB8fFxuICAgIGV2ZW50Lm1ldGFLZXkgPT09IHRydWUgfHxcbiAgICBldmVudC5zaGlmdEtleSA9PT0gdHJ1ZSB8fFxuICAgIChldmVudC5idXR0b24gIT0gbnVsbCAmJiBldmVudC5idXR0b24gIT09IDApO1xuICBjb25zdCBjdXJyZW50ID0gbmV3IFVSTChjdXJyZW50VXJsKTtcbiAgY29uc3QgbmV4dCA9IG5ldyBVUkwoaHJlZiwgY3VycmVudCk7XG4gIGNvbnN0IGV4dGVybmFsID0gbmV4dC5vcmlnaW4gIT09IGN1cnJlbnQub3JpZ2luO1xuICBjb25zdCBoYXNoT25seSA9XG4gICAgIWV4dGVybmFsICYmXG4gICAgbmV4dC5wYXRobmFtZSA9PT0gY3VycmVudC5wYXRobmFtZSAmJlxuICAgIG5leHQuc2VhcmNoID09PSBjdXJyZW50LnNlYXJjaCAmJlxuICAgIG5leHQuaGFzaCAhPT0gY3VycmVudC5oYXNoO1xuICByZXR1cm4ge1xuICAgIGV4dGVybmFsLFxuICAgIGhhc2hPbmx5LFxuICAgIG1vZGlmaWVkLFxuICAgIHNob3VsZEhhbmRsZTogIW1vZGlmaWVkICYmICFleHRlcm5hbCAmJiAhaGFzaE9ubHksXG4gIH07XG59XG5cbi8qKiBOb3JtYWxpemVzIGEgc2l0ZSBwYXRobmFtZSB0byBpdHMgY2Fub25pY2FsIHRyYWlsaW5nLXNsYXNoIGZvcm0uICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU2l0ZVBhdGgocGF0aG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWQgPSBwYXRobmFtZS50cmltKCk7XG4gIGlmICh0cmltbWVkID09PSAnJykgcmV0dXJuICcvJztcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGAvJHt0cmltbWVkfWAucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xuICBpZiAobm9ybWFsaXplZCA9PT0gJy8nIHx8IG5vcm1hbGl6ZWQuZW5kc1dpdGgoJy8nKSkgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIHJldHVybiBgJHtub3JtYWxpemVkfS9gO1xufVxuXG4vKiogU2NvcmVzIGFuZCBvcmRlcnMgbWF0Y2hpbmcgZW50cmllcyBmcm9tIHRoZSBzdGF0aWMgc2VhcmNoIGluZGV4LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFNpdGVJbmRleChcbiAgaW5kZXg6IFNpdGVTZWFyY2hJbmRleCxcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3B0aW9uczogeyBsb2NhbGU/OiBzdHJpbmc7IGxpbWl0PzogbnVtYmVyIH0gPSB7fSxcbik6IFNpdGVTZWFyY2hSZXN1bHRbXSB7XG4gIGNvbnN0IHRlcm1zID0gcXVlcnlcbiAgICAudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgodGVybSkgPT4ge1xuICAgICAgcmV0dXJuIHRlcm0udHJpbSgpO1xuICAgIH0pXG4gICAgLmZpbHRlcigodGVybSkgPT4ge1xuICAgICAgcmV0dXJuIHRlcm0gIT09ICcnO1xuICAgIH0pO1xuICBpZiAodGVybXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIHJldHVybiBpbmRleC5lbnRyaWVzXG4gICAgLmZpbHRlcigoZW50cnkpID0+IHtcbiAgICAgIHJldHVybiBvcHRpb25zLmxvY2FsZSA9PSBudWxsIHx8IGVudHJ5LmxvY2FsZSA9PT0gb3B0aW9ucy5sb2NhbGU7XG4gICAgfSlcbiAgICAubWFwKChlbnRyeSkgPT4ge1xuICAgICAgcmV0dXJuIHsgLi4uZW50cnksIHNjb3JlOiBzY29yZVNlYXJjaEVudHJ5KGVudHJ5LCB0ZXJtcykgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgICByZXR1cm4gZW50cnkuc2NvcmUgPiAwO1xuICAgIH0pXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgICBjb25zdCBzY29yZURpZmZlcmVuY2UgPSByaWdodC5zY29yZSAtIGxlZnQuc2NvcmU7XG4gICAgICBpZiAoc2NvcmVEaWZmZXJlbmNlICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzY29yZURpZmZlcmVuY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5wYXRoLmxvY2FsZUNvbXBhcmUocmlnaHQucGF0aCk7XG4gICAgfSlcbiAgICAuc2xpY2UoMCwgb3B0aW9ucy5saW1pdCA/PyAxMCk7XG59XG5cbi8qKiBIYW5kbGVzIGFuIGVsaWdpYmxlIGFuY2hvciBldmVudCB3aXRoIHRoZSBzdXBwbGllZCByb3V0ZXIgY2FsbGJhY2suICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoU2l0ZU5hdmlnYXRpb25IYW5kbGVyKGlucHV0OiB7XG4gIGN1cnJlbnRVcmw6IHN0cmluZztcbiAgZXZlbnQ6IEJyb3dzZXJOYXZpZ2F0aW9uRXZlbnQ7XG4gIG5hdmlnYXRlOiAocGF0aG5hbWU6IHN0cmluZykgPT4gdm9pZDtcbn0pOiBJbnRlcm5hbExpbmtEZWNpc2lvbiB7XG4gIGNvbnN0IGhyZWYgPSByZWFkQW5jaG9ySHJlZihpbnB1dC5ldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgaWYgKGhyZWYgPT0gbnVsbCkge1xuICAgIHJldHVybiB7XG4gICAgICBleHRlcm5hbDogZmFsc2UsXG4gICAgICBoYXNoT25seTogZmFsc2UsXG4gICAgICBtb2RpZmllZDogZmFsc2UsXG4gICAgICBzaG91bGRIYW5kbGU6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgY29uc3QgZGVjaXNpb24gPSBzaG91bGRIYW5kbGVTaXRlTmF2aWdhdGlvbihcbiAgICBocmVmLFxuICAgIGlucHV0LmN1cnJlbnRVcmwsXG4gICAgaW5wdXQuZXZlbnQsXG4gICk7XG4gIGlmICghZGVjaXNpb24uc2hvdWxkSGFuZGxlKSByZXR1cm4gZGVjaXNpb247XG4gIGlucHV0LmV2ZW50LnByZXZlbnREZWZhdWx0Py4oKTtcbiAgY29uc3QgdGFyZ2V0ID0gbmV3IFVSTChocmVmLCBpbnB1dC5jdXJyZW50VXJsKTtcbiAgaW5wdXQubmF2aWdhdGUoYCR7dGFyZ2V0LnBhdGhuYW1lfSR7dGFyZ2V0LnNlYXJjaH0ke3RhcmdldC5oYXNofWApO1xuICByZXR1cm4gZGVjaXNpb247XG59XG5cbi8qKiBDb21wdXRlcyB0aGUgd2VpZ2h0ZWQgcmVsZXZhbmNlIG9mIG9uZSBzZWFyY2ggZW50cnkuICovXG5mdW5jdGlvbiBzY29yZVNlYXJjaEVudHJ5KFxuICBlbnRyeTogU2l0ZVNlYXJjaEluZGV4RW50cnksXG4gIHRlcm1zOiByZWFkb25seSBzdHJpbmdbXSxcbik6IG51bWJlciB7XG4gIGNvbnN0IHRpdGxlID0gZW50cnkudGl0bGUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBlbnRyeS5kZXNjcmlwdGlvbj8udG9Mb2NhbGVMb3dlckNhc2UoKSA/PyAnJztcbiAgY29uc3QgaGVhZGluZ3MgPVxuICAgIGVudHJ5LmhlYWRpbmdzXG4gICAgICA/Lm1hcCgoaGVhZGluZykgPT4ge1xuICAgICAgICByZXR1cm4gaGVhZGluZy50ZXh0O1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcgJylcbiAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpID8/ICcnO1xuICBjb25zdCBjb250ZW50ID0gZW50cnkuY29udGVudD8udG9Mb2NhbGVMb3dlckNhc2UoKSA/PyAnJztcbiAgcmV0dXJuIHRlcm1zLnJlZHVjZSgoc2NvcmUsIHRlcm0pID0+IHtcbiAgICBsZXQgdGVybVNjb3JlID0gMDtcbiAgICBpZiAodGl0bGUuaW5jbHVkZXModGVybSkpIHtcbiAgICAgIHRlcm1TY29yZSArPSA4O1xuICAgIH1cbiAgICBpZiAoaGVhZGluZ3MuaW5jbHVkZXModGVybSkpIHtcbiAgICAgIHRlcm1TY29yZSArPSA0O1xuICAgIH1cbiAgICBpZiAoZGVzY3JpcHRpb24uaW5jbHVkZXModGVybSkpIHtcbiAgICAgIHRlcm1TY29yZSArPSAyO1xuICAgIH1cbiAgICBpZiAoY29udGVudC5pbmNsdWRlcyh0ZXJtKSkge1xuICAgICAgdGVybVNjb3JlICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBzY29yZSArIHRlcm1TY29yZTtcbiAgfSwgMCk7XG59XG5cbi8qKiBSZWFkcyBhIHVzYWJsZSBocmVmIGZyb20gYW4gYW5jaG9yLWxpa2UgZXZlbnQgdGFyZ2V0LiAqL1xuZnVuY3Rpb24gcmVhZEFuY2hvckhyZWYodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgaHJlZiA9ICh0YXJnZXQgYXMgeyBocmVmPzogdW5rbm93biB9IHwgbnVsbCk/LmhyZWY7XG4gIGlmICh0eXBlb2YgaHJlZiA9PT0gJ3N0cmluZycgJiYgaHJlZiAhPT0gJycpIHtcbiAgICByZXR1cm4gaHJlZjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIExvYWRzIHRoZSBSZWFjdCBicm93c2VyIHJ1bnRpbWUgb25seSB3aGVuIGh5ZHJhdGlvbiBpcyByZXF1ZXN0ZWQuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkSHlkcmF0ZVJ1bnRpbWUoKTogUHJvbWlzZTxIeWRyYXRlU2l0ZVJ1bnRpbWU+IHtcbiAgY29uc3QgW3JlYWN0TW9kdWxlLCBkb21Nb2R1bGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGltcG9ydCgncmVhY3QnKSxcbiAgICBpbXBvcnQoJ3JlYWN0LWRvbS9jbGllbnQnKSxcbiAgXSk7XG4gIHJldHVybiB7XG4gICAgY3JlYXRlRWxlbWVudDogcmVhY3RNb2R1bGUuY3JlYXRlRWxlbWVudCxcbiAgICBoeWRyYXRlUm9vdDogZG9tTW9kdWxlLmh5ZHJhdGVSb290LFxuICB9O1xufVxuXG4vKiogTG9hZHMgdGhlIHJvdXRlciB0aHJvdWdoIGl0cyBkZWNsYXJlZCBwdWJsaWMgc3VicGF0aHMuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkSHlkcmF0ZVJvdXRlck1vZHVsZTxUQ29udGV4dD4oKTogUHJvbWlzZTxcbiAgSHlkcmF0ZVNpdGVSb3V0ZXJNb2R1bGU8VENvbnRleHQ+XG4+IHtcbiAgY29uc3QgW2NyZWF0ZVJvdXRlck1vZHVsZSwgcmVuZGVyZXJNb2R1bGUsIGNvbnRleHRNb2R1bGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgW1xuICAgICAgaW1wb3J0KCdAcGx1bWlsZS9yb3V0ZXIvcm91dGluZy9jcmVhdGVSb3V0ZXIuanMnKSxcbiAgICAgIGltcG9ydCgnQHBsdW1pbGUvcm91dGVyL3JvdXRpbmcvUm91dGVyUmVuZGVyZXIuanMnKSxcbiAgICAgIGltcG9ydCgnQHBsdW1pbGUvcm91dGVyL3JvdXRpbmcvUm91dGluZ0NvbnRleHQuanMnKSxcbiAgICBdLFxuICApO1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZVJvdXRlcjogY3JlYXRlUm91dGVyTW9kdWxlLmRlZmF1bHQsXG4gICAgUm91dGVyUmVuZGVyZXI6IHJlbmRlcmVyTW9kdWxlLmRlZmF1bHQsXG4gICAgUm91dGluZ0NvbnRleHQ6IGNvbnRleHRNb2R1bGUuZGVmYXVsdCxcbiAgfSBhcyBIeWRyYXRlU2l0ZVJvdXRlck1vZHVsZTxUQ29udGV4dD47XG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ParamData } from 'path-to-regexp';
|
|
2
|
+
import type { RouteEntry } from '@plumile/router/types.js';
|
|
3
|
+
export type SiteScrollRestoration = {
|
|
4
|
+
beforeRouteChange: (current: RouteEntry<ParamData>) => void;
|
|
5
|
+
onRouteCommit: (next: RouteEntry<ParamData>) => void;
|
|
6
|
+
dispose: () => void;
|
|
7
|
+
};
|
|
8
|
+
export declare function createScrollRestoration(options: {
|
|
9
|
+
window?: Window;
|
|
10
|
+
document?: Document;
|
|
11
|
+
}): SiteScrollRestoration;
|
|
12
|
+
//# sourceMappingURL=scrollRestoration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollRestoration.d.ts","sourceRoot":"","sources":["../../../src/runtime/scrollRestoration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,MAAM,qBAAqB,GAAG;IAClC,iBAAiB,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IAC5D,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAGF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,GAAG,qBAAqB,CA4DxB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export function createScrollRestoration(options) {
|
|
2
|
+
const win = options.window ?? globalThis.window;
|
|
3
|
+
const doc = options.document ?? globalThis.document;
|
|
4
|
+
const previousMode = win.history.scrollRestoration;
|
|
5
|
+
win.history.scrollRestoration = 'manual';
|
|
6
|
+
const positions = new Map();
|
|
7
|
+
let previousEntry;
|
|
8
|
+
let disposed = false;
|
|
9
|
+
const scrollToHashOrTop = (hash) => {
|
|
10
|
+
if (hash !== '') {
|
|
11
|
+
try {
|
|
12
|
+
const id = decodeURIComponent(hash.replace(/^#/, ''));
|
|
13
|
+
let target = null;
|
|
14
|
+
if (id !== '') {
|
|
15
|
+
target = doc.getElementById(id);
|
|
16
|
+
}
|
|
17
|
+
if (target != null) {
|
|
18
|
+
target.scrollIntoView();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
win.scrollTo(0, 0);
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
beforeRouteChange(current) {
|
|
29
|
+
if (disposed)
|
|
30
|
+
return;
|
|
31
|
+
positions.set(current.navigation.key, { x: win.scrollX, y: win.scrollY });
|
|
32
|
+
previousEntry = current;
|
|
33
|
+
},
|
|
34
|
+
onRouteCommit(next) {
|
|
35
|
+
if (disposed)
|
|
36
|
+
return;
|
|
37
|
+
if (next.navigation.type === 'initial') {
|
|
38
|
+
if (next.location.hash !== '')
|
|
39
|
+
scrollToHashOrTop(next.location.hash);
|
|
40
|
+
}
|
|
41
|
+
else if (next.navigation.type === 'pop') {
|
|
42
|
+
const position = positions.get(next.navigation.key);
|
|
43
|
+
if (position == null)
|
|
44
|
+
scrollToHashOrTop(next.location.hash);
|
|
45
|
+
else
|
|
46
|
+
win.scrollTo(position.x, position.y);
|
|
47
|
+
}
|
|
48
|
+
else if (next.navigation.type === 'replace' &&
|
|
49
|
+
previousEntry?.location.pathname === next.location.pathname) {
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
scrollToHashOrTop(next.location.hash);
|
|
53
|
+
}
|
|
54
|
+
previousEntry = next;
|
|
55
|
+
},
|
|
56
|
+
dispose() {
|
|
57
|
+
if (disposed)
|
|
58
|
+
return;
|
|
59
|
+
disposed = true;
|
|
60
|
+
positions.clear();
|
|
61
|
+
previousEntry = undefined;
|
|
62
|
+
win.history.scrollRestoration = previousMode;
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsUmVzdG9yYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVudGltZS9zY3JvbGxSZXN0b3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FHdkM7SUFDQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDaEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQ3BELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFDbkQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7SUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7SUFDOUQsSUFBSSxhQUFnRCxDQUFDO0lBQ3JELElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUVyQixNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBWSxFQUFRLEVBQUU7UUFDL0MsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sRUFBRSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksTUFBTSxHQUF1QixJQUFJLENBQUM7Z0JBQ3RDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUNkLE1BQU0sR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2dCQUNELElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNuQixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3hCLE9BQU87Z0JBQ1QsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7WUFFVCxDQUFDO1FBQ0gsQ0FBQztRQUNELEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxpQkFBaUIsQ0FBQyxPQUFPO1lBQ3ZCLElBQUksUUFBUTtnQkFBRSxPQUFPO1lBQ3JCLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDMUUsYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUMxQixDQUFDO1FBQ0QsYUFBYSxDQUFDLElBQUk7WUFDaEIsSUFBSSxRQUFRO2dCQUFFLE9BQU87WUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxFQUFFO29CQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkUsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUMxQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BELElBQUksUUFBUSxJQUFJLElBQUk7b0JBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7b0JBQ3ZELEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxJQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVM7Z0JBQ2xDLGFBQWEsRUFBRSxRQUFRLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUMzRCxDQUFDO1lBRUgsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU87WUFDTCxJQUFJLFFBQVE7Z0JBQUUsT0FBTztZQUNyQixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixhQUFhLEdBQUcsU0FBUyxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO1FBQy9DLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyYW1EYXRhIH0gZnJvbSAncGF0aC10by1yZWdleHAnO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZUVudHJ5IH0gZnJvbSAnQHBsdW1pbGUvcm91dGVyL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgU2l0ZVNjcm9sbFJlc3RvcmF0aW9uID0ge1xuICBiZWZvcmVSb3V0ZUNoYW5nZTogKGN1cnJlbnQ6IFJvdXRlRW50cnk8UGFyYW1EYXRhPikgPT4gdm9pZDtcbiAgb25Sb3V0ZUNvbW1pdDogKG5leHQ6IFJvdXRlRW50cnk8UGFyYW1EYXRhPikgPT4gdm9pZDtcbiAgZGlzcG9zZTogKCkgPT4gdm9pZDtcbn07XG5cbi8qKiBDb29yZGluYXRlcyBzYXZlZCBzY3JvbGwgcG9zaXRpb25zLCBoYXNoZXMsIGFuZCBmcmVzaCBuYXZpZ2F0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY3JvbGxSZXN0b3JhdGlvbihvcHRpb25zOiB7XG4gIHdpbmRvdz86IFdpbmRvdztcbiAgZG9jdW1lbnQ/OiBEb2N1bWVudDtcbn0pOiBTaXRlU2Nyb2xsUmVzdG9yYXRpb24ge1xuICBjb25zdCB3aW4gPSBvcHRpb25zLndpbmRvdyA/PyBnbG9iYWxUaGlzLndpbmRvdztcbiAgY29uc3QgZG9jID0gb3B0aW9ucy5kb2N1bWVudCA/PyBnbG9iYWxUaGlzLmRvY3VtZW50O1xuICBjb25zdCBwcmV2aW91c01vZGUgPSB3aW4uaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbjtcbiAgd2luLmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSAnbWFudWFsJztcbiAgY29uc3QgcG9zaXRpb25zID0gbmV3IE1hcDxzdHJpbmcsIHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT4oKTtcbiAgbGV0IHByZXZpb3VzRW50cnk6IFJvdXRlRW50cnk8UGFyYW1EYXRhPiB8IHVuZGVmaW5lZDtcbiAgbGV0IGRpc3Bvc2VkID0gZmFsc2U7XG5cbiAgY29uc3Qgc2Nyb2xsVG9IYXNoT3JUb3AgPSAoaGFzaDogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgaWYgKGhhc2ggIT09ICcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpZCA9IGRlY29kZVVSSUNvbXBvbmVudChoYXNoLnJlcGxhY2UoL14jLywgJycpKTtcbiAgICAgICAgbGV0IHRhcmdldDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKGlkICE9PSAnJykge1xuICAgICAgICAgIHRhcmdldCA9IGRvYy5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7XG4gICAgICAgICAgdGFyZ2V0LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTWFsZm9ybWVkIGhhc2ggdmFsdWVzIGludGVudGlvbmFsbHkgZmFsbCB0aHJvdWdoIHRvIHRoZSB0b3AuXG4gICAgICB9XG4gICAgfVxuICAgIHdpbi5zY3JvbGxUbygwLCAwKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGJlZm9yZVJvdXRlQ2hhbmdlKGN1cnJlbnQpIHtcbiAgICAgIGlmIChkaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgcG9zaXRpb25zLnNldChjdXJyZW50Lm5hdmlnYXRpb24ua2V5LCB7IHg6IHdpbi5zY3JvbGxYLCB5OiB3aW4uc2Nyb2xsWSB9KTtcbiAgICAgIHByZXZpb3VzRW50cnkgPSBjdXJyZW50O1xuICAgIH0sXG4gICAgb25Sb3V0ZUNvbW1pdChuZXh0KSB7XG4gICAgICBpZiAoZGlzcG9zZWQpIHJldHVybjtcbiAgICAgIGlmIChuZXh0Lm5hdmlnYXRpb24udHlwZSA9PT0gJ2luaXRpYWwnKSB7XG4gICAgICAgIGlmIChuZXh0LmxvY2F0aW9uLmhhc2ggIT09ICcnKSBzY3JvbGxUb0hhc2hPclRvcChuZXh0LmxvY2F0aW9uLmhhc2gpO1xuICAgICAgfSBlbHNlIGlmIChuZXh0Lm5hdmlnYXRpb24udHlwZSA9PT0gJ3BvcCcpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbnMuZ2V0KG5leHQubmF2aWdhdGlvbi5rZXkpO1xuICAgICAgICBpZiAocG9zaXRpb24gPT0gbnVsbCkgc2Nyb2xsVG9IYXNoT3JUb3AobmV4dC5sb2NhdGlvbi5oYXNoKTtcbiAgICAgICAgZWxzZSB3aW4uc2Nyb2xsVG8ocG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBuZXh0Lm5hdmlnYXRpb24udHlwZSA9PT0gJ3JlcGxhY2UnICYmXG4gICAgICAgIHByZXZpb3VzRW50cnk/LmxvY2F0aW9uLnBhdGhuYW1lID09PSBuZXh0LmxvY2F0aW9uLnBhdGhuYW1lXG4gICAgICApIHtcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gZm9yIGEgc2FtZS1wYXRoIHJlcGxhY2VtZW50LlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Nyb2xsVG9IYXNoT3JUb3AobmV4dC5sb2NhdGlvbi5oYXNoKTtcbiAgICAgIH1cbiAgICAgIHByZXZpb3VzRW50cnkgPSBuZXh0O1xuICAgIH0sXG4gICAgZGlzcG9zZSgpIHtcbiAgICAgIGlmIChkaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgZGlzcG9zZWQgPSB0cnVlO1xuICAgICAgcG9zaXRpb25zLmNsZWFyKCk7XG4gICAgICBwcmV2aW91c0VudHJ5ID0gdW5kZWZpbmVkO1xuICAgICAgd2luLmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBwcmV2aW91c01vZGU7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|