@blinkk/root-cms 1.0.0-alpha.28 → 1.0.0-alpha.29

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/dist/app.js DELETED
@@ -1,111 +0,0 @@
1
- // core/app.tsx
2
- import { render as renderToString } from "preact-render-to-string";
3
- import path from "node:path";
4
- import { fileURLToPath } from "node:url";
5
- import { initializeApp } from "firebase-admin/app";
6
- import { getAuth } from "firebase-admin/auth";
7
- import { jsx, jsxs } from "preact/jsx-runtime";
8
- var __dirname = path.dirname(fileURLToPath(import.meta.url));
9
- var uiCssPath = path.join(__dirname, "ui.css");
10
- var uiJsPath = path.join(__dirname, "ui.js");
11
- function App(props) {
12
- return /* @__PURE__ */ jsxs("html", {
13
- children: [
14
- /* @__PURE__ */ jsxs("head", {
15
- children: [
16
- /* @__PURE__ */ jsx("title", {
17
- children: props.title
18
- }),
19
- /* @__PURE__ */ jsx("link", {
20
- rel: "preconnect",
21
- href: "https://fonts.googleapis.com"
22
- }),
23
- /* @__PURE__ */ jsx("link", {
24
- rel: "preconnect",
25
- href: "https://fonts.gstatic.com",
26
- crossOrigin: "anonymous"
27
- }),
28
- /* @__PURE__ */ jsx("link", {
29
- rel: "stylesheet",
30
- href: "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;900&display=swap"
31
- }),
32
- /* @__PURE__ */ jsx("link", {
33
- rel: "stylesheet",
34
- href: `/@fs${uiCssPath}`
35
- })
36
- ]
37
- }),
38
- /* @__PURE__ */ jsxs("body", {
39
- children: [
40
- /* @__PURE__ */ jsx("div", {
41
- id: "root",
42
- children: /* @__PURE__ */ jsxs("div", {
43
- className: "bootstrap",
44
- children: [
45
- /* @__PURE__ */ jsx("h1", {
46
- className: "bootstrap__loading",
47
- children: "Loading..."
48
- }),
49
- /* @__PURE__ */ jsx("div", {
50
- className: "bootstrap-error",
51
- children: "If the CMS fails to load, try a force refresh by holding the shift key while refreshing the page."
52
- })
53
- ]
54
- })
55
- }),
56
- /* @__PURE__ */ jsx("script", {
57
- dangerouslySetInnerHTML: {
58
- __html: `window.__ROOT_CTX = ${JSON.stringify(props.ctx)}`
59
- }
60
- }),
61
- /* @__PURE__ */ jsx("script", {
62
- type: "module",
63
- src: `/@fs${uiJsPath}`
64
- })
65
- ]
66
- })
67
- ]
68
- });
69
- }
70
- async function render(req, res) {
71
- if (!req.user || !req.user.jwt) {
72
- throw new Error("not logged in");
73
- }
74
- const email = req.user.jwt.email;
75
- const uid = req.user.jwt.uid;
76
- const app = initializeApp();
77
- const auth = getAuth();
78
- const customToken = await auth.createCustomToken(uid);
79
- const { uid: firebaseUid } = await auth.verifyIdToken(customToken);
80
- const token = await auth.createCustomToken(firebaseUid);
81
- console.log("custom firebase auth token:");
82
- console.log(token);
83
- const collectionModules = import.meta.glob("/collections/*.schema.ts", {
84
- eager: true
85
- });
86
- const collections = Object.values(collectionModules).map(
87
- (module) => module.default
88
- );
89
- const ctx = {
90
- user: {
91
- email,
92
- jwt: token
93
- },
94
- collections
95
- };
96
- const mainHtml = renderToString(/* @__PURE__ */ jsx(App, {
97
- title: "Root.js CMS",
98
- ctx
99
- }));
100
- const html = await req.viteServer.transformIndexHtml(
101
- req.originalUrl,
102
- `<!doctype html>
103
- ${mainHtml}`
104
- );
105
- res.setHeader("Content-Type", "text/html");
106
- res.send(html);
107
- }
108
- export {
109
- render
110
- };
111
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9hcHAudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge1Jlc3BvbnNlfSBmcm9tICdAYmxpbmtrL3Jvb3QnO1xuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tICcuL3NjaGVtYS5qcyc7XG5pbXBvcnQge1VzZXJSZXF1ZXN0fSBmcm9tICcuL3VzZXJzLmpzJztcbmltcG9ydCB7cmVuZGVyIGFzIHJlbmRlclRvU3RyaW5nfSBmcm9tICdwcmVhY3QtcmVuZGVyLXRvLXN0cmluZyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQge2luaXRpYWxpemVBcHB9IGZyb20gJ2ZpcmViYXNlLWFkbWluL2FwcCc7XG5pbXBvcnQge2dldEF1dGh9IGZyb20gJ2ZpcmViYXNlLWFkbWluL2F1dGgnO1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbmNvbnN0IHVpQ3NzUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICd1aS5jc3MnKTtcbmNvbnN0IHVpSnNQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3VpLmpzJyk7XG5cbmludGVyZmFjZSBBcHBQcm9wcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGN0eDogYW55O1xufVxuXG5mdW5jdGlvbiBBcHAocHJvcHM6IEFwcFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPHRpdGxlPntwcm9wcy50aXRsZX08L3RpdGxlPlxuICAgICAgICA8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb21cIiAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInByZWNvbm5lY3RcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tXCJcbiAgICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwic3R5bGVzaGVldFwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEAzMDA7NDAwOzUwMDs2MDA7NzAwOzkwMCZkaXNwbGF5PXN3YXBcIlxuICAgICAgICAvPlxuICAgICAgICA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj17YC9AZnMke3VpQ3NzUGF0aH1gfSAvPlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDxkaXYgaWQ9XCJyb290XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib290c3RyYXBcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJib290c3RyYXBfX2xvYWRpbmdcIj5Mb2FkaW5nLi4uPC9oMT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9vdHN0cmFwLWVycm9yXCI+XG4gICAgICAgICAgICAgIElmIHRoZSBDTVMgZmFpbHMgdG8gbG9hZCwgdHJ5IGEgZm9yY2UgcmVmcmVzaCBieSBob2xkaW5nIHRoZSBzaGlmdFxuICAgICAgICAgICAgICBrZXkgd2hpbGUgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNjcmlwdFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IGB3aW5kb3cuX19ST09UX0NUWCA9ICR7SlNPTi5zdHJpbmdpZnkocHJvcHMuY3R4KX1gLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIHNyYz17YC9AZnMke3VpSnNQYXRofWB9Pjwvc2NyaXB0PlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihyZXE6IFVzZXJSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIGlmICghcmVxLnVzZXIgfHwgIXJlcS51c2VyLmp3dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGxvZ2dlZCBpbicpO1xuICB9XG5cbiAgY29uc3QgZW1haWwgPSByZXEudXNlci5qd3QuZW1haWw7XG4gIGNvbnN0IHVpZCA9IHJlcS51c2VyLmp3dC51aWQ7XG5cbiAgY29uc3QgYXBwID0gaW5pdGlhbGl6ZUFwcCgpO1xuICBjb25zdCBhdXRoID0gZ2V0QXV0aCgpO1xuICAvLyBDcmVhdGUgYSBGaXJlYmFzZSBjdXN0b20gdG9rZW4gZm9yIHRoZSB1c2VyXG4gIGNvbnN0IGN1c3RvbVRva2VuID0gYXdhaXQgYXV0aC5jcmVhdGVDdXN0b21Ub2tlbih1aWQpO1xuICAvLyBFeGNoYW5nZSB0aGUgRmlyZWJhc2UgY3VzdG9tIHRva2VuIGZvciBhIEZpcmViYXNlIEF1dGggSldUXG4gIGNvbnN0IHt1aWQ6IGZpcmViYXNlVWlkfSA9IGF3YWl0IGF1dGgudmVyaWZ5SWRUb2tlbihjdXN0b21Ub2tlbik7XG4gIGNvbnN0IHRva2VuID0gYXdhaXQgYXV0aC5jcmVhdGVDdXN0b21Ub2tlbihmaXJlYmFzZVVpZCk7XG4gIGNvbnNvbGUubG9nKCdjdXN0b20gZmlyZWJhc2UgYXV0aCB0b2tlbjonKTtcbiAgY29uc29sZS5sb2codG9rZW4pO1xuXG4gIGNvbnN0IGNvbGxlY3Rpb25Nb2R1bGVzID0gaW1wb3J0Lm1ldGEuZ2xvYignL2NvbGxlY3Rpb25zLyouc2NoZW1hLnRzJywge1xuICAgIGVhZ2VyOiB0cnVlLFxuICB9KSBhcyBhbnk7XG4gIGNvbnN0IGNvbGxlY3Rpb25zID0gT2JqZWN0LnZhbHVlcyhjb2xsZWN0aW9uTW9kdWxlcykubWFwKFxuICAgIChtb2R1bGU6IGFueSkgPT4gbW9kdWxlLmRlZmF1bHQgYXMgQ29sbGVjdGlvblxuICApO1xuICBjb25zdCBjdHggPSB7XG4gICAgdXNlcjoge1xuICAgICAgZW1haWw6IGVtYWlsLFxuICAgICAgand0OiB0b2tlbixcbiAgICB9LFxuICAgIGNvbGxlY3Rpb25zOiBjb2xsZWN0aW9ucyxcbiAgfTtcbiAgY29uc3QgbWFpbkh0bWwgPSByZW5kZXJUb1N0cmluZyg8QXBwIHRpdGxlPVwiUm9vdC5qcyBDTVNcIiBjdHg9e2N0eH0gLz4pO1xuICBjb25zdCBodG1sID0gYXdhaXQgcmVxLnZpdGVTZXJ2ZXIhLnRyYW5zZm9ybUluZGV4SHRtbChcbiAgICByZXEub3JpZ2luYWxVcmwsXG4gICAgYDwhZG9jdHlwZSBodG1sPlxcbiR7bWFpbkh0bWx9YFxuICApO1xuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJyk7XG4gIHJlcy5zZW5kKGh0bWwpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUdBLFNBQVEsVUFBVSxzQkFBcUI7QUFDdkMsT0FBTyxVQUFVO0FBQ2pCLFNBQVEscUJBQW9CO0FBQzVCLFNBQVEscUJBQW9CO0FBQzVCLFNBQVEsZUFBYztBQWNoQixTQUNFLEtBREY7QUFaTixJQUFNLFlBQVksS0FBSyxRQUFRLGNBQWMsWUFBWSxHQUFHLENBQUM7QUFDN0QsSUFBTSxZQUFZLEtBQUssS0FBSyxXQUFXLFFBQVE7QUFDL0MsSUFBTSxXQUFXLEtBQUssS0FBSyxXQUFXLE9BQU87QUFPN0MsU0FBUyxJQUFJLE9BQWlCO0FBQzVCLFNBQ0UscUJBQUM7QUFBQSxJQUNDO0FBQUEsMkJBQUM7QUFBQSxRQUNDO0FBQUEsOEJBQUM7QUFBQSxZQUFPLGdCQUFNO0FBQUEsV0FBTTtBQUFBLFVBQ3BCLG9CQUFDO0FBQUEsWUFBSyxLQUFJO0FBQUEsWUFBYSxNQUFLO0FBQUEsV0FBK0I7QUFBQSxVQUMzRCxvQkFBQztBQUFBLFlBQ0MsS0FBSTtBQUFBLFlBQ0osTUFBSztBQUFBLFlBQ0wsYUFBWTtBQUFBLFdBQ2Q7QUFBQSxVQUNBLG9CQUFDO0FBQUEsWUFDQyxLQUFJO0FBQUEsWUFDSixNQUFLO0FBQUEsV0FDUDtBQUFBLFVBQ0Esb0JBQUM7QUFBQSxZQUFLLEtBQUk7QUFBQSxZQUFhLE1BQU0sT0FBTztBQUFBLFdBQWE7QUFBQTtBQUFBLE9BQ25EO0FBQUEsTUFDQSxxQkFBQztBQUFBLFFBQ0M7QUFBQSw4QkFBQztBQUFBLFlBQUksSUFBRztBQUFBLFlBQ04sK0JBQUM7QUFBQSxjQUFJLFdBQVU7QUFBQSxjQUNiO0FBQUEsb0NBQUM7QUFBQSxrQkFBRyxXQUFVO0FBQUEsa0JBQXFCO0FBQUEsaUJBQVU7QUFBQSxnQkFDN0Msb0JBQUM7QUFBQSxrQkFBSSxXQUFVO0FBQUEsa0JBQWtCO0FBQUEsaUJBR2pDO0FBQUE7QUFBQSxhQUNGO0FBQUEsV0FDRjtBQUFBLFVBQ0Esb0JBQUM7QUFBQSxZQUNDLHlCQUF5QjtBQUFBLGNBQ3ZCLFFBQVEsdUJBQXVCLEtBQUssVUFBVSxNQUFNLEdBQUc7QUFBQSxZQUN6RDtBQUFBLFdBQ0Y7QUFBQSxVQUNBLG9CQUFDO0FBQUEsWUFBTyxNQUFLO0FBQUEsWUFBUyxLQUFLLE9BQU87QUFBQSxXQUFZO0FBQUE7QUFBQSxPQUNoRDtBQUFBO0FBQUEsR0FDRjtBQUVKO0FBRUEsZUFBc0IsT0FBTyxLQUFrQixLQUFlO0FBQzVELE1BQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssS0FBSztBQUM5QixVQUFNLElBQUksTUFBTSxlQUFlO0FBQUEsRUFDakM7QUFFQSxRQUFNLFFBQVEsSUFBSSxLQUFLLElBQUk7QUFDM0IsUUFBTSxNQUFNLElBQUksS0FBSyxJQUFJO0FBRXpCLFFBQU0sTUFBTSxjQUFjO0FBQzFCLFFBQU0sT0FBTyxRQUFRO0FBRXJCLFFBQU0sY0FBYyxNQUFNLEtBQUssa0JBQWtCLEdBQUc7QUFFcEQsUUFBTSxFQUFDLEtBQUssWUFBVyxJQUFJLE1BQU0sS0FBSyxjQUFjLFdBQVc7QUFDL0QsUUFBTSxRQUFRLE1BQU0sS0FBSyxrQkFBa0IsV0FBVztBQUN0RCxVQUFRLElBQUksNkJBQTZCO0FBQ3pDLFVBQVEsSUFBSSxLQUFLO0FBRWpCLFFBQU0sb0JBQW9CLFlBQVksS0FBSyw0QkFBNEI7QUFBQSxJQUNyRSxPQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0QsUUFBTSxjQUFjLE9BQU8sT0FBTyxpQkFBaUIsRUFBRTtBQUFBLElBQ25ELENBQUMsV0FBZ0IsT0FBTztBQUFBLEVBQzFCO0FBQ0EsUUFBTSxNQUFNO0FBQUEsSUFDVixNQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0EsS0FBSztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNBLFFBQU0sV0FBVyxlQUFlLG9CQUFDO0FBQUEsSUFBSSxPQUFNO0FBQUEsSUFBYztBQUFBLEdBQVUsQ0FBRTtBQUNyRSxRQUFNLE9BQU8sTUFBTSxJQUFJLFdBQVk7QUFBQSxJQUNqQyxJQUFJO0FBQUEsSUFDSjtBQUFBLEVBQW9CO0FBQUEsRUFDdEI7QUFDQSxNQUFJLFVBQVUsZ0JBQWdCLFdBQVc7QUFDekMsTUFBSSxLQUFLLElBQUk7QUFDZjsiLAogICJuYW1lcyI6IFtdCn0K
package/dist/core.js DELETED
@@ -1,70 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __export = (target, all) => {
3
- for (var name in all)
4
- __defProp(target, name, { get: all[name], enumerable: true });
5
- };
6
-
7
- // core/schema.ts
8
- var schema_exports = {};
9
- __export(schema_exports, {
10
- array: () => array,
11
- boolean: () => boolean,
12
- collection: () => collection,
13
- date: () => date,
14
- datetime: () => datetime,
15
- define: () => define,
16
- defineCollection: () => defineCollection,
17
- defineSchema: () => defineSchema,
18
- image: () => image,
19
- multiselect: () => multiselect,
20
- number: () => number,
21
- object: () => object,
22
- oneOf: () => oneOf,
23
- select: () => select,
24
- string: () => string
25
- });
26
- function string(field) {
27
- return { ...field, type: "string" };
28
- }
29
- function number(field) {
30
- return { ...field, type: "number" };
31
- }
32
- function date(field) {
33
- return { ...field, type: "date" };
34
- }
35
- function datetime(field) {
36
- return { ...field, type: "datetime" };
37
- }
38
- function boolean(field) {
39
- return { ...field, type: "boolean" };
40
- }
41
- function select(field) {
42
- return { ...field, type: "select" };
43
- }
44
- function multiselect(field) {
45
- return { ...field, type: "multiselect" };
46
- }
47
- function image(field) {
48
- return { ...field, type: "image" };
49
- }
50
- function object(field) {
51
- return { ...field, type: "object" };
52
- }
53
- function array(field) {
54
- return { ...field, type: "array" };
55
- }
56
- function oneOf(field) {
57
- return { ...field, type: "oneof" };
58
- }
59
- function defineSchema(schema) {
60
- return schema;
61
- }
62
- var define = defineSchema;
63
- function defineCollection(collection2) {
64
- return collection2;
65
- }
66
- var collection = defineCollection;
67
- export {
68
- schema_exports as schema
69
- };
70
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9zY2hlbWEudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7RnVuY3Rpb25hbENvbXBvbmVudH0gZnJvbSAncHJlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25GaWVsZFByb3BzIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBoZWxwPzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGRlZmF1bHQ/OiBhbnk7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGRlcHJlY2F0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBTdHJpbmdGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdzdHJpbmcnO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xuICB0cmFuc2xhdGU/OiBib29sZWFuO1xuICB2YXJpYW50PzogJ2lucHV0JyB8ICd0ZXh0YXJlYSc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKGZpZWxkOiBPbWl0PFN0cmluZ0ZpZWxkLCAndHlwZSc+KTogU3RyaW5nRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnc3RyaW5nJ307XG59XG5cbmV4cG9ydCB0eXBlIE51bWJlckZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ251bWJlcic7XG4gIGRlZmF1bHQ/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyKGZpZWxkOiBPbWl0PE51bWJlckZpZWxkLCAndHlwZSc+KTogTnVtYmVyRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnbnVtYmVyJ307XG59XG5cbmV4cG9ydCB0eXBlIERhdGVGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdkYXRlJztcbiAgZGVmYXVsdD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlKGZpZWxkOiBPbWl0PERhdGVGaWVsZCwgJ3R5cGUnPik6IERhdGVGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdkYXRlJ307XG59XG5cbmV4cG9ydCB0eXBlIERhdGVUaW1lRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnZGF0ZXRpbWUnO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGV0aW1lKGZpZWxkOiBPbWl0PERhdGVUaW1lRmllbGQsICd0eXBlJz4pOiBEYXRlVGltZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2RhdGV0aW1lJ307XG59XG5cbmV4cG9ydCB0eXBlIEJvb2xlYW5GaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdib29sZWFuJztcbiAgZGVmYXVsdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbihmaWVsZDogT21pdDxCb29sZWFuRmllbGQsICd0eXBlJz4pOiBCb29sZWFuRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnYm9vbGVhbid9O1xufVxuXG5leHBvcnQgdHlwZSBTZWxlY3RGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdzZWxlY3QnO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xuICBvcHRpb25zPzoge1xuICAgIHZhbHVlcz86IEFycmF5PHt2YWx1ZTogc3RyaW5nOyBsYWJlbD86IHN0cmluZ30+O1xuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdChmaWVsZDogT21pdDxTZWxlY3RGaWVsZCwgJ3R5cGUnPik6IFNlbGVjdEZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ3NlbGVjdCd9O1xufVxuXG5leHBvcnQgdHlwZSBNdWx0aVNlbGVjdEZpZWxkID0gT21pdDxTZWxlY3RGaWVsZCwgJ3R5cGUnPiAmIHtcbiAgdHlwZTogJ211bHRpc2VsZWN0JztcbiAgZGVmYXVsdD86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpc2VsZWN0KFxuICBmaWVsZDogT21pdDxNdWx0aVNlbGVjdEZpZWxkLCAndHlwZSc+XG4pOiBNdWx0aVNlbGVjdEZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ211bHRpc2VsZWN0J307XG59XG5cbmV4cG9ydCB0eXBlIEltYWdlRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnaW1hZ2UnO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlKGZpZWxkOiBPbWl0PEltYWdlRmllbGQsICd0eXBlJz4pOiBJbWFnZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2ltYWdlJ307XG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdEZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ29iamVjdCc7XG4gIGZpZWxkczogRmllbGRXaXRoSWRbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3QoZmllbGQ6IE9taXQ8T2JqZWN0RmllbGQsICd0eXBlJz4pOiBPYmplY3RGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdvYmplY3QnfTtcbn1cblxuZXhwb3J0IHR5cGUgQXJyYXlGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdhcnJheSc7XG4gIGRlZmF1bHQ/OiBBcnJheTxhbnk+O1xuICBwcmV2aWV3PzogKHZhbHVlOiBhbnkpID0+IHN0cmluZztcbiAgLy8gTk9URShzdGV2ZW5sZSk6IHRoZSBhcnJheSBmaWVsZCBzaG91bGQgb25seSBhY2NlcHQgb2JqZWN0IHZhbHVlcyB0byBrZWVwXG4gIC8vIHRoZSBzY2hlbWFzIGZ1dHVyZS1mcmllbmRseS4gRm9yIGV4YW1wbGUsIGlmIHdlIHdlcmUgdG8gYWNjZXB0IHByaW1hdGl2ZXNcbiAgLy8gKGUuZy4gQXJyYXk8c3RyaW5nPikgYW5kIHRoZSBkZXZlbG9wZXIgZGVjaWRlcyBpbiB0aGUgZnV0dXJlIHRoYXQgdGhleVxuICAvLyBuZWVkIHRvIGFkZCBleHRyYSBmaWVsZHMgdG8gdGhhdCBhcnJheSB0eXBlLCB0aGV5IHdvdWxkIGhhdmUgdG8gY3JlYXRlIGFcbiAgLy8gbmV3IGZpZWxkLCBjcmVhdGUgYSBuZXcgc2NoZW1hIGZpZWxkLCBhbmQgdGhlbiBwZXJmb3JtIGEgZGIgbWlncmF0aW9uIHRvXG4gIC8vIHVwZGF0ZSBmcm9tIHRoZSBvbGQgZmllbGQgdHlwZSB0byB0aGUgbmV3IGZpZWxkIHR5cGUuIEJ1dCBpZiB3ZSBlbmZvcmNlXG4gIC8vIG9iamVjdHMgaGVyZSwgYSBkZXZlbG9wZXIgc2hvdWxkIHRlY2huaWNhbGx5IGJlIGFibGUgdG8gYWRkIGZpZWxkcyB0byB0aGVcbiAgLy8gbmVzdGVkIGZpZWxkIGRlZmluaXRpb24gd2l0aG91dCBicmVha2luZyBhbnkgZXhpc3RpbmcgZGIgZW50cmllcy5cbiAgb2Y6IEltYWdlRmllbGQgfCBPYmplY3RGaWVsZCB8IE9uZU9mRmllbGQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXkoZmllbGQ6IE9taXQ8QXJyYXlGaWVsZCwgJ3R5cGUnPik6IEFycmF5RmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnYXJyYXknfTtcbn1cblxuZXhwb3J0IHR5cGUgT25lT2ZGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdvbmVvZic7XG4gIHR5cGVzOiBBcnJheTxTY2hlbWE+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZU9mKGZpZWxkOiBPbWl0PE9uZU9mRmllbGQsICd0eXBlJz4pOiBPbmVPZkZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ29uZW9mJ307XG59XG5cbmV4cG9ydCB0eXBlIEZpZWxkID1cbiAgfCBTdHJpbmdGaWVsZFxuICB8IE51bWJlckZpZWxkXG4gIHwgRGF0ZUZpZWxkXG4gIHwgRGF0ZVRpbWVGaWVsZFxuICB8IEJvb2xlYW5GaWVsZFxuICB8IFNlbGVjdEZpZWxkXG4gIHwgTXVsdGlTZWxlY3RGaWVsZFxuICB8IEltYWdlRmllbGRcbiAgfCBPYmplY3RGaWVsZFxuICB8IEFycmF5RmllbGRcbiAgfCBPbmVPZkZpZWxkO1xuXG5leHBvcnQgdHlwZSBGaWVsZFdpdGhJZCA9IEZpZWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGZpZWxkczogQXJyYXk8RmllbGRXaXRoSWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lU2NoZW1hKHNjaGVtYTogU2NoZW1hKTogU2NoZW1hIHtcbiAgcmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmluZSA9IGRlZmluZVNjaGVtYTtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbiA9IFNjaGVtYSAmIHtcbiAgLy8gVVJMIHdoZXJlIHRoZSBjb2xsZWN0aW9uIHNlcnZlcyBmcm9tLlxuICB1cmw/OiBzdHJpbmc7XG4gIC8vIFBhZ2UgY29tcG9uZW50IHRvIHJlbmRlciBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gIENvbXBvbmVudDogRnVuY3Rpb25hbENvbXBvbmVudDtcbiAgLy8gRGVmaW5lcyB0aGUgZmllbGRzIHRvIHVzZSBmb3IgZG9jdW1lbnQgcHJldmlldy5cbiAgcHJldmlldz86IHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBpbWFnZT86IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb2xsZWN0aW9uKGNvbGxlY3Rpb246IENvbGxlY3Rpb24pOiBDb2xsZWN0aW9uIHtcbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmV4cG9ydCBjb25zdCBjb2xsZWN0aW9uID0gZGVmaW5lQ29sbGVjdGlvbjtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQk8sU0FBUyxPQUFPLE9BQStDO0FBQ3BFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxTQUFRO0FBQ2xDO0FBT08sU0FBUyxPQUFPLE9BQStDO0FBQ3BFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxTQUFRO0FBQ2xDO0FBT08sU0FBUyxLQUFLLE9BQTJDO0FBQzlELFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxPQUFNO0FBQ2hDO0FBT08sU0FBUyxTQUFTLE9BQW1EO0FBQzFFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxXQUFVO0FBQ3BDO0FBT08sU0FBUyxRQUFRLE9BQWlEO0FBQ3ZFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxVQUFTO0FBQ25DO0FBVU8sU0FBUyxPQUFPLE9BQStDO0FBQ3BFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxTQUFRO0FBQ2xDO0FBT08sU0FBUyxZQUNkLE9BQ2tCO0FBQ2xCLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxjQUFhO0FBQ3ZDO0FBTU8sU0FBUyxNQUFNLE9BQTZDO0FBQ2pFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxRQUFPO0FBQ2pDO0FBT08sU0FBUyxPQUFPLE9BQStDO0FBQ3BFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxTQUFRO0FBQ2xDO0FBaUJPLFNBQVMsTUFBTSxPQUE2QztBQUNqRSxTQUFPLEVBQUMsR0FBRyxPQUFPLE1BQU0sUUFBTztBQUNqQztBQU9PLFNBQVMsTUFBTSxPQUE2QztBQUNqRSxTQUFPLEVBQUMsR0FBRyxPQUFPLE1BQU0sUUFBTztBQUNqQztBQXVCTyxTQUFTLGFBQWEsUUFBd0I7QUFDbkQsU0FBTztBQUNUO0FBRU8sSUFBTSxTQUFTO0FBY2YsU0FBUyxpQkFBaUJBLGFBQW9DO0FBQ25FLFNBQU9BO0FBQ1Q7QUFFTyxJQUFNLGFBQWE7IiwKICAibmFtZXMiOiBbImNvbGxlY3Rpb24iXQp9Cg==