@picked/vite-plugin-picked 0.0.1-dev.1785826066660 → 0.0.1-dev.1785908062293
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/.tsbuildinfo +1 -1
- package/dist/cjs/index.js +7 -7
- package/dist/esm/index.js +202 -162
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/prefetch.d.ts.map +1 -1
- package/dist/types/virtual-module/dev.d.ts +15 -4
- package/dist/types/virtual-module/dev.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/esm/index.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
import { existsSync as e } from "node:fs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { join as t, resolve as n } from "node:path";
|
|
3
|
+
import { createClientHeaders as r, fetchExperienceContent as i, fetchProject as a } from "@picked/client/plugins/dynamic-experiences";
|
|
4
|
+
import { appendFile as o, mkdir as s, readFile as c, writeFile as l } from "node:fs/promises";
|
|
5
5
|
//#region \0@oxc-project+runtime@0.142.0/helpers/esm/taggedTemplateLiteral.js
|
|
6
|
-
function
|
|
6
|
+
function u(e, t) {
|
|
7
7
|
return t ||= e.slice(0), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } }));
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
10
|
//#region src/launcher.ts
|
|
11
|
-
var
|
|
12
|
-
function
|
|
11
|
+
var d;
|
|
12
|
+
function f(e) {
|
|
13
13
|
let t = JSON.stringify(e), n = e.length > 0 ? e.map((e) => `
|
|
14
14
|
<div class="feature-row">
|
|
15
15
|
<label>
|
|
16
|
-
<input type="checkbox" data-feature-id="${
|
|
17
|
-
<span class="feature-name">${
|
|
18
|
-
<span class="feature-id">${
|
|
16
|
+
<input type="checkbox" data-feature-id="${m(e.id)}" checked>
|
|
17
|
+
<span class="feature-name">${p(e.name)}</span>
|
|
18
|
+
<span class="feature-id">${p(e.id)}</span>
|
|
19
19
|
</label>
|
|
20
|
-
<select data-value-for="${
|
|
20
|
+
<select data-value-for="${m(e.id)}">
|
|
21
21
|
<option value="true" selected>true</option>
|
|
22
22
|
<option value="false">false</option>
|
|
23
23
|
</select>
|
|
24
24
|
</div>`).join("") : "<p class=\"text no-features\">No features configured for this project.</p>";
|
|
25
|
-
return String.raw(
|
|
25
|
+
return String.raw(d ||= u([
|
|
26
26
|
"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <meta name=\"robots\" content=\"noindex, nofollow\">\n <title>Picked</title>\n <style>\n main {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: grid;\n align-items: center;\n justify-content: center;\n font-family: monospace;\n color: #4A4A4A\n }\n\n .wrap {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n max-width: 480px;\n width: 100%;\n }\n\n .title {\n font-size: 1.125rem;\n font-weight: 700;\n margin-bottom: 0;\n }\n\n .text {\n margin-top: .5rem;\n font-size: .875rem\n }\n\n .text a {\n color: #4A4A4A;\n text-decoration: none;\n }\n\n .text a:hover {\n cursor: pointer;\n text-decoration: underline\n }\n\n .preview-form {\n margin-top: 2rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n\n .preview-input {\n padding: 0.5rem;\n border: 1px solid #4A4A4A;\n border-radius: 0;\n font-family: monospace;\n }\n\n .preview-button {\n padding: 0.5rem;\n background: #4A4A4A;\n color: white;\n border: none;\n border-radius: 0;\n cursor: pointer;\n font-family: monospace;\n }\n\n .preview-button:hover {\n opacity: 0.9;\n }\n\n .buttons {\n display: grid;\n gap: 0.5em;\n grid-template-columns: 1fr 1fr;\n }\n\n #copy-status {\n font-size: 1em;\n text-align: right;\n margin-top: 0.5em;\n }\n\n .features-section {\n margin-top: 1.5rem;\n }\n\n .features-label {\n font-weight: 700;\n font-size: .875rem;\n margin-bottom: 0.5rem;\n }\n\n .feature-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n padding: 0.25rem 0;\n }\n\n .feature-row label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n min-width: 0;\n flex: 1;\n }\n\n .feature-name {\n font-size: .875rem;\n }\n\n .feature-id {\n font-size: .75rem;\n color: #888;\n }\n\n .feature-row select {\n font-family: monospace;\n font-size: .75rem;\n padding: 0.125rem 0.25rem;\n border: 1px solid #4A4A4A;\n border-radius: 0;\n background: white;\n flex-shrink: 0;\n }\n\n .no-features {\n color: #888;\n font-style: italic;\n }\n\n .url-history {\n margin-top: 0.5rem;\n font-size: .75rem;\n }\n\n .url-history-item {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.125rem 0;\n }\n\n .url-history-item button {\n background: none;\n border: none;\n cursor: pointer;\n font-family: monospace;\n font-size: .75rem;\n color: #888;\n padding: 0;\n }\n\n .url-history-item button.url-link {\n color: #4A4A4A;\n text-decoration: none;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n min-width: 0;\n }\n\n .url-history-item button.url-link:hover {\n text-decoration: underline;\n }\n\n .url-history-item button.url-delete:hover {\n color: #b71c1c;\n }\n\n @media (min-width: 640px) {\n .title {\n font-size: 1.25rem\n }\n\n .text {\n font-size: 1rem\n }\n }\n </style>\n</head>\n<body>\n\n<main>\n <div class=\"wrap\">\n <p class=\"title\">Picked</p>\n <p class=\"text\">\n Learn more at\n <a href=\"https://picked.app\">\n https://picked.app\n </a>\n </p>\n <div class=\"preview-form\">\n <input type=\"text\" id=\"url-input\" pattern=\"^(https?://)?.+\" placeholder=\"Enter preview URL\" required\n class=\"preview-input\">\n <div id=\"url-history\" class=\"url-history\"></div>\n <div class=\"features-section\">\n <p class=\"features-label\">Features</p>\n ",
|
|
27
27
|
"\n </div>\n <div class=\"buttons\">\n <button type=\"button\" class=\"preview-button\" id=\"copy-btn\">Copy</button>\n <button type=\"button\" class=\"preview-button\" id=\"preview-btn\">Preview</button>\n </div>\n <p class=\"text\" id=\"copy-status\" aria-live=\"polite\" style=\"visibility:hidden;\">\n \n </p>\n </div>\n </div>\n\n <script>\n var FEATURES = ",
|
|
28
28
|
";\n var STORAGE_KEY_URL = 'picked-launcher-url';\n var STORAGE_KEY_HISTORY = 'picked-launcher-history';\n var STORAGE_KEY_SELECTIONS = 'picked-launcher-selections';\n\n function getUrlInput() {\n return document.getElementById('url-input');\n }\n\n // URL history\n function getHistory() {\n try {\n var raw = localStorage.getItem(STORAGE_KEY_HISTORY);\n if (!raw) return [];\n var parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch (e) {\n return [];\n }\n }\n\n function saveHistory(history) {\n localStorage.setItem(STORAGE_KEY_HISTORY, JSON.stringify(history));\n }\n\n function addToHistory(url) {\n var history = getHistory().filter(function(h) { return h !== url; });\n history.unshift(url);\n if (history.length > 10) history = history.slice(0, 10);\n saveHistory(history);\n renderHistory();\n }\n\n function removeFromHistory(url) {\n var history = getHistory().filter(function(h) { return h !== url; });\n saveHistory(history);\n renderHistory();\n }\n\n function renderHistory() {\n var container = document.getElementById('url-history');\n if (!container) return;\n var history = getHistory();\n if (history.length === 0) {\n container.innerHTML = '';\n return;\n }\n container.innerHTML = history.map(function(url) {\n return '<div class=\"url-history-item\">' +\n '<button type=\"button\" class=\"url-link\" data-history-url=\"' + escapeAttr(url) + '\">' + escapeHtml(url) + '</button>' +\n '<button type=\"button\" class=\"url-delete\" data-history-delete=\"' + escapeAttr(url) + '\">x</button>' +\n '</div>';\n }).join('');\n }\n\n // Feature selection persistence\n function getSelections() {\n try {\n var raw = localStorage.getItem(STORAGE_KEY_SELECTIONS);\n if (!raw) return {};\n var parsed = JSON.parse(raw);\n return typeof parsed === 'object' && parsed !== null ? parsed : {};\n } catch (e) {\n return {};\n }\n }\n\n function saveSelections() {\n var selections = {};\n FEATURES.forEach(function(f) {\n var checkbox = document.querySelector('input[data-feature-id=\"' + f.id + '\"]');\n var select = document.querySelector('select[data-value-for=\"' + f.id + '\"]');\n if (checkbox && select) {\n selections[f.id] = { checked: checkbox.checked, value: select.value };\n }\n });\n localStorage.setItem(STORAGE_KEY_SELECTIONS, JSON.stringify(selections));\n }\n\n function restoreSelections() {\n var selections = getSelections();\n FEATURES.forEach(function(f) {\n var saved = selections[f.id];\n if (!saved) return;\n var checkbox = document.querySelector('input[data-feature-id=\"' + f.id + '\"]');\n var select = document.querySelector('select[data-value-for=\"' + f.id + '\"]');\n if (checkbox) checkbox.checked = saved.checked;\n if (select) select.value = saved.value;\n });\n }\n\n function escapeHtml(str) {\n var div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n }\n\n function escapeAttr(str) {\n return str.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>');\n }\n\n function buildTargetUrl(inputValue) {\n var value = inputValue;\n if (!value.startsWith('http://') && !value.startsWith('https://')) {\n value = 'https://' + value;\n }\n var hostname = window.location.hostname;\n var subdomain = hostname.split('.').length > 2 ? hostname.split('.')[0] : '';\n var target = value;\n var sep = target.includes('?') ? '&' : '?';\n if (subdomain) {\n target = target + sep + 'cvly_env=' + encodeURIComponent(subdomain);\n sep = '&';\n }\n FEATURES.forEach(function(f) {\n var checkbox = document.querySelector('input[data-feature-id=\"' + f.id + '\"]');\n var select = document.querySelector('select[data-value-for=\"' + f.id + '\"]');\n if (checkbox && checkbox.checked && select) {\n target = target + sep + 'picked-feature=' + encodeURIComponent(f.id + ':' + select.value);\n sep = '&';\n }\n });\n return target;\n }\n\n function showCopyStatus(message, success) {\n var el = document.getElementById('copy-status');\n if (!el) return;\n el.textContent = message;\n el.style.visibility = 'visible';\n el.style.color = success ? '#2e7d32' : '#b71c1c';\n setTimeout(function() {\n el.style.visibility = 'hidden';\n }, 2000);\n }\n\n // Init\n window.addEventListener('load', function() {\n var input = getUrlInput();\n var savedUrl = localStorage.getItem(STORAGE_KEY_URL);\n if (savedUrl && input) {\n input.value = savedUrl;\n }\n renderHistory();\n restoreSelections();\n });\n\n // Delegate click events\n document.addEventListener('click', function(e) {\n var target = e.target;\n\n // History URL click\n var historyUrl = target.getAttribute('data-history-url');\n if (historyUrl) {\n var input = getUrlInput();\n if (input) input.value = historyUrl;\n return;\n }\n\n // History delete click\n var deleteUrl = target.getAttribute('data-history-delete');\n if (deleteUrl) {\n removeFromHistory(deleteUrl);\n return;\n }\n });\n\n // Feature change persistence\n document.addEventListener('change', function(e) {\n var target = e.target;\n if (target.getAttribute('data-feature-id') || target.getAttribute('data-value-for')) {\n saveSelections();\n }\n });\n\n // Copy button\n document.getElementById('copy-btn').addEventListener('click', function() {\n var input = getUrlInput();\n if (!input || !input.value) return;\n localStorage.setItem(STORAGE_KEY_URL, input.value);\n addToHistory(input.value);\n saveSelections();\n var target = buildTargetUrl(input.value);\n navigator.clipboard.writeText(target).then(function() {\n showCopyStatus('Preview URL copied to clipboard', true);\n });\n });\n\n // Preview button\n document.getElementById('preview-btn').addEventListener('click', function() {\n var input = getUrlInput();\n if (!input || !input.value) return;\n localStorage.setItem(STORAGE_KEY_URL, input.value);\n addToHistory(input.value);\n saveSelections();\n var target = buildTargetUrl(input.value);\n window.location.href = target;\n });\n <\/script>\n</main>\n</body>\n</html>"
|
|
@@ -32,46 +32,46 @@ function d(e) {
|
|
|
32
32
|
";\n var STORAGE_KEY_URL = 'picked-launcher-url';\n var STORAGE_KEY_HISTORY = 'picked-launcher-history';\n var STORAGE_KEY_SELECTIONS = 'picked-launcher-selections';\n\n function getUrlInput() {\n return document.getElementById('url-input');\n }\n\n // URL history\n function getHistory() {\n try {\n var raw = localStorage.getItem(STORAGE_KEY_HISTORY);\n if (!raw) return [];\n var parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch (e) {\n return [];\n }\n }\n\n function saveHistory(history) {\n localStorage.setItem(STORAGE_KEY_HISTORY, JSON.stringify(history));\n }\n\n function addToHistory(url) {\n var history = getHistory().filter(function(h) { return h !== url; });\n history.unshift(url);\n if (history.length > 10) history = history.slice(0, 10);\n saveHistory(history);\n renderHistory();\n }\n\n function removeFromHistory(url) {\n var history = getHistory().filter(function(h) { return h !== url; });\n saveHistory(history);\n renderHistory();\n }\n\n function renderHistory() {\n var container = document.getElementById('url-history');\n if (!container) return;\n var history = getHistory();\n if (history.length === 0) {\n container.innerHTML = '';\n return;\n }\n container.innerHTML = history.map(function(url) {\n return '<div class=\"url-history-item\">' +\n '<button type=\"button\" class=\"url-link\" data-history-url=\"' + escapeAttr(url) + '\">' + escapeHtml(url) + '</button>' +\n '<button type=\"button\" class=\"url-delete\" data-history-delete=\"' + escapeAttr(url) + '\">x</button>' +\n '</div>';\n }).join('');\n }\n\n // Feature selection persistence\n function getSelections() {\n try {\n var raw = localStorage.getItem(STORAGE_KEY_SELECTIONS);\n if (!raw) return {};\n var parsed = JSON.parse(raw);\n return typeof parsed === 'object' && parsed !== null ? parsed : {};\n } catch (e) {\n return {};\n }\n }\n\n function saveSelections() {\n var selections = {};\n FEATURES.forEach(function(f) {\n var checkbox = document.querySelector('input[data-feature-id=\"' + f.id + '\"]');\n var select = document.querySelector('select[data-value-for=\"' + f.id + '\"]');\n if (checkbox && select) {\n selections[f.id] = { checked: checkbox.checked, value: select.value };\n }\n });\n localStorage.setItem(STORAGE_KEY_SELECTIONS, JSON.stringify(selections));\n }\n\n function restoreSelections() {\n var selections = getSelections();\n FEATURES.forEach(function(f) {\n var saved = selections[f.id];\n if (!saved) return;\n var checkbox = document.querySelector('input[data-feature-id=\"' + f.id + '\"]');\n var select = document.querySelector('select[data-value-for=\"' + f.id + '\"]');\n if (checkbox) checkbox.checked = saved.checked;\n if (select) select.value = saved.value;\n });\n }\n\n function escapeHtml(str) {\n var div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n }\n\n function escapeAttr(str) {\n return str.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>');\n }\n\n function buildTargetUrl(inputValue) {\n var value = inputValue;\n if (!value.startsWith('http://') && !value.startsWith('https://')) {\n value = 'https://' + value;\n }\n var hostname = window.location.hostname;\n var subdomain = hostname.split('.').length > 2 ? hostname.split('.')[0] : '';\n var target = value;\n var sep = target.includes('?') ? '&' : '?';\n if (subdomain) {\n target = target + sep + 'cvly_env=' + encodeURIComponent(subdomain);\n sep = '&';\n }\n FEATURES.forEach(function(f) {\n var checkbox = document.querySelector('input[data-feature-id=\"' + f.id + '\"]');\n var select = document.querySelector('select[data-value-for=\"' + f.id + '\"]');\n if (checkbox && checkbox.checked && select) {\n target = target + sep + 'picked-feature=' + encodeURIComponent(f.id + ':' + select.value);\n sep = '&';\n }\n });\n return target;\n }\n\n function showCopyStatus(message, success) {\n var el = document.getElementById('copy-status');\n if (!el) return;\n el.textContent = message;\n el.style.visibility = 'visible';\n el.style.color = success ? '#2e7d32' : '#b71c1c';\n setTimeout(function() {\n el.style.visibility = 'hidden';\n }, 2000);\n }\n\n // Init\n window.addEventListener('load', function() {\n var input = getUrlInput();\n var savedUrl = localStorage.getItem(STORAGE_KEY_URL);\n if (savedUrl && input) {\n input.value = savedUrl;\n }\n renderHistory();\n restoreSelections();\n });\n\n // Delegate click events\n document.addEventListener('click', function(e) {\n var target = e.target;\n\n // History URL click\n var historyUrl = target.getAttribute('data-history-url');\n if (historyUrl) {\n var input = getUrlInput();\n if (input) input.value = historyUrl;\n return;\n }\n\n // History delete click\n var deleteUrl = target.getAttribute('data-history-delete');\n if (deleteUrl) {\n removeFromHistory(deleteUrl);\n return;\n }\n });\n\n // Feature change persistence\n document.addEventListener('change', function(e) {\n var target = e.target;\n if (target.getAttribute('data-feature-id') || target.getAttribute('data-value-for')) {\n saveSelections();\n }\n });\n\n // Copy button\n document.getElementById('copy-btn').addEventListener('click', function() {\n var input = getUrlInput();\n if (!input || !input.value) return;\n localStorage.setItem(STORAGE_KEY_URL, input.value);\n addToHistory(input.value);\n saveSelections();\n var target = buildTargetUrl(input.value);\n navigator.clipboard.writeText(target).then(function() {\n showCopyStatus('Preview URL copied to clipboard', true);\n });\n });\n\n // Preview button\n document.getElementById('preview-btn').addEventListener('click', function() {\n var input = getUrlInput();\n if (!input || !input.value) return;\n localStorage.setItem(STORAGE_KEY_URL, input.value);\n addToHistory(input.value);\n saveSelections();\n var target = buildTargetUrl(input.value);\n window.location.href = target;\n });\n <\/script>\n</main>\n</body>\n</html>"
|
|
33
33
|
]), n, t);
|
|
34
34
|
}
|
|
35
|
-
function
|
|
35
|
+
function p(e) {
|
|
36
36
|
return e.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\"", """);
|
|
37
37
|
}
|
|
38
|
-
function
|
|
38
|
+
function m(e) {
|
|
39
39
|
return e.replaceAll("&", "&").replaceAll("\"", """).replaceAll("<", "<").replaceAll(">", ">");
|
|
40
40
|
}
|
|
41
41
|
//#endregion
|
|
42
42
|
//#region src/log.ts
|
|
43
|
-
var
|
|
44
|
-
function
|
|
43
|
+
var h = "picked", g = "\x1B[0m";
|
|
44
|
+
function ee() {
|
|
45
45
|
let e = process.env.NO_COLOR;
|
|
46
46
|
return e === "1" || e === "true";
|
|
47
47
|
}
|
|
48
|
-
function
|
|
49
|
-
return (t) =>
|
|
48
|
+
function _(e) {
|
|
49
|
+
return (t) => ee() ? t : `${e}${t}${g}`;
|
|
50
50
|
}
|
|
51
|
-
var
|
|
51
|
+
var v = [
|
|
52
52
|
"debug",
|
|
53
53
|
"info",
|
|
54
54
|
"warn",
|
|
55
55
|
"error",
|
|
56
56
|
"silent"
|
|
57
|
-
],
|
|
57
|
+
], y = {
|
|
58
58
|
debug: {
|
|
59
|
-
color:
|
|
59
|
+
color: _("\x1B[2m"),
|
|
60
60
|
log: console.debug,
|
|
61
61
|
enabled: !1
|
|
62
62
|
},
|
|
63
63
|
info: {
|
|
64
|
-
color:
|
|
64
|
+
color: _("\x1B[36m"),
|
|
65
65
|
log: console.log,
|
|
66
66
|
enabled: !0
|
|
67
67
|
},
|
|
68
68
|
warn: {
|
|
69
|
-
color:
|
|
69
|
+
color: _("\x1B[33m"),
|
|
70
70
|
log: console.warn,
|
|
71
71
|
enabled: !0
|
|
72
72
|
},
|
|
73
73
|
error: {
|
|
74
|
-
color:
|
|
74
|
+
color: _("\x1B[31m"),
|
|
75
75
|
log: console.error,
|
|
76
76
|
enabled: !0
|
|
77
77
|
},
|
|
@@ -80,48 +80,48 @@ var g = [
|
|
|
80
80
|
enabled: !1
|
|
81
81
|
}
|
|
82
82
|
};
|
|
83
|
-
function
|
|
84
|
-
return `${(/* @__PURE__ */ new Date()).toLocaleTimeString()} [${t ? `${
|
|
83
|
+
function te(e, t) {
|
|
84
|
+
return `${(/* @__PURE__ */ new Date()).toLocaleTimeString()} [${t ? `${h}:${t}` : h}] ${e}`;
|
|
85
85
|
}
|
|
86
|
-
function
|
|
86
|
+
function b(e, t, n, r) {
|
|
87
87
|
if (!e.enabled) return;
|
|
88
|
-
let i =
|
|
88
|
+
let i = te(t, r);
|
|
89
89
|
e.log(e.color ? e.color(i) : i), n !== void 0 && e.log(n);
|
|
90
90
|
}
|
|
91
|
-
function
|
|
92
|
-
let t =
|
|
91
|
+
function x(e) {
|
|
92
|
+
let t = y[e], n = /* @__PURE__ */ new Set();
|
|
93
93
|
return Object.assign((e, n, r) => {
|
|
94
|
-
|
|
94
|
+
b(t, e, n, r);
|
|
95
95
|
}, { once(e, r, i) {
|
|
96
|
-
!t.enabled || n.has(e) || (n.add(e),
|
|
96
|
+
!t.enabled || n.has(e) || (n.add(e), b(t, e, r, i));
|
|
97
97
|
} });
|
|
98
98
|
}
|
|
99
|
-
function
|
|
100
|
-
let t =
|
|
99
|
+
function S(e) {
|
|
100
|
+
let t = v.indexOf(e);
|
|
101
101
|
if (t === -1) {
|
|
102
|
-
y
|
|
102
|
+
b(y.error, `invalid log level: ${e}`);
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
|
-
for (let [e, n] of
|
|
105
|
+
for (let [e, n] of v.entries()) y[n].enabled = e >= t;
|
|
106
106
|
}
|
|
107
|
-
var
|
|
108
|
-
function
|
|
107
|
+
var C = _("\x1B[34m"), w = _("\x1B[36m");
|
|
108
|
+
function ne() {
|
|
109
109
|
let e = [
|
|
110
|
-
` ${
|
|
111
|
-
`${
|
|
112
|
-
` ${
|
|
113
|
-
`${
|
|
110
|
+
` ${C("_")} ${w("_")} _ _ _`,
|
|
111
|
+
`${C("(_)")} ${w("(_)")} _ __(_)__| |_____ __| |`,
|
|
112
|
+
` ${C("_")} ${C("_")} | '_ \\ / _| / / -_) _\` |`,
|
|
113
|
+
`${C("(_)")} ${C("(_)")} | .__/_\\__|_\\_\\___\\__,_|`,
|
|
114
114
|
" |_|\n "
|
|
115
115
|
];
|
|
116
116
|
console.log(e.join("\n"));
|
|
117
117
|
}
|
|
118
118
|
var T = {
|
|
119
|
-
banner:
|
|
120
|
-
debug:
|
|
121
|
-
info:
|
|
122
|
-
warn:
|
|
123
|
-
error:
|
|
124
|
-
setLevel:
|
|
119
|
+
banner: ne,
|
|
120
|
+
debug: x("debug"),
|
|
121
|
+
info: x("info"),
|
|
122
|
+
warn: x("warn"),
|
|
123
|
+
error: x("error"),
|
|
124
|
+
setLevel: S
|
|
125
125
|
};
|
|
126
126
|
//#endregion
|
|
127
127
|
//#region src/middleware.ts
|
|
@@ -143,27 +143,27 @@ function E(e) {
|
|
|
143
143
|
//#endregion
|
|
144
144
|
//#region src/gitignore.ts
|
|
145
145
|
var D = ".picked/";
|
|
146
|
-
async function
|
|
147
|
-
if (
|
|
148
|
-
let
|
|
149
|
-
if (!e(
|
|
150
|
-
await
|
|
146
|
+
async function O(n, r) {
|
|
147
|
+
if (r) return;
|
|
148
|
+
let i = t(n, ".gitignore");
|
|
149
|
+
if (!e(i)) {
|
|
150
|
+
await l(i, `${D}
|
|
151
151
|
`);
|
|
152
152
|
return;
|
|
153
153
|
}
|
|
154
|
-
let a = await
|
|
155
|
-
if (
|
|
156
|
-
let
|
|
154
|
+
let a = await c(i, "utf8");
|
|
155
|
+
if (k(a)) return;
|
|
156
|
+
let s = `${a.length > 0 && !a.endsWith("\n") ? "\n" : ""}${D}
|
|
157
157
|
`;
|
|
158
|
-
await i
|
|
158
|
+
await o(i, s);
|
|
159
159
|
}
|
|
160
|
-
function
|
|
160
|
+
function k(e) {
|
|
161
161
|
return e.split(/\r?\n/).map((e) => e.trim()).some((e) => e === D || e === ".picked");
|
|
162
162
|
}
|
|
163
163
|
//#endregion
|
|
164
164
|
//#region src/retry.ts
|
|
165
|
-
var
|
|
166
|
-
function
|
|
165
|
+
var A = 6, re = 5e3;
|
|
166
|
+
function j(e) {
|
|
167
167
|
let t;
|
|
168
168
|
try {
|
|
169
169
|
t = new URL(e).hostname;
|
|
@@ -172,7 +172,7 @@ function A(e) {
|
|
|
172
172
|
}
|
|
173
173
|
return t === "localhost" || t === "127.0.0.1" || t === "::1" || t === "[::1]" || t !== "api.picked.app" && t.endsWith(".picked.app");
|
|
174
174
|
}
|
|
175
|
-
function
|
|
175
|
+
function ie(e) {
|
|
176
176
|
return new Promise((t) => {
|
|
177
177
|
setTimeout(t, e);
|
|
178
178
|
});
|
|
@@ -185,9 +185,9 @@ async function M(e, t) {
|
|
|
185
185
|
r = e;
|
|
186
186
|
}
|
|
187
187
|
if (n !== null) return n;
|
|
188
|
-
for (let i = 1; i <=
|
|
189
|
-
let a =
|
|
190
|
-
t(i,
|
|
188
|
+
for (let i = 1; i <= A; i++) {
|
|
189
|
+
let a = re * 2 ** (i - 1);
|
|
190
|
+
t(i, A, a), await ie(a), r = null;
|
|
191
191
|
try {
|
|
192
192
|
n = await e();
|
|
193
193
|
} catch (e) {
|
|
@@ -205,20 +205,20 @@ function N(e) {
|
|
|
205
205
|
}
|
|
206
206
|
//#endregion
|
|
207
207
|
//#region src/prefetch.ts
|
|
208
|
-
var P =
|
|
208
|
+
var P = 1;
|
|
209
209
|
function F(e) {
|
|
210
|
-
let
|
|
210
|
+
let n = t(e, ".picked");
|
|
211
211
|
return {
|
|
212
|
-
pickedDir:
|
|
213
|
-
manifestPath:
|
|
214
|
-
projectConfigPath:
|
|
215
|
-
experiencesDir:
|
|
212
|
+
pickedDir: n,
|
|
213
|
+
manifestPath: t(n, "manifest.json"),
|
|
214
|
+
projectConfigPath: t(n, "project-config.json"),
|
|
215
|
+
experiencesDir: t(n, "experiences")
|
|
216
216
|
};
|
|
217
217
|
}
|
|
218
218
|
async function I(t) {
|
|
219
219
|
if (!e(t)) return null;
|
|
220
220
|
try {
|
|
221
|
-
let e = await
|
|
221
|
+
let e = await c(t, "utf8"), n = JSON.parse(e);
|
|
222
222
|
return L(n) ? n : null;
|
|
223
223
|
} catch {
|
|
224
224
|
return null;
|
|
@@ -235,64 +235,67 @@ function R(e) {
|
|
|
235
235
|
for (let r of N(e.experiences)) N(r.nodes).some((e) => e.type === "step" && t.has(e.stepId)) && n.push(r.id);
|
|
236
236
|
return n;
|
|
237
237
|
}
|
|
238
|
-
async function z(
|
|
239
|
-
let { apiUrl:
|
|
240
|
-
if (
|
|
241
|
-
let
|
|
242
|
-
if (
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
238
|
+
async function z(n) {
|
|
239
|
+
let { apiUrl: r, projectId: i, projectRoot: a, headers: o, reuseWhenUnchanged: c = !0 } = n, u = F(a), d = await V(r, i, o), f = R(d);
|
|
240
|
+
if (await s(u.experiencesDir, { recursive: !0 }), await l(u.projectConfigPath, JSON.stringify(d, null, 2)), c) {
|
|
241
|
+
let t = await I(u.manifestPath);
|
|
242
|
+
if (t && t.projectVersionId === d.versionId && t.workspaceId === d.workspaceId) {
|
|
243
|
+
let n = B(u, f);
|
|
244
|
+
if (Object.values(n).every((t) => e(t))) return {
|
|
245
|
+
config: d,
|
|
246
|
+
manifest: t,
|
|
247
|
+
experienceContentPaths: n
|
|
248
|
+
};
|
|
249
|
+
T.info("a manifest-referenced content file is missing; refetching every experience");
|
|
250
|
+
}
|
|
247
251
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
await s(a, JSON.stringify(r, null, 2)), p.push({
|
|
252
|
+
let p = (/* @__PURE__ */ new Date()).toISOString(), m = [];
|
|
253
|
+
for (let e of f) {
|
|
254
|
+
let n = await H(r, i, e, o), a = t(u.experiencesDir, `${e}.json`);
|
|
255
|
+
await l(a, JSON.stringify(n, null, 2)), m.push({
|
|
253
256
|
id: e,
|
|
254
|
-
fetchedAt:
|
|
257
|
+
fetchedAt: p
|
|
255
258
|
});
|
|
256
259
|
}
|
|
257
|
-
let
|
|
260
|
+
let h = {
|
|
258
261
|
version: P,
|
|
259
|
-
fetchedAt:
|
|
260
|
-
projectVersionId:
|
|
261
|
-
workspaceId:
|
|
262
|
-
projectId:
|
|
263
|
-
experiences:
|
|
262
|
+
fetchedAt: p,
|
|
263
|
+
projectVersionId: d.versionId,
|
|
264
|
+
workspaceId: d.workspaceId,
|
|
265
|
+
projectId: d.id,
|
|
266
|
+
experiences: m
|
|
264
267
|
};
|
|
265
|
-
return await
|
|
266
|
-
config:
|
|
267
|
-
manifest:
|
|
268
|
-
experienceContentPaths: B(
|
|
268
|
+
return await l(u.manifestPath, JSON.stringify(h, null, 2)), {
|
|
269
|
+
config: d,
|
|
270
|
+
manifest: h,
|
|
271
|
+
experienceContentPaths: B(u, f)
|
|
269
272
|
};
|
|
270
273
|
}
|
|
271
|
-
function B(e,
|
|
272
|
-
let
|
|
273
|
-
for (let
|
|
274
|
-
return
|
|
274
|
+
function B(e, n) {
|
|
275
|
+
let r = {};
|
|
276
|
+
for (let i of n) r[i] = t(e.experiencesDir, `${i}.json`);
|
|
277
|
+
return r;
|
|
275
278
|
}
|
|
276
279
|
async function V(e, t, n) {
|
|
277
|
-
let
|
|
280
|
+
let r = () => a(e, t, { headers: n }), i;
|
|
278
281
|
try {
|
|
279
|
-
|
|
282
|
+
i = j(e) ? await M(r, (e, t, n) => {
|
|
280
283
|
T.info(`project config not ready, retrying in ${(n / 1e3).toString()}s (${e.toString()}/${t.toString()})`);
|
|
281
|
-
}) : await
|
|
284
|
+
}) : await r();
|
|
282
285
|
} catch (n) {
|
|
283
286
|
throw Error(`[picked] Build-time fetch of project config failed for "${t}" at ${e}: ${U(n)}`);
|
|
284
287
|
}
|
|
285
|
-
if (!
|
|
286
|
-
return
|
|
288
|
+
if (!i) throw Error(`[picked] Build-time fetch of project config returned no usable response for "${t}" at ${e}. Confirm the API is reachable and the project ID is correct.`);
|
|
289
|
+
return i;
|
|
287
290
|
}
|
|
288
|
-
async function H(e, t,
|
|
291
|
+
async function H(e, t, n, r) {
|
|
289
292
|
let a;
|
|
290
293
|
try {
|
|
291
|
-
a = await
|
|
294
|
+
a = await i(e, t, n, { headers: r });
|
|
292
295
|
} catch (t) {
|
|
293
|
-
throw Error(`[picked] Build-time fetch of content for experience "${
|
|
296
|
+
throw Error(`[picked] Build-time fetch of content for experience "${n}" failed at ${e}: ${U(t)}`);
|
|
294
297
|
}
|
|
295
|
-
if (!a) throw Error(`[picked] Build-time fetch of content for experience "${
|
|
298
|
+
if (!a) throw Error(`[picked] Build-time fetch of content for experience "${n}" returned no usable response. Confirm the experience id exists and the API is reachable.`);
|
|
296
299
|
return a;
|
|
297
300
|
}
|
|
298
301
|
function U(e) {
|
|
@@ -334,13 +337,13 @@ export const manifestMetadata = ${JSON.stringify(r)}
|
|
|
334
337
|
//#endregion
|
|
335
338
|
//#region src/virtual-module/dev.ts
|
|
336
339
|
function G(e) {
|
|
337
|
-
let { apiUrl: t, projectId: n } = e;
|
|
338
|
-
return
|
|
340
|
+
let { apiUrl: t, projectId: n, projectConfig: r } = e, i = r ? "import { fetchExperienceContent } from '@picked/client/plugins/dynamic-experiences'" : "import { fetchProject, fetchExperienceContent } from '@picked/client/plugins/dynamic-experiences'", a = r ? `export const projectConfig = ${JSON.stringify(r)}` : "export const projectConfig = await fetchProject(apiUrl, projectId)";
|
|
341
|
+
return `${i}
|
|
339
342
|
|
|
340
343
|
const apiUrl = ${JSON.stringify(t)}
|
|
341
344
|
const projectId = ${JSON.stringify(n)}
|
|
342
345
|
|
|
343
|
-
|
|
346
|
+
${a}
|
|
344
347
|
|
|
345
348
|
export async function experienceContent(experience, options) {
|
|
346
349
|
const id = typeof experience === 'string' ? experience : experience?.id
|
|
@@ -379,7 +382,7 @@ function q(e, t, n) {
|
|
|
379
382
|
function J(e, t) {
|
|
380
383
|
t.length !== 0 && console.log(`\n ${e}: ${t.length.toString()} loaded\n`);
|
|
381
384
|
}
|
|
382
|
-
var
|
|
385
|
+
var ae = [
|
|
383
386
|
{
|
|
384
387
|
header: "Name",
|
|
385
388
|
value: (e) => e.name
|
|
@@ -400,7 +403,7 @@ var Y = [
|
|
|
400
403
|
header: "Ver",
|
|
401
404
|
value: (e) => `v${e.version.toString()}`
|
|
402
405
|
}
|
|
403
|
-
],
|
|
406
|
+
], oe = [
|
|
404
407
|
{
|
|
405
408
|
header: "Name",
|
|
406
409
|
value: (e) => e.name
|
|
@@ -421,7 +424,7 @@ var Y = [
|
|
|
421
424
|
header: "Targets",
|
|
422
425
|
value: (e) => e.targets.length.toString()
|
|
423
426
|
}
|
|
424
|
-
],
|
|
427
|
+
], se = [
|
|
425
428
|
{
|
|
426
429
|
header: "Name",
|
|
427
430
|
value: (e) => e.name
|
|
@@ -434,7 +437,7 @@ var Y = [
|
|
|
434
437
|
header: "Fields",
|
|
435
438
|
value: (e) => (e.fieldIds?.length ?? 0).toString()
|
|
436
439
|
}
|
|
437
|
-
],
|
|
440
|
+
], ce = [
|
|
438
441
|
{
|
|
439
442
|
header: "Name",
|
|
440
443
|
value: (e) => e.name
|
|
@@ -451,81 +454,118 @@ var Y = [
|
|
|
451
454
|
header: "Required",
|
|
452
455
|
value: (e) => e.required ? "yes" : "no"
|
|
453
456
|
}
|
|
454
|
-
],
|
|
457
|
+
], le = [{
|
|
455
458
|
header: "Name",
|
|
456
459
|
value: (e) => e.name
|
|
457
460
|
}, {
|
|
458
461
|
header: "Key",
|
|
459
462
|
value: (e) => e.key
|
|
460
463
|
}];
|
|
461
|
-
function
|
|
462
|
-
return "0.0.1-dev.
|
|
464
|
+
function ue() {
|
|
465
|
+
return "0.0.1-dev.1785908062293";
|
|
463
466
|
}
|
|
464
|
-
var
|
|
465
|
-
function
|
|
466
|
-
let
|
|
467
|
+
var Y = "https://api.picked.app", X = "virtual:picked/data", Z = `\0${X}`;
|
|
468
|
+
function Q(e) {
|
|
469
|
+
for (let t of Object.values(e)) if (t.type === "chunk" && t.moduleIds.includes(Z)) return t.fileName;
|
|
470
|
+
}
|
|
471
|
+
function de(e, t) {
|
|
472
|
+
return e === "" || e.endsWith("/") ? `${e}${t}` : `${e}/${t}`;
|
|
473
|
+
}
|
|
474
|
+
function fe(t) {
|
|
475
|
+
let i = t.apiUrl ?? Y, o = [], s = process.cwd(), c = "serve", l = "/", u, d = !1, p = null;
|
|
467
476
|
return {
|
|
468
477
|
name: "picked",
|
|
469
|
-
config: async (
|
|
470
|
-
|
|
471
|
-
let
|
|
472
|
-
if (
|
|
473
|
-
if (
|
|
474
|
-
|
|
475
|
-
let
|
|
478
|
+
config: async (l, f) => {
|
|
479
|
+
c = f.command, s = l.root === void 0 ? process.cwd() : n(process.cwd(), l.root), T.banner(), i !== Y && T.warn(`using custom API URL: ${i}`);
|
|
480
|
+
let m = r("vite-plugin", ue());
|
|
481
|
+
if (f.command === "build") {
|
|
482
|
+
if (d) return;
|
|
483
|
+
d = !0, T.info(`prefetching project config + content for "${t.projectId}"`);
|
|
484
|
+
let n = F(s), r = e(n.pickedDir), a = performance.now(), c = await z({
|
|
476
485
|
apiUrl: i,
|
|
477
|
-
projectId:
|
|
478
|
-
projectRoot:
|
|
479
|
-
headers:
|
|
480
|
-
}),
|
|
481
|
-
await
|
|
482
|
-
let
|
|
483
|
-
|
|
484
|
-
projectConfigPath:
|
|
485
|
-
experienceContentPaths:
|
|
486
|
+
projectId: t.projectId,
|
|
487
|
+
projectRoot: s,
|
|
488
|
+
headers: m
|
|
489
|
+
}), l = (performance.now() - a).toFixed(0);
|
|
490
|
+
await O(s, r);
|
|
491
|
+
let f = c.config;
|
|
492
|
+
o = N(f.features), $(f, l), u = W({
|
|
493
|
+
projectConfigPath: n.projectConfigPath,
|
|
494
|
+
experienceContentPaths: c.experienceContentPaths,
|
|
486
495
|
manifestMetadata: {
|
|
487
496
|
mode: "build",
|
|
488
|
-
fetchedAt:
|
|
489
|
-
projectVersionId:
|
|
490
|
-
workspaceId:
|
|
497
|
+
fetchedAt: c.manifest.fetchedAt,
|
|
498
|
+
projectVersionId: c.manifest.projectVersionId,
|
|
499
|
+
workspaceId: c.manifest.workspaceId
|
|
491
500
|
}
|
|
492
501
|
});
|
|
493
502
|
} else {
|
|
494
|
-
T.info(`fetching project config for "${
|
|
495
|
-
let e = performance.now(),
|
|
503
|
+
T.info(`fetching project config for "${t.projectId}" (dev)`);
|
|
504
|
+
let e = performance.now(), n = () => a(i, t.projectId, { headers: m }), r = j(i) ? await M(n, (e, t, n) => {
|
|
496
505
|
T.info(`local API not ready, retrying in ${(n / 1e3).toString()}s (${e.toString()}/${t.toString()})`);
|
|
497
|
-
}) : await
|
|
498
|
-
|
|
506
|
+
}) : await n(), s = (performance.now() - e).toFixed(0);
|
|
507
|
+
p = r, r ? (o = N(r.features), $(r, s)) : T.warn(`failed to fetch project config for "${t.projectId}" (${s}ms)`);
|
|
508
|
+
}
|
|
509
|
+
},
|
|
510
|
+
configResolved(e) {
|
|
511
|
+
l = e.base;
|
|
512
|
+
},
|
|
513
|
+
transformIndexHtml: {
|
|
514
|
+
order: "post",
|
|
515
|
+
handler(e, t) {
|
|
516
|
+
if (t.bundle === void 0) return;
|
|
517
|
+
let n = Q(t.bundle);
|
|
518
|
+
if (n === void 0) return;
|
|
519
|
+
let r = de(l, n);
|
|
520
|
+
if (!e.includes(`"${r}"`)) return [{
|
|
521
|
+
tag: "link",
|
|
522
|
+
attrs: {
|
|
523
|
+
rel: "modulepreload",
|
|
524
|
+
crossorigin: !0,
|
|
525
|
+
href: r
|
|
526
|
+
},
|
|
527
|
+
injectTo: "head"
|
|
528
|
+
}];
|
|
499
529
|
}
|
|
500
530
|
},
|
|
501
531
|
resolveId(e) {
|
|
502
|
-
if (e ===
|
|
532
|
+
if (e === X) return Z;
|
|
503
533
|
},
|
|
504
534
|
load(e) {
|
|
505
|
-
if (e ===
|
|
535
|
+
if (e === Z) return c === "build" ? u : G({
|
|
506
536
|
apiUrl: i,
|
|
507
|
-
projectId:
|
|
537
|
+
projectId: t.projectId,
|
|
538
|
+
projectConfig: p
|
|
508
539
|
});
|
|
509
540
|
},
|
|
510
541
|
configureServer(e) {
|
|
511
|
-
if (
|
|
512
|
-
e.middlewares.use(E(() =>
|
|
513
|
-
let
|
|
542
|
+
if (t.disableLauncher) return;
|
|
543
|
+
e.middlewares.use(E(() => f(o)));
|
|
544
|
+
let n = e.printUrls.bind(e);
|
|
514
545
|
e.printUrls = () => {
|
|
515
|
-
let
|
|
516
|
-
if (
|
|
517
|
-
let e =
|
|
546
|
+
let t = e.resolvedUrls?.local[0];
|
|
547
|
+
if (t) {
|
|
548
|
+
let e = t.replace(/:(?<port>\d+)\//, (e, t) => `:\x1b[1m${t}\x1b[22m/`);
|
|
518
549
|
console.log(` \x1b[32m➜\x1b[0m \x1b[1mPicked\x1b[22m: \x1b[36m${e}\x1b[0m`);
|
|
519
550
|
}
|
|
520
|
-
|
|
551
|
+
n();
|
|
521
552
|
};
|
|
522
553
|
},
|
|
523
|
-
generateBundle
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
554
|
+
generateBundle: {
|
|
555
|
+
order: "post",
|
|
556
|
+
handler(e, n) {
|
|
557
|
+
if (!t.disableLauncher) {
|
|
558
|
+
if ("index.html" in n) {
|
|
559
|
+
T.debug("index.html came from the build; skipping the launcher page");
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
this.emitFile({
|
|
563
|
+
type: "asset",
|
|
564
|
+
fileName: "index.html",
|
|
565
|
+
source: f(o)
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
}
|
|
529
569
|
}
|
|
530
570
|
};
|
|
531
571
|
}
|
|
@@ -538,7 +578,7 @@ function $(e, t) {
|
|
|
538
578
|
`${o.length.toString()} conditions`,
|
|
539
579
|
`${s.length.toString()} actions`
|
|
540
580
|
].join(", ");
|
|
541
|
-
T.info(`fetched config in ${t}ms (${l})`), q("Features", n,
|
|
581
|
+
T.info(`fetched config in ${t}ms (${l})`), q("Features", n, ae), q("Experiences", r, oe), q("Steps", i, se), q("Fields", a, ce), q("Conditions", o, le), J("Actions", s), T.debug(`config size: ${c.toString()} bytes`);
|
|
542
582
|
}
|
|
543
583
|
//#endregion
|
|
544
|
-
export {
|
|
584
|
+
export { fe as picked };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAqB,MAAM,EAAU,MAAM,MAAM,CAAA;AA4K7D,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAwM3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefetch.d.ts","sourceRoot":"","sources":["../../src/prefetch.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,4CAA4C,CAAA;
|
|
1
|
+
{"version":3,"file":"prefetch.d.ts","sourceRoot":"","sources":["../../src/prefetch.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,4CAA4C,CAAA;AAQnD,UAAU,uBAAuB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,uBAAuB,EAAE,CAAA;CACvC;AAED,UAAU,aAAa;IACrB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAA;IACpB,6DAA6D;IAC7D,iBAAiB,EAAE,MAAM,CAAA;IACzB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,cAAc,CAAA;IACxB,+DAA+D;IAC/D,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/C;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAQvE;AAsFD,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CA0DtF"}
|