@picked/vite-plugin-picked 0.0.1-dev.1785908062293 → 0.0.1-dev.1785988776296
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/client.d.ts +26 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/index.js +6 -6
- package/dist/esm/index.js +150 -129
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -2
package/dist/cjs/index.js
CHANGED
|
@@ -857,11 +857,11 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
|
|
|
857
857
|
</body>
|
|
858
858
|
</html>`]),n,t)}function s(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`)}function c(e){return e.replaceAll(`&`,`&`).replaceAll(`"`,`"`).replaceAll(`<`,`<`).replaceAll(`>`,`>`)}var l=`picked`,u=`\x1B[0m`;function d(){let e=process.env.NO_COLOR;return e===`1`||e===`true`}function f(e){return t=>d()?t:`${e}${t}${u}`}var p=[`debug`,`info`,`warn`,`error`,`silent`],m={debug:{color:f(`\x1B[2m`),log:console.debug,enabled:!1},info:{color:f(`\x1B[36m`),log:console.log,enabled:!0},warn:{color:f(`\x1B[33m`),log:console.warn,enabled:!0},error:{color:f(`\x1B[31m`),log:console.error,enabled:!0},silent:{log:()=>{},enabled:!1}};function h(e,t){return`${new Date().toLocaleTimeString()} [${t?`${l}:${t}`:l}] ${e}`}function g(e,t,n,r){if(!e.enabled)return;let i=h(t,r);e.log(e.color?e.color(i):i),n!==void 0&&e.log(n)}function _(e){let t=m[e],n=new Set;return Object.assign((e,n,r)=>{g(t,e,n,r)},{once(e,r,i){!t.enabled||n.has(e)||(n.add(e),g(t,e,r,i))}})}function ee(e){let t=p.indexOf(e);if(t===-1){g(m.error,`invalid log level: ${e}`);return}for(let[e,n]of p.entries())m[n].enabled=e>=t}var v=f(`\x1B[34m`),y=f(`\x1B[36m`);function b(){let e=[` ${v(`_`)} ${y(`_`)} _ _ _`,`${v(`(_)`)} ${y(`(_)`)} _ __(_)__| |_____ __| |`,` ${v(`_`)} ${v(`_`)} | '_ \\ / _| / / -_) _\` |`,`${v(`(_)`)} ${v(`(_)`)} | .__/_\\__|_\\_\\___\\__,_|`,` |_|
|
|
859
859
|
`];console.log(e.join(`
|
|
860
|
-
`))}var x={banner:b,debug:_(`debug`),info:_(`info`),warn:_(`warn`),error:_(`error`),setLevel:ee};function te(e){return(t,n,r)=>{if(t.method!==`GET`){r();return}let i=(t.url??``).split(`?`)[0];if(i!==`/`&&i!==`/index.html`){r();return}let a=e();n.setHeader(`Content-Type`,`text/html`),n.statusCode=200,n.end(a)}}var S=`.picked/`;async function
|
|
861
|
-
`);return}let o=await(0,r.readFile)(a,`utf8`);if(
|
|
860
|
+
`))}var x={banner:b,debug:_(`debug`),info:_(`info`),warn:_(`warn`),error:_(`error`),setLevel:ee};function te(e){return(t,n,r)=>{if(t.method!==`GET`){r();return}let i=(t.url??``).split(`?`)[0];if(i!==`/`&&i!==`/index.html`){r();return}let a=e();n.setHeader(`Content-Type`,`text/html`),n.statusCode=200,n.end(a)}}var S=`.picked/`;async function ne(n,i){if(i)return;let a=(0,t.join)(n,`.gitignore`);if(!(0,e.existsSync)(a)){await(0,r.writeFile)(a,`${S}
|
|
861
|
+
`);return}let o=await(0,r.readFile)(a,`utf8`);if(C(o))return;let s=`${o.length>0&&!o.endsWith(`
|
|
862
862
|
`)?`
|
|
863
863
|
`:``}${S}
|
|
864
|
-
`;await(0,r.appendFile)(a,s)}function
|
|
864
|
+
`;await(0,r.appendFile)(a,s)}function C(e){return e.split(/\r?\n/).map(e=>e.trim()).some(e=>e===S||e===`.picked`)}var w=6,T=5e3;function E(e){let t;try{t=new URL(e).hostname}catch{return!1}return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`||t!==`api.picked.app`&&t.endsWith(`.picked.app`)}function re(e){return new Promise(t=>{setTimeout(t,e)})}async function D(e,t){let n=null,r=null;try{n=await e()}catch(e){r=e}if(n!==null)return n;for(let i=1;i<=w;i++){let a=T*2**(i-1);t(i,w,a),await re(a),r=null;try{n=await e()}catch(e){r=e}if(n!==null)return n}if(r!==null)throw r;return null}function O(e){return Array.isArray(e)?e:[]}var ie=1;function k(e){let n=(0,t.join)(e,`.picked`);return{pickedDir:n,manifestPath:(0,t.join)(n,`manifest.json`),projectConfigPath:(0,t.join)(n,`project-config.json`),experiencesDir:(0,t.join)(n,`experiences`)}}async function A(t){if(!(0,e.existsSync)(t))return null;try{let e=await(0,r.readFile)(t,`utf8`),n=JSON.parse(e);return j(n)?n:null}catch{return null}}function j(e){return!(typeof e!=`object`||!e||!(`version`in e)||typeof e.version!=`number`||!(`projectVersionId`in e)||typeof e.projectVersionId!=`string`||!(`workspaceId`in e)||typeof e.workspaceId!=`string`||!(`experiences`in e)||!Array.isArray(e.experiences))}function M(e){let t=new Set;for(let n of O(e.steps))n.layoutContentId&&t.add(n.id);if(t.size===0)return[];let n=[];for(let r of O(e.experiences))O(r.nodes).some(e=>e.type===`step`&&t.has(e.stepId))&&n.push(r.id);return n}async function N(n){let{apiUrl:i,projectId:a,projectRoot:o,headers:s,reuseWhenUnchanged:c=!0}=n,l=k(o),u=await F(i,a,s),d=M(u);if(await(0,r.mkdir)(l.experiencesDir,{recursive:!0}),await(0,r.writeFile)(l.projectConfigPath,JSON.stringify(u,null,2)),c){let t=await A(l.manifestPath);if(t&&t.projectVersionId===u.versionId&&t.workspaceId===u.workspaceId){let n=P(l,d);if(Object.values(n).every(t=>(0,e.existsSync)(t)))return{config:u,manifest:t,experienceContentPaths:n};x.info(`a manifest-referenced content file is missing; refetching every experience`)}}let f=new Date().toISOString(),p=[];for(let e of d){let n=await I(i,a,e,s),o=(0,t.join)(l.experiencesDir,`${e}.json`);await(0,r.writeFile)(o,JSON.stringify(n,null,2)),p.push({id:e,fetchedAt:f})}let m={version:ie,fetchedAt:f,projectVersionId:u.versionId,workspaceId:u.workspaceId,projectId:u.id,experiences:p};return await(0,r.writeFile)(l.manifestPath,JSON.stringify(m,null,2)),{config:u,manifest:m,experienceContentPaths:P(l,d)}}function P(e,n){let r={};for(let i of n)r[i]=(0,t.join)(e.experiencesDir,`${i}.json`);return r}async function F(e,t,r){let i=()=>(0,n.fetchProject)(e,t,{headers:r}),a;try{a=E(e)?await D(i,(e,t,n)=>{x.info(`project config not ready, retrying in ${(n/1e3).toString()}s (${e.toString()}/${t.toString()})`)}):await i()}catch(n){throw Error(`[picked] Build-time fetch of project config failed for "${t}" at ${e}: ${L(n)}`)}if(!a)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.`);return a}async function I(e,t,r,i){let a;try{a=await(0,n.fetchExperienceContent)(e,t,r,{headers:i})}catch(t){throw Error(`[picked] Build-time fetch of content for experience "${r}" failed at ${e}: ${L(t)}`)}if(!a)throw Error(`[picked] Build-time fetch of content for experience "${r}" returned no usable response. Confirm the experience id exists and the API is reachable.`);return a}function L(e){if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return`unknown error`}}function R(e){let{projectConfigPath:t,experienceContentPaths:n,manifestMetadata:r}=e,i=e=>JSON.stringify(e),a=Object.entries(n).map(([e,t])=>` ${JSON.stringify(e)}: () => import(${i(t)}).then((m) => m.default ?? m),`).join(`
|
|
865
865
|
`);return`import projectConfigJson from ${i(t)}
|
|
866
866
|
|
|
867
867
|
const experienceImporters = {
|
|
@@ -883,7 +883,7 @@ export async function experienceContent(experience, _options) {
|
|
|
883
883
|
}
|
|
884
884
|
|
|
885
885
|
export const manifestMetadata = ${JSON.stringify(r)}
|
|
886
|
-
`}function
|
|
886
|
+
`}function z(e){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)`;return`${i}
|
|
887
887
|
|
|
888
888
|
const apiUrl = ${JSON.stringify(t)}
|
|
889
889
|
const projectId = ${JSON.stringify(n)}
|
|
@@ -902,5 +902,5 @@ export const manifestMetadata = {
|
|
|
902
902
|
projectVersionId: projectConfig?.versionId ?? null,
|
|
903
903
|
workspaceId: projectConfig?.workspaceId ?? null,
|
|
904
904
|
}
|
|
905
|
-
`}var
|
|
906
|
-
`))}function
|
|
905
|
+
`}var B=5;function V(e,t,n){if(t.length===0)return;if(t.length>B){console.log(`\n ${e}: ${t.length.toString()} loaded\n`);return}let r=n.map(e=>Math.max(e.header.length,...t.map(t=>e.value(t).length))),i=(e,t)=>e.padEnd(r[t]??e.length),a=` ${n.map((e,t)=>i(e.header,t)).join(` `)}`,o=` ${r.map(e=>`─`.repeat(e)).join(` `)}`,s=t.map(e=>` ${n.map((t,n)=>i(t.value(e),n)).join(` `)}`);console.log([``,` ${e}:`,``,a,o,...s,``].join(`
|
|
906
|
+
`))}function H(e,t){t.length!==0&&console.log(`\n ${e}: ${t.length.toString()} loaded\n`)}var U=[{header:`Name`,value:e=>e.name},{header:`ID`,value:e=>e.id},{header:`Status`,value:e=>e.enabled?`\x1B[32m enabled\x1B[0m`:`\x1B[2mdisabled\x1B[0m`},{header:`Weight`,value:e=>`${e.weight.toString()}%`.padStart(6)},{header:`Ver`,value:e=>`v${e.version.toString()}`}],W=[{header:`Name`,value:e=>e.name},{header:`Key`,value:e=>e.key},{header:`Component`,value:e=>e.componentName},{header:`Nodes`,value:e=>e.nodes.length.toString()},{header:`Targets`,value:e=>e.targets.length.toString()}],G=[{header:`Name`,value:e=>e.name},{header:`Key`,value:e=>e.key},{header:`Fields`,value:e=>(e.fieldIds?.length??0).toString()}],K=[{header:`Name`,value:e=>e.name},{header:`Key`,value:e=>e.key},{header:`Type`,value:e=>e.type},{header:`Required`,value:e=>e.required?`yes`:`no`}],q=[{header:`Name`,value:e=>e.name},{header:`Key`,value:e=>e.key}];function J(){return`0.0.1-dev.1785988776296`}var Y=`https://api.picked.app`,X=`virtual:picked/data`,Z=`\0${X}`;function ae(e){for(let t of Object.values(e))if(t.type===`chunk`&&t.moduleIds.includes(Z))return t.fileName}function oe(e,t){return e===``||e.endsWith(`/`)?`${e}${t}`:`${e}/${t}`}var Q=new Map;function se(e,t,n){return JSON.stringify([e,t,n])}function ce(r){let i=r.apiUrl??Y,a=[],s=process.cwd(),c=`serve`,l=`/`,u,d,f=null;return{name:`picked`,config:async(o,l)=>{c=l.command,s=o.root===void 0?process.cwd():(0,t.resolve)(process.cwd(),o.root),x.banner(),i!==Y&&x.warn(`using custom API URL: ${i}`);let p=(0,n.createClientHeaders)(`vite-plugin`,J());if(l.command===`build`){let t=se(i,r.projectId,s);u=t;let n=Q.get(t);n===void 0&&(n=(async()=>{x.info(`prefetching project config + content for "${r.projectId}"`);let t=k(s),n=(0,e.existsSync)(t.pickedDir),a=performance.now(),o=await N({apiUrl:i,projectId:r.projectId,projectRoot:s,headers:p}),c=(performance.now()-a).toFixed(0);await ne(s,n);let l=o.config;return $(l,c),{virtualSource:R({projectConfigPath:t.projectConfigPath,experienceContentPaths:o.experienceContentPaths,manifestMetadata:{mode:`build`,fetchedAt:o.manifest.fetchedAt,projectVersionId:o.manifest.projectVersionId,workspaceId:o.manifest.workspaceId}}),features:O(l.features)}})(),n.catch(()=>Q.delete(t)),Q.set(t,n));let o=await n;d=o.virtualSource,a=o.features}else if(l.mode===`production`)x.debug(`skipping the dev project-config fetch for a production serve resolution`);else{x.info(`fetching project config for "${r.projectId}" (dev)`);let e=performance.now(),t=()=>(0,n.fetchProject)(i,r.projectId,{headers:p}),o=E(i)?await D(t,(e,t,n)=>{x.info(`local API not ready, retrying in ${(n/1e3).toString()}s (${e.toString()}/${t.toString()})`)}):await t(),s=(performance.now()-e).toFixed(0);f=o,o?(a=O(o.features),$(o,s)):x.warn(`failed to fetch project config for "${r.projectId}" (${s}ms)`)}},configResolved(e){l=e.base},closeBundle(){u!==void 0&&Q.delete(u)},transformIndexHtml:{order:`post`,handler(e,t){if(t.bundle===void 0)return;let n=ae(t.bundle);if(n===void 0)return;let r=oe(l,n);if(!e.includes(`"${r}"`))return[{tag:`link`,attrs:{rel:`modulepreload`,crossorigin:!0,href:r},injectTo:`head`}]}},resolveId(e){if(e===X)return Z},load(e){if(e===Z)return c===`build`?d:z({apiUrl:i,projectId:r.projectId,projectConfig:f})},configureServer(e){if(r.disableLauncher)return;e.middlewares.use(te(()=>o(a)));let t=e.printUrls.bind(e);e.printUrls=()=>{let n=e.resolvedUrls?.local[0];if(n){let e=n.replace(/:(?<port>\d+)\//,(e,t)=>`:\x1b[1m${t}\x1b[22m/`);console.log(` \x1b[32m➜\x1b[0m \x1b[1mPicked\x1b[22m: \x1b[36m${e}\x1b[0m`)}t()}},generateBundle:{order:`post`,handler(e,t){if(!r.disableLauncher){if(`index.html`in t){x.debug(`index.html came from the build; skipping the launcher page`);return}this.emitFile({type:`asset`,fileName:`index.html`,source:o(a)})}}}}}function $(e,t){let n=O(e.features),r=O(e.experiences),i=O(e.steps),a=O(e.fields),o=O(e.conditions),s=O(e.actions),c=JSON.stringify(e).length,l=[`${n.length.toString()} features`,`${r.length.toString()} experiences`,`${i.length.toString()} steps`,`${a.length.toString()} fields`,`${o.length.toString()} conditions`,`${s.length.toString()} actions`].join(`, `);x.info(`fetched config in ${t}ms (${l})`),V(`Features`,n,U),V(`Experiences`,r,W),V(`Steps`,i,G),V(`Fields`,a,K),V(`Conditions`,o,q),H(`Actions`,s),x.debug(`config size: ${c.toString()} bytes`)}exports.picked=ce;
|
package/dist/esm/index.js
CHANGED
|
@@ -40,38 +40,38 @@ function m(e) {
|
|
|
40
40
|
}
|
|
41
41
|
//#endregion
|
|
42
42
|
//#region src/log.ts
|
|
43
|
-
var h = "picked",
|
|
44
|
-
function
|
|
43
|
+
var h = "picked", ee = "\x1B[0m";
|
|
44
|
+
function te() {
|
|
45
45
|
let e = process.env.NO_COLOR;
|
|
46
46
|
return e === "1" || e === "true";
|
|
47
47
|
}
|
|
48
|
-
function
|
|
49
|
-
return (t) =>
|
|
48
|
+
function g(e) {
|
|
49
|
+
return (t) => te() ? t : `${e}${t}${ee}`;
|
|
50
50
|
}
|
|
51
|
-
var
|
|
51
|
+
var _ = [
|
|
52
52
|
"debug",
|
|
53
53
|
"info",
|
|
54
54
|
"warn",
|
|
55
55
|
"error",
|
|
56
56
|
"silent"
|
|
57
|
-
],
|
|
57
|
+
], v = {
|
|
58
58
|
debug: {
|
|
59
|
-
color:
|
|
59
|
+
color: g("\x1B[2m"),
|
|
60
60
|
log: console.debug,
|
|
61
61
|
enabled: !1
|
|
62
62
|
},
|
|
63
63
|
info: {
|
|
64
|
-
color:
|
|
64
|
+
color: g("\x1B[36m"),
|
|
65
65
|
log: console.log,
|
|
66
66
|
enabled: !0
|
|
67
67
|
},
|
|
68
68
|
warn: {
|
|
69
|
-
color:
|
|
69
|
+
color: g("\x1B[33m"),
|
|
70
70
|
log: console.warn,
|
|
71
71
|
enabled: !0
|
|
72
72
|
},
|
|
73
73
|
error: {
|
|
74
|
-
color:
|
|
74
|
+
color: g("\x1B[31m"),
|
|
75
75
|
log: console.error,
|
|
76
76
|
enabled: !0
|
|
77
77
|
},
|
|
@@ -80,52 +80,52 @@ var v = [
|
|
|
80
80
|
enabled: !1
|
|
81
81
|
}
|
|
82
82
|
};
|
|
83
|
-
function
|
|
83
|
+
function ne(e, t) {
|
|
84
84
|
return `${(/* @__PURE__ */ new Date()).toLocaleTimeString()} [${t ? `${h}:${t}` : h}] ${e}`;
|
|
85
85
|
}
|
|
86
|
-
function
|
|
86
|
+
function y(e, t, n, r) {
|
|
87
87
|
if (!e.enabled) return;
|
|
88
|
-
let i =
|
|
88
|
+
let i = ne(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 b(e) {
|
|
92
|
+
let t = v[e], n = /* @__PURE__ */ new Set();
|
|
93
93
|
return Object.assign((e, n, r) => {
|
|
94
|
-
|
|
94
|
+
y(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), y(t, e, r, i));
|
|
97
97
|
} });
|
|
98
98
|
}
|
|
99
|
-
function
|
|
100
|
-
let t =
|
|
99
|
+
function x(e) {
|
|
100
|
+
let t = _.indexOf(e);
|
|
101
101
|
if (t === -1) {
|
|
102
|
-
|
|
102
|
+
y(v.error, `invalid log level: ${e}`);
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
|
-
for (let [e, n] of
|
|
105
|
+
for (let [e, n] of _.entries()) v[n].enabled = e >= t;
|
|
106
106
|
}
|
|
107
|
-
var
|
|
108
|
-
function
|
|
107
|
+
var S = g("\x1B[34m"), C = g("\x1B[36m");
|
|
108
|
+
function re() {
|
|
109
109
|
let e = [
|
|
110
|
-
` ${
|
|
111
|
-
`${
|
|
112
|
-
` ${
|
|
113
|
-
`${
|
|
110
|
+
` ${S("_")} ${C("_")} _ _ _`,
|
|
111
|
+
`${S("(_)")} ${C("(_)")} _ __(_)__| |_____ __| |`,
|
|
112
|
+
` ${S("_")} ${S("_")} | '_ \\ / _| / / -_) _\` |`,
|
|
113
|
+
`${S("(_)")} ${S("(_)")} | .__/_\\__|_\\_\\___\\__,_|`,
|
|
114
114
|
" |_|\n "
|
|
115
115
|
];
|
|
116
116
|
console.log(e.join("\n"));
|
|
117
117
|
}
|
|
118
|
-
var
|
|
119
|
-
banner:
|
|
120
|
-
debug:
|
|
121
|
-
info:
|
|
122
|
-
warn:
|
|
123
|
-
error:
|
|
124
|
-
setLevel:
|
|
118
|
+
var w = {
|
|
119
|
+
banner: re,
|
|
120
|
+
debug: b("debug"),
|
|
121
|
+
info: b("info"),
|
|
122
|
+
warn: b("warn"),
|
|
123
|
+
error: b("error"),
|
|
124
|
+
setLevel: x
|
|
125
125
|
};
|
|
126
126
|
//#endregion
|
|
127
127
|
//#region src/middleware.ts
|
|
128
|
-
function
|
|
128
|
+
function T(e) {
|
|
129
129
|
return (t, n, r) => {
|
|
130
130
|
if (t.method !== "GET") {
|
|
131
131
|
r();
|
|
@@ -142,28 +142,28 @@ function E(e) {
|
|
|
142
142
|
}
|
|
143
143
|
//#endregion
|
|
144
144
|
//#region src/gitignore.ts
|
|
145
|
-
var
|
|
146
|
-
async function
|
|
145
|
+
var E = ".picked/";
|
|
146
|
+
async function D(n, r) {
|
|
147
147
|
if (r) return;
|
|
148
148
|
let i = t(n, ".gitignore");
|
|
149
149
|
if (!e(i)) {
|
|
150
|
-
await l(i, `${
|
|
150
|
+
await l(i, `${E}
|
|
151
151
|
`);
|
|
152
152
|
return;
|
|
153
153
|
}
|
|
154
154
|
let a = await c(i, "utf8");
|
|
155
|
-
if (
|
|
156
|
-
let s = `${a.length > 0 && !a.endsWith("\n") ? "\n" : ""}${
|
|
155
|
+
if (O(a)) return;
|
|
156
|
+
let s = `${a.length > 0 && !a.endsWith("\n") ? "\n" : ""}${E}
|
|
157
157
|
`;
|
|
158
158
|
await o(i, s);
|
|
159
159
|
}
|
|
160
|
-
function
|
|
161
|
-
return e.split(/\r?\n/).map((e) => e.trim()).some((e) => e ===
|
|
160
|
+
function O(e) {
|
|
161
|
+
return e.split(/\r?\n/).map((e) => e.trim()).some((e) => e === E || e === ".picked");
|
|
162
162
|
}
|
|
163
163
|
//#endregion
|
|
164
164
|
//#region src/retry.ts
|
|
165
|
-
var
|
|
166
|
-
function
|
|
165
|
+
var k = 6, ie = 5e3;
|
|
166
|
+
function A(e) {
|
|
167
167
|
let t;
|
|
168
168
|
try {
|
|
169
169
|
t = new URL(e).hostname;
|
|
@@ -172,12 +172,12 @@ function j(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 ae(e) {
|
|
176
176
|
return new Promise((t) => {
|
|
177
177
|
setTimeout(t, e);
|
|
178
178
|
});
|
|
179
179
|
}
|
|
180
|
-
async function
|
|
180
|
+
async function j(e, t) {
|
|
181
181
|
let n = null, r = null;
|
|
182
182
|
try {
|
|
183
183
|
n = await e();
|
|
@@ -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 <= k; i++) {
|
|
189
|
+
let a = ie * 2 ** (i - 1);
|
|
190
|
+
t(i, k, a), await ae(a), r = null;
|
|
191
191
|
try {
|
|
192
192
|
n = await e();
|
|
193
193
|
} catch (e) {
|
|
@@ -200,13 +200,13 @@ async function M(e, t) {
|
|
|
200
200
|
}
|
|
201
201
|
//#endregion
|
|
202
202
|
//#region src/util.ts
|
|
203
|
-
function
|
|
203
|
+
function M(e) {
|
|
204
204
|
return Array.isArray(e) ? e : [];
|
|
205
205
|
}
|
|
206
206
|
//#endregion
|
|
207
207
|
//#region src/prefetch.ts
|
|
208
|
-
var
|
|
209
|
-
function
|
|
208
|
+
var N = 1;
|
|
209
|
+
function P(e) {
|
|
210
210
|
let n = t(e, ".picked");
|
|
211
211
|
return {
|
|
212
212
|
pickedDir: n,
|
|
@@ -215,50 +215,50 @@ function F(e) {
|
|
|
215
215
|
experiencesDir: t(n, "experiences")
|
|
216
216
|
};
|
|
217
217
|
}
|
|
218
|
-
async function
|
|
218
|
+
async function F(t) {
|
|
219
219
|
if (!e(t)) return null;
|
|
220
220
|
try {
|
|
221
221
|
let e = await c(t, "utf8"), n = JSON.parse(e);
|
|
222
|
-
return
|
|
222
|
+
return I(n) ? n : null;
|
|
223
223
|
} catch {
|
|
224
224
|
return null;
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
|
-
function
|
|
227
|
+
function I(e) {
|
|
228
228
|
return !(typeof e != "object" || !e || !("version" in e) || typeof e.version != "number" || !("projectVersionId" in e) || typeof e.projectVersionId != "string" || !("workspaceId" in e) || typeof e.workspaceId != "string" || !("experiences" in e) || !Array.isArray(e.experiences));
|
|
229
229
|
}
|
|
230
|
-
function
|
|
230
|
+
function L(e) {
|
|
231
231
|
let t = /* @__PURE__ */ new Set();
|
|
232
|
-
for (let n of
|
|
232
|
+
for (let n of M(e.steps)) n.layoutContentId && t.add(n.id);
|
|
233
233
|
if (t.size === 0) return [];
|
|
234
234
|
let n = [];
|
|
235
|
-
for (let r of
|
|
235
|
+
for (let r of M(e.experiences)) M(r.nodes).some((e) => e.type === "step" && t.has(e.stepId)) && n.push(r.id);
|
|
236
236
|
return n;
|
|
237
237
|
}
|
|
238
|
-
async function
|
|
239
|
-
let { apiUrl: r, projectId: i, projectRoot: a, headers: o, reuseWhenUnchanged: c = !0 } = n, u =
|
|
238
|
+
async function R(n) {
|
|
239
|
+
let { apiUrl: r, projectId: i, projectRoot: a, headers: o, reuseWhenUnchanged: c = !0 } = n, u = P(a), d = await B(r, i, o), f = L(d);
|
|
240
240
|
if (await s(u.experiencesDir, { recursive: !0 }), await l(u.projectConfigPath, JSON.stringify(d, null, 2)), c) {
|
|
241
|
-
let t = await
|
|
241
|
+
let t = await F(u.manifestPath);
|
|
242
242
|
if (t && t.projectVersionId === d.versionId && t.workspaceId === d.workspaceId) {
|
|
243
|
-
let n =
|
|
243
|
+
let n = z(u, f);
|
|
244
244
|
if (Object.values(n).every((t) => e(t))) return {
|
|
245
245
|
config: d,
|
|
246
246
|
manifest: t,
|
|
247
247
|
experienceContentPaths: n
|
|
248
248
|
};
|
|
249
|
-
|
|
249
|
+
w.info("a manifest-referenced content file is missing; refetching every experience");
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
let p = (/* @__PURE__ */ new Date()).toISOString(), m = [];
|
|
253
253
|
for (let e of f) {
|
|
254
|
-
let n = await
|
|
254
|
+
let n = await V(r, i, e, o), a = t(u.experiencesDir, `${e}.json`);
|
|
255
255
|
await l(a, JSON.stringify(n, null, 2)), m.push({
|
|
256
256
|
id: e,
|
|
257
257
|
fetchedAt: p
|
|
258
258
|
});
|
|
259
259
|
}
|
|
260
260
|
let h = {
|
|
261
|
-
version:
|
|
261
|
+
version: N,
|
|
262
262
|
fetchedAt: p,
|
|
263
263
|
projectVersionId: d.versionId,
|
|
264
264
|
workspaceId: d.workspaceId,
|
|
@@ -268,37 +268,37 @@ async function z(n) {
|
|
|
268
268
|
return await l(u.manifestPath, JSON.stringify(h, null, 2)), {
|
|
269
269
|
config: d,
|
|
270
270
|
manifest: h,
|
|
271
|
-
experienceContentPaths:
|
|
271
|
+
experienceContentPaths: z(u, f)
|
|
272
272
|
};
|
|
273
273
|
}
|
|
274
|
-
function
|
|
274
|
+
function z(e, n) {
|
|
275
275
|
let r = {};
|
|
276
276
|
for (let i of n) r[i] = t(e.experiencesDir, `${i}.json`);
|
|
277
277
|
return r;
|
|
278
278
|
}
|
|
279
|
-
async function
|
|
279
|
+
async function B(e, t, n) {
|
|
280
280
|
let r = () => a(e, t, { headers: n }), i;
|
|
281
281
|
try {
|
|
282
|
-
i =
|
|
283
|
-
|
|
282
|
+
i = A(e) ? await j(r, (e, t, n) => {
|
|
283
|
+
w.info(`project config not ready, retrying in ${(n / 1e3).toString()}s (${e.toString()}/${t.toString()})`);
|
|
284
284
|
}) : await r();
|
|
285
285
|
} catch (n) {
|
|
286
|
-
throw Error(`[picked] Build-time fetch of project config failed for "${t}" at ${e}: ${
|
|
286
|
+
throw Error(`[picked] Build-time fetch of project config failed for "${t}" at ${e}: ${H(n)}`);
|
|
287
287
|
}
|
|
288
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
289
|
return i;
|
|
290
290
|
}
|
|
291
|
-
async function
|
|
291
|
+
async function V(e, t, n, r) {
|
|
292
292
|
let a;
|
|
293
293
|
try {
|
|
294
294
|
a = await i(e, t, n, { headers: r });
|
|
295
295
|
} catch (t) {
|
|
296
|
-
throw Error(`[picked] Build-time fetch of content for experience "${n}" failed at ${e}: ${
|
|
296
|
+
throw Error(`[picked] Build-time fetch of content for experience "${n}" failed at ${e}: ${H(t)}`);
|
|
297
297
|
}
|
|
298
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.`);
|
|
299
299
|
return a;
|
|
300
300
|
}
|
|
301
|
-
function
|
|
301
|
+
function H(e) {
|
|
302
302
|
if (e instanceof Error) return e.message;
|
|
303
303
|
if (typeof e == "string") return e;
|
|
304
304
|
try {
|
|
@@ -309,7 +309,7 @@ function U(e) {
|
|
|
309
309
|
}
|
|
310
310
|
//#endregion
|
|
311
311
|
//#region src/virtual-module/build.ts
|
|
312
|
-
function
|
|
312
|
+
function U(e) {
|
|
313
313
|
let { projectConfigPath: t, experienceContentPaths: n, manifestMetadata: r } = e, i = (e) => JSON.stringify(e), a = Object.entries(n).map(([e, t]) => ` ${JSON.stringify(e)}: () => import(${i(t)}).then((m) => m.default ?? m),`).join("\n");
|
|
314
314
|
return `import projectConfigJson from ${i(t)}
|
|
315
315
|
|
|
@@ -336,7 +336,7 @@ export const manifestMetadata = ${JSON.stringify(r)}
|
|
|
336
336
|
}
|
|
337
337
|
//#endregion
|
|
338
338
|
//#region src/virtual-module/dev.ts
|
|
339
|
-
function
|
|
339
|
+
function W(e) {
|
|
340
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
341
|
return `${i}
|
|
342
342
|
|
|
@@ -361,10 +361,10 @@ export const manifestMetadata = {
|
|
|
361
361
|
}
|
|
362
362
|
//#endregion
|
|
363
363
|
//#region src/index.ts
|
|
364
|
-
var
|
|
365
|
-
function
|
|
364
|
+
var G = 5;
|
|
365
|
+
function K(e, t, n) {
|
|
366
366
|
if (t.length === 0) return;
|
|
367
|
-
if (t.length >
|
|
367
|
+
if (t.length > G) {
|
|
368
368
|
console.log(`\n ${e}: ${t.length.toString()} loaded\n`);
|
|
369
369
|
return;
|
|
370
370
|
}
|
|
@@ -379,10 +379,10 @@ function q(e, t, n) {
|
|
|
379
379
|
""
|
|
380
380
|
].join("\n"));
|
|
381
381
|
}
|
|
382
|
-
function
|
|
382
|
+
function q(e, t) {
|
|
383
383
|
t.length !== 0 && console.log(`\n ${e}: ${t.length.toString()} loaded\n`);
|
|
384
384
|
}
|
|
385
|
-
var
|
|
385
|
+
var oe = [
|
|
386
386
|
{
|
|
387
387
|
header: "Name",
|
|
388
388
|
value: (e) => e.name
|
|
@@ -403,7 +403,7 @@ var ae = [
|
|
|
403
403
|
header: "Ver",
|
|
404
404
|
value: (e) => `v${e.version.toString()}`
|
|
405
405
|
}
|
|
406
|
-
],
|
|
406
|
+
], se = [
|
|
407
407
|
{
|
|
408
408
|
header: "Name",
|
|
409
409
|
value: (e) => e.name
|
|
@@ -424,7 +424,7 @@ var ae = [
|
|
|
424
424
|
header: "Targets",
|
|
425
425
|
value: (e) => e.targets.length.toString()
|
|
426
426
|
}
|
|
427
|
-
],
|
|
427
|
+
], ce = [
|
|
428
428
|
{
|
|
429
429
|
header: "Name",
|
|
430
430
|
value: (e) => e.name
|
|
@@ -437,7 +437,7 @@ var ae = [
|
|
|
437
437
|
header: "Fields",
|
|
438
438
|
value: (e) => (e.fieldIds?.length ?? 0).toString()
|
|
439
439
|
}
|
|
440
|
-
],
|
|
440
|
+
], le = [
|
|
441
441
|
{
|
|
442
442
|
header: "Name",
|
|
443
443
|
value: (e) => e.name
|
|
@@ -454,69 +454,90 @@ var ae = [
|
|
|
454
454
|
header: "Required",
|
|
455
455
|
value: (e) => e.required ? "yes" : "no"
|
|
456
456
|
}
|
|
457
|
-
],
|
|
457
|
+
], ue = [{
|
|
458
458
|
header: "Name",
|
|
459
459
|
value: (e) => e.name
|
|
460
460
|
}, {
|
|
461
461
|
header: "Key",
|
|
462
462
|
value: (e) => e.key
|
|
463
463
|
}];
|
|
464
|
-
function
|
|
465
|
-
return "0.0.1-dev.
|
|
464
|
+
function de() {
|
|
465
|
+
return "0.0.1-dev.1785988776296";
|
|
466
466
|
}
|
|
467
|
-
var
|
|
468
|
-
function
|
|
469
|
-
for (let t of Object.values(e)) if (t.type === "chunk" && t.moduleIds.includes(
|
|
467
|
+
var J = "https://api.picked.app", Y = "virtual:picked/data", X = `\0${Y}`;
|
|
468
|
+
function Z(e) {
|
|
469
|
+
for (let t of Object.values(e)) if (t.type === "chunk" && t.moduleIds.includes(X)) return t.fileName;
|
|
470
470
|
}
|
|
471
|
-
function
|
|
471
|
+
function fe(e, t) {
|
|
472
472
|
return e === "" || e.endsWith("/") ? `${e}${t}` : `${e}/${t}`;
|
|
473
473
|
}
|
|
474
|
-
|
|
475
|
-
|
|
474
|
+
var Q = /* @__PURE__ */ new Map();
|
|
475
|
+
function pe(e, t, n) {
|
|
476
|
+
return JSON.stringify([
|
|
477
|
+
e,
|
|
478
|
+
t,
|
|
479
|
+
n
|
|
480
|
+
]);
|
|
481
|
+
}
|
|
482
|
+
function me(t) {
|
|
483
|
+
let i = t.apiUrl ?? J, o = [], s = process.cwd(), c = "serve", l = "/", u, d, p = null;
|
|
476
484
|
return {
|
|
477
485
|
name: "picked",
|
|
478
486
|
config: async (l, f) => {
|
|
479
|
-
c = f.command, s = l.root === void 0 ? process.cwd() : n(process.cwd(), l.root),
|
|
480
|
-
let m = r("vite-plugin",
|
|
487
|
+
c = f.command, s = l.root === void 0 ? process.cwd() : n(process.cwd(), l.root), w.banner(), i !== J && w.warn(`using custom API URL: ${i}`);
|
|
488
|
+
let m = r("vite-plugin", de());
|
|
481
489
|
if (f.command === "build") {
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
let
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
490
|
+
let n = pe(i, t.projectId, s);
|
|
491
|
+
u = n;
|
|
492
|
+
let r = Q.get(n);
|
|
493
|
+
r === void 0 && (r = (async () => {
|
|
494
|
+
w.info(`prefetching project config + content for "${t.projectId}"`);
|
|
495
|
+
let n = P(s), r = e(n.pickedDir), a = performance.now(), o = await R({
|
|
496
|
+
apiUrl: i,
|
|
497
|
+
projectId: t.projectId,
|
|
498
|
+
projectRoot: s,
|
|
499
|
+
headers: m
|
|
500
|
+
}), c = (performance.now() - a).toFixed(0);
|
|
501
|
+
await D(s, r);
|
|
502
|
+
let l = o.config;
|
|
503
|
+
return $(l, c), {
|
|
504
|
+
virtualSource: U({
|
|
505
|
+
projectConfigPath: n.projectConfigPath,
|
|
506
|
+
experienceContentPaths: o.experienceContentPaths,
|
|
507
|
+
manifestMetadata: {
|
|
508
|
+
mode: "build",
|
|
509
|
+
fetchedAt: o.manifest.fetchedAt,
|
|
510
|
+
projectVersionId: o.manifest.projectVersionId,
|
|
511
|
+
workspaceId: o.manifest.workspaceId
|
|
512
|
+
}
|
|
513
|
+
}),
|
|
514
|
+
features: M(l.features)
|
|
515
|
+
};
|
|
516
|
+
})(), r.catch(() => Q.delete(n)), Q.set(n, r));
|
|
517
|
+
let a = await r;
|
|
518
|
+
d = a.virtualSource, o = a.features;
|
|
519
|
+
} else if (f.mode === "production") w.debug("skipping the dev project-config fetch for a production serve resolution");
|
|
520
|
+
else {
|
|
521
|
+
w.info(`fetching project config for "${t.projectId}" (dev)`);
|
|
522
|
+
let e = performance.now(), n = () => a(i, t.projectId, { headers: m }), r = A(i) ? await j(n, (e, t, n) => {
|
|
523
|
+
w.info(`local API not ready, retrying in ${(n / 1e3).toString()}s (${e.toString()}/${t.toString()})`);
|
|
506
524
|
}) : await n(), s = (performance.now() - e).toFixed(0);
|
|
507
|
-
p = r, r ? (o =
|
|
525
|
+
p = r, r ? (o = M(r.features), $(r, s)) : w.warn(`failed to fetch project config for "${t.projectId}" (${s}ms)`);
|
|
508
526
|
}
|
|
509
527
|
},
|
|
510
528
|
configResolved(e) {
|
|
511
529
|
l = e.base;
|
|
512
530
|
},
|
|
531
|
+
closeBundle() {
|
|
532
|
+
u !== void 0 && Q.delete(u);
|
|
533
|
+
},
|
|
513
534
|
transformIndexHtml: {
|
|
514
535
|
order: "post",
|
|
515
536
|
handler(e, t) {
|
|
516
537
|
if (t.bundle === void 0) return;
|
|
517
|
-
let n =
|
|
538
|
+
let n = Z(t.bundle);
|
|
518
539
|
if (n === void 0) return;
|
|
519
|
-
let r =
|
|
540
|
+
let r = fe(l, n);
|
|
520
541
|
if (!e.includes(`"${r}"`)) return [{
|
|
521
542
|
tag: "link",
|
|
522
543
|
attrs: {
|
|
@@ -529,10 +550,10 @@ function fe(t) {
|
|
|
529
550
|
}
|
|
530
551
|
},
|
|
531
552
|
resolveId(e) {
|
|
532
|
-
if (e ===
|
|
553
|
+
if (e === Y) return X;
|
|
533
554
|
},
|
|
534
555
|
load(e) {
|
|
535
|
-
if (e ===
|
|
556
|
+
if (e === X) return c === "build" ? d : W({
|
|
536
557
|
apiUrl: i,
|
|
537
558
|
projectId: t.projectId,
|
|
538
559
|
projectConfig: p
|
|
@@ -540,7 +561,7 @@ function fe(t) {
|
|
|
540
561
|
},
|
|
541
562
|
configureServer(e) {
|
|
542
563
|
if (t.disableLauncher) return;
|
|
543
|
-
e.middlewares.use(
|
|
564
|
+
e.middlewares.use(T(() => f(o)));
|
|
544
565
|
let n = e.printUrls.bind(e);
|
|
545
566
|
e.printUrls = () => {
|
|
546
567
|
let t = e.resolvedUrls?.local[0];
|
|
@@ -556,7 +577,7 @@ function fe(t) {
|
|
|
556
577
|
handler(e, n) {
|
|
557
578
|
if (!t.disableLauncher) {
|
|
558
579
|
if ("index.html" in n) {
|
|
559
|
-
|
|
580
|
+
w.debug("index.html came from the build; skipping the launcher page");
|
|
560
581
|
return;
|
|
561
582
|
}
|
|
562
583
|
this.emitFile({
|
|
@@ -570,7 +591,7 @@ function fe(t) {
|
|
|
570
591
|
};
|
|
571
592
|
}
|
|
572
593
|
function $(e, t) {
|
|
573
|
-
let n =
|
|
594
|
+
let n = M(e.features), r = M(e.experiences), i = M(e.steps), a = M(e.fields), o = M(e.conditions), s = M(e.actions), c = JSON.stringify(e).length, l = [
|
|
574
595
|
`${n.length.toString()} features`,
|
|
575
596
|
`${r.length.toString()} experiences`,
|
|
576
597
|
`${i.length.toString()} steps`,
|
|
@@ -578,7 +599,7 @@ function $(e, t) {
|
|
|
578
599
|
`${o.length.toString()} conditions`,
|
|
579
600
|
`${s.length.toString()} actions`
|
|
580
601
|
].join(", ");
|
|
581
|
-
|
|
602
|
+
w.info(`fetched config in ${t}ms (${l})`), K("Features", n, oe), K("Experiences", r, se), K("Steps", i, ce), K("Fields", a, le), K("Conditions", o, ue), q("Actions", s), w.debug(`config size: ${c.toString()} bytes`);
|
|
582
603
|
}
|
|
583
604
|
//#endregion
|
|
584
|
-
export {
|
|
605
|
+
export { me as picked };
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AA+BD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAmO3D"}
|