@picked/vite-plugin-picked 0.0.111-next.2 → 0.0.111-next.4

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/cjs/index.js CHANGED
@@ -860,13 +860,13 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require
860
860
  `);return}let o=await(0,a.readFile)(i,`utf8`);if(re(o))return;let s=`${o.length>0&&!o.endsWith(`
861
861
  `)?`
862
862
  `:``}${k}
863
- `;await(0,a.appendFile)(i,s)}function re(e){return e.split(/\r?\n/).map(e=>e.trim()).some(e=>e===k||e===`.picked`)}var A=6,ie=5e3;function j(e){let t;try{t=new URL(e).hostname}catch{return!1}return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`?!0:t===`api.picked.app`?!1:t.endsWith(`.picked.app`)||t.endsWith(`.picked-dev.app`)}function M(e){return new Promise(t=>{setTimeout(t,e)})}async function N(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<=A;i++){let a=ie*2**(i-1);t(i,A,a),await M(a),r=null;try{n=await e()}catch(e){r=e}if(n!==null)return n}if(r!==null)throw r;return null}function P(e){return Array.isArray(e)?e:[]}function ae(e){let t=e.variants,n=(t??[]).reduce((e,t)=>e+t.weight,0);return!t||t.length===0||n===0?`${e.weight.toString()}%`:t.map(e=>{let t=Math.round(100*e.weight/n);return`${String(e.value)} ${t.toString()}%`}).join(`, `)}var F=2;function I(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 oe(t){if(!(0,e.existsSync)(t))return null;try{let e=await(0,a.readFile)(t,`utf8`),n=JSON.parse(e);return se(n)?n:null}catch{return null}}function se(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 ce(e){let t=new Set;for(let n of P(e.steps))n.layoutContentId&&t.add(n.id);if(t.size===0)return[];let n=[];for(let r of P(e.experiences))P(r.nodes).some(e=>e.type===`step`&&t.has(e.stepId))&&n.push(r.id);return n}async function le(n){let{apiUrl:r,projectId:i,projectRoot:o,headers:s,previewToken:c,reuseWhenUnchanged:l=!0}=n,u=I(o),d=await ue(r,i,s,c),f=ce(d);if(await(0,a.mkdir)(u.experiencesDir,{recursive:!0}),await(0,a.writeFile)(u.projectConfigPath,JSON.stringify(d,null,2)),l){let t=await oe(u.manifestPath);if(t?.version===F&&t.projectVersionId===d.versionId&&t.workspaceId===d.workspaceId){let n=L(u,f);if(Object.values(n).every(t=>(0,e.existsSync)(t)))return{config:d,manifest:t,experienceContentPaths:n};D.info(`a manifest-referenced content file is missing; refetching every experience`)}}let p=new Date().toISOString(),m=[];for(let e of f){let n=await R(r,i,e,s,c),o=(0,t.join)(u.experiencesDir,`${e}.json`);await(0,a.writeFile)(o,JSON.stringify(n,null,2)),m.push({id:e,fetchedAt:p})}let h={version:F,fetchedAt:p,projectVersionId:d.versionId,workspaceId:d.workspaceId,projectId:d.id,experiences:m};return await(0,a.writeFile)(u.manifestPath,JSON.stringify(h,null,2)),{config:d,manifest:h,experienceContentPaths:L(u,f)}}function L(e,n){let r={};for(let i of n)r[i]=(0,t.join)(e.experiencesDir,`${i}.json`);return r}async function ue(e,t,r,i){let a=()=>(0,n.fetchProject)(e,t,{headers:r,previewToken:i}),o;try{o=j(e)?await N(a,(e,t,n)=>{D.info(`project config not ready, retrying in ${(n/1e3).toString()}s (${e.toString()}/${t.toString()})`)}):await a()}catch(n){throw Error(`[picked] Build-time fetch of project config failed for "${t}" at ${e}: ${z(n)}`)}if(!o)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 o}async function R(e,t,r,i,a){let o;try{o=await(0,n.fetchExperienceContent)(e,t,r,{headers:i,previewToken:a})}catch(t){throw Error(`[picked] Build-time fetch of content for experience "${r}" failed at ${e}: ${z(t)}`)}if(!o)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 o}function z(e){if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return`unknown error`}}var B=new Set([`resolveId`,`load`]);function V(e=(0,o.createTraceId)()){let t=(0,o.createSpanId)(),n=Date.now(),r=[],a=new Map;return{record:(n,i)=>{if(B.has(n)){let e=a.get(n)??{calls:0,totalMs:0};a.set(n,{calls:e.calls+1,totalMs:e.totalMs+i});return}let s=Date.now();r.push({name:`picked.vite.${n}`,traceId:e,spanId:(0,o.createSpanId)(),parentSpanId:t,startTimeUnixNano:(0,o.toUnixNano)(s-i),endTimeUnixNano:(0,o.toUnixNano)(s),attributes:{"picked.vite.hook":n},status:`ok`})},flush:async s=>{let c={};for(let[e,t]of a)c[`picked.vite.${e}.calls`]=t.calls,c[`picked.vite.${e}.total_ms`]=Math.round(t.totalMs);let l=(0,i.detectHostEnvironment)();r.push({name:`picked.vite.build`,traceId:e,spanId:t,startTimeUnixNano:(0,o.toUnixNano)(n),endTimeUnixNano:(0,o.toUnixNano)(Date.now()),attributes:{"picked.env.provider":l.provider,"picked.env.ci":l.ci,...s,...c},status:`ok`});try{let e=(0,o.createTelemetryEmitter)({resource:{"service.name":`picked-vite-plugin`},headers:{"Picked-Telemetry":`vite-plugin`},maxBatchSize:r.length});for(let t of r)e.record(t);await e.flush()}catch{}}}}function H(e){return typeof e==`object`&&!!e&&`then`in e}function U(e,t,n){return function(...r){let i=performance.now(),a=()=>{n.record(e,performance.now()-i)},o=t.apply(this,r);return H(o)?Promise.resolve(o).then(a,a):a(),o}}function W(e){return typeof e==`function`}function de(e,t){if(!e)return t;for(let[n,r]of Object.entries(t))n!==`name`&&(W(r)?Reflect.set(t,n,U(n,r,e)):typeof r==`object`&&r&&`handler`in r&&W(r.handler)&&Reflect.set(r,`handler`,U(n,r.handler,e)));return t}function fe(){return`export const manifestMetadata = {
863
+ `;await(0,a.appendFile)(i,s)}function re(e){return e.split(/\r?\n/).map(e=>e.trim()).some(e=>e===k||e===`.picked`)}var A=6,ie=5e3;function j(e){let t;try{t=new URL(e).hostname}catch{return!1}return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`?!0:t===`api.picked.app`?!1:t.endsWith(`.picked.app`)||t.endsWith(`.picked-dev.app`)}function M(e){return new Promise(t=>{setTimeout(t,e)})}async function N(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<=A;i++){let a=ie*2**(i-1);t(i,A,a),await M(a),r=null;try{n=await e()}catch(e){r=e}if(n!==null)return n}if(r!==null)throw r;return null}function P(e){return Array.isArray(e)?e:[]}function ae(e){let t=e.variants,n=(t??[]).reduce((e,t)=>e+t.weight,0);return!t||t.length===0||n===0?`${e.weight.toString()}%`:t.map(e=>{let t=Math.round(100*e.weight/n);return`${String(e.value)} ${t.toString()}%`}).join(`, `)}var F=2;function I(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 oe(t){if(!(0,e.existsSync)(t))return null;try{let e=await(0,a.readFile)(t,`utf8`),n=JSON.parse(e);return se(n)?n:null}catch{return null}}function se(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 ce(e){let t=new Set;for(let n of P(e.steps))n.layoutContentId&&t.add(n.id);if(t.size===0)return[];let n=[];for(let r of P(e.experiences))P(r.nodes).some(e=>e.type===`step`&&t.has(e.stepId))&&n.push(r.id);return n}async function le(n){let{apiUrl:r,projectId:i,projectRoot:o,headers:s,previewToken:c,reuseWhenUnchanged:l=!0}=n,u=I(o),d=await ue(r,i,s,c),f=ce(d);if(await(0,a.mkdir)(u.experiencesDir,{recursive:!0}),await(0,a.writeFile)(u.projectConfigPath,JSON.stringify(d,null,2)),l){let t=await oe(u.manifestPath);if(t?.version===F&&t.projectVersionId===d.versionId&&t.workspaceId===d.workspaceId){let n=L(u,f);if(Object.values(n).every(t=>(0,e.existsSync)(t)))return{config:d,manifest:t,experienceContentPaths:n};D.info(`a manifest-referenced content file is missing; refetching every experience`)}}let p=new Date().toISOString(),m=[];for(let e of f){let n=await de(r,i,e,s,c),o=(0,t.join)(u.experiencesDir,`${e}.json`);await(0,a.writeFile)(o,JSON.stringify(n,null,2)),m.push({id:e,fetchedAt:p})}let h={version:F,fetchedAt:p,projectVersionId:d.versionId,workspaceId:d.workspaceId,projectId:d.id,experiences:m};return await(0,a.writeFile)(u.manifestPath,JSON.stringify(h,null,2)),{config:d,manifest:h,experienceContentPaths:L(u,f)}}function L(e,n){let r={};for(let i of n)r[i]=(0,t.join)(e.experiencesDir,`${i}.json`);return r}async function ue(e,t,r,i){let a=()=>(0,n.fetchProject)(e,t,{headers:r,previewToken:i}),o;try{o=j(e)?await N(a,(e,t,n)=>{D.info(`project config not ready, retrying in ${(n/1e3).toString()}s (${e.toString()}/${t.toString()})`)}):await a()}catch(n){throw Error(`[picked] Build-time fetch of project config failed for "${t}" at ${e}: ${R(n)}`)}if(!o)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 o}async function de(e,t,r,i,a){let o;try{o=await(0,n.fetchExperienceContent)(e,t,r,{headers:i,previewToken:a})}catch(t){throw Error(`[picked] Build-time fetch of content for experience "${r}" failed at ${e}: ${R(t)}`)}if(!o)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 o}function R(e){if(e instanceof Error)return e.message;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return`unknown error`}}var z=new Set([`resolveId`,`load`]);function B(e=(0,o.createTraceId)()){let t=(0,o.createSpanId)(),n=Date.now(),r=[],a=new Map;return{record:(n,i)=>{if(z.has(n)){let e=a.get(n)??{calls:0,totalMs:0};a.set(n,{calls:e.calls+1,totalMs:e.totalMs+i});return}let s=Date.now();r.push({name:`picked.vite.${n}`,traceId:e,spanId:(0,o.createSpanId)(),parentSpanId:t,startTimeUnixNano:(0,o.toUnixNano)(s-i),endTimeUnixNano:(0,o.toUnixNano)(s),attributes:{"picked.vite.hook":n},status:`ok`})},flush:async s=>{let c={};for(let[e,t]of a)c[`picked.vite.${e}.calls`]=t.calls,c[`picked.vite.${e}.total_ms`]=Math.round(t.totalMs);let l=(0,i.detectHostEnvironment)();r.push({name:`picked.vite.build`,traceId:e,spanId:t,startTimeUnixNano:(0,o.toUnixNano)(n),endTimeUnixNano:(0,o.toUnixNano)(Date.now()),attributes:{"picked.env.provider":l.provider,"picked.env.ci":l.ci,...s,...c},status:`ok`});try{let e=(0,o.createTelemetryEmitter)({resource:{"service.name":`picked-vite-plugin`},headers:{"Picked-Telemetry":`vite-plugin`},maxBatchSize:r.length});for(let t of r)e.record(t);await e.flush()}catch{}}}}function V(e){return typeof e==`object`&&!!e&&`then`in e}function H(e,t,n){return function(...r){let i=performance.now(),a=()=>{n.record(e,performance.now()-i)},o=t.apply(this,r);return V(o)?Promise.resolve(o).then(a,a):a(),o}}function U(e){return typeof e==`function`}function fe(e,t){if(!e)return t;for(let[n,r]of Object.entries(t))n!==`name`&&(U(r)?Reflect.set(t,n,H(n,r,e)):typeof r==`object`&&r&&`handler`in r&&U(r.handler)&&Reflect.set(r,`handler`,H(n,r.handler,e)));return t}function pe(){return`export const manifestMetadata = {
864
864
  mode: 'api',
865
865
  fetchedAt: null,
866
866
  projectVersionId: null,
867
867
  workspaceId: null,
868
868
  }
869
- `}function pe(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(`
869
+ `}function me(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(`
870
870
  `);return`import { registerPickedBundle } from '@picked/client/plugins/dynamic-experiences'
871
871
  import projectConfigJson from ${i(t)}
872
872
 
@@ -891,7 +891,7 @@ export async function experienceContent(experience, _options) {
891
891
  export const manifestMetadata = ${JSON.stringify(r)}
892
892
 
893
893
  registerPickedBundle({ projectConfig, experienceContent, manifestMetadata })
894
- `}function me(e){let{apiUrl:t,projectId:n,projectConfig:r,previewToken:i}=e,a=r?`import { fetchExperienceContent, registerPickedBundle } from '@picked/client/plugins/dynamic-experiences'`:`import { fetchProject, fetchExperienceContent } from '@picked/client/plugins/dynamic-experiences'`,o=r?`export const projectConfig = ${JSON.stringify(r)}`:`export const projectConfig = await fetchProject(apiUrl, projectId, { previewToken: previewToken ?? undefined })`,s=r?`
894
+ `}function he(e){let{apiUrl:t,projectId:n,projectConfig:r,previewToken:i}=e,a=r?`import { fetchExperienceContent, registerPickedBundle } from '@picked/client/plugins/dynamic-experiences'`:`import { fetchProject, fetchExperienceContent } from '@picked/client/plugins/dynamic-experiences'`,o=r?`export const projectConfig = ${JSON.stringify(r)}`:`export const projectConfig = await fetchProject(apiUrl, projectId, { previewToken: previewToken ?? undefined })`,s=r?`
895
895
  registerPickedBundle({ projectConfig, experienceContent, manifestMetadata })
896
896
  `:``;return`${a}
897
897
 
@@ -913,7 +913,7 @@ export const manifestMetadata = {
913
913
  projectVersionId: projectConfig?.versionId ?? null,
914
914
  workspaceId: projectConfig?.workspaceId ?? null,
915
915
  }
916
- ${s}`}var G=`virtual:picked/data/experience/`;function he(e){let t=Object.keys(e.experiences).map((e,t)=>{let n=JSON.stringify(G+t.toString());return` ${JSON.stringify(e)}: () => import(${n}).then((m) => m.default),`}).join(`
916
+ ${s}`}var W=`virtual:picked/data/experience/`;function ge(e){let t=Object.keys(e.experiences).map((e,t)=>{let n=JSON.stringify(W+t.toString());return` ${JSON.stringify(e)}: () => import(${n}).then((m) => m.default),`}).join(`
917
917
  `),n={mode:`snapshot`,fetchedAt:null,projectVersionId:e.projectVersionId,workspaceId:e.workspaceId};return`import { registerPickedBundle } from '@picked/client/plugins/dynamic-experiences'
918
918
 
919
919
  const experienceImporters = {
@@ -932,5 +932,5 @@ export async function experienceContent(experience, _options) {
932
932
  export const manifestMetadata = ${JSON.stringify(n)}
933
933
 
934
934
  registerPickedBundle({ projectConfig, experienceContent, manifestMetadata })
935
- `}function ge(e,t){let n=/^\d+$/.test(t)?Object.keys(e.experiences)[Number(t)]:void 0,r=n===void 0?null:e.experiences[n]??null;return`export default ${JSON.stringify(r)}\n`}var _e=5;function K(e,t,n){if(t.length===0)return;if(t.length>_e){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(`
936
- `))}function ve(e,t){t.length!==0&&console.log(`\n ${e}: ${t.length.toString()} loaded\n`)}var ye=[{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:`Split`,value:e=>ae(e)},{header:`Ver`,value:e=>`v${e.version.toString()}`}],be=[{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()}],xe=[{header:`Name`,value:e=>e.name},{header:`Key`,value:e=>e.key},{header:`Fields`,value:e=>(e.fieldIds?.length??0).toString()}],Se=[{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`}],Ce=[{header:`Name`,value:e=>e.name},{header:`Key`,value:e=>e.key}];function we(){return`0.0.111-next.2`}var Te=`https://api.picked.app`,q=`virtual:picked/data`,J=`\0${q}`,Y=`\0${G}`;function Ee(e){for(let t of Object.values(e))if(t.type===`chunk`&&t.moduleIds.includes(J))return t.fileName}function De(e,t){return e===``||e.endsWith(`/`)?`${e}${t}`:`${e}/${t}`}async function Oe(e){try{let t=await(0,r.generate)({config:e,onWarn:e=>{D.warn(e)}});D.info(`generated types at ${t.typesOutput}`)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`type generation failed: ${t}. Fix the schema source, or set \`generateTypes: false\` on the picked plugin to skip it.`)}}function ke(e,t,n){return e&&(0,i.isTelemetryEnabled)(t,n)?e:null}async function Ae(e,t){let n=await(0,i.loadResolvedPickedConfig)(e,t);if(!n)throw Error(`picked.config.{ts,js,json} is required. Add a picked.config.ts with projectId and apiUrl.`);return n}function X(e,t,n,r){if(t===void 0||n===void 0||t===n)return;let i=r===void 0?`picked.config says "${n}"`:`picked.config \`${r}\` is "${n}"`;throw Error(`picked plugin option \`${e}\` is "${t}", and ${i}. Remove the plugin option; picked.config is the one place this belongs.`)}function je(e){e.data!==void 0&&D.warn("picked plugin option `mode` is deprecated, and a future release drops it. Set `data` in picked.config instead, which the CLI and the type generator read from too.");let t=[];if(e.projectId!==void 0&&t.push("`projectId`"),e.apiUrl!==void 0&&t.push("`apiUrl`"),t.length===0)return;let n=t.length>1;D.warn(`picked plugin option${n?`s`:``} ${t.join(` and `)} ${n?`are`:`is`} deprecated, and a future release drops ${n?`them`:`it`}. Move ${n?`them`:`it`} to picked.config, which the CLI and the type generator read from too.`)}async function Me(e,t){let n=await(0,i.loadPickedConfig)(e);n&&n.projectId!==t&&D.warn(`using project "${t}" (picked.config default: "${n.projectId}") — run 'picked status' to inspect`)}async function Z(e,t){let n=await(0,i.loadPickedConfig)(e);return X(`projectId`,t.projectId,n?.projectId),X(`apiUrl`,t.apiUrl,n?.apiUrl),X(`mode`,t.data,n?.data,`data`),je(t),Ae(e,t)}async function Ne(t){if(t.data!==`snapshot`)return(0,e.existsSync)((0,i.resolveSnapshotPath)(t.projectRoot))&&D.warn(`${i.SNAPSHOT_FILENAME} is ignored: the data mode in force is '${t.data}'. Set \`data: 'snapshot'\` in picked.config to build from it, or delete it.`),null;let n=await(0,i.requireSnapshot)(t);return D.info(`serving ${i.SNAPSHOT_FILENAME}: project "${n.projectId}", version ${n.projectVersionId??`none (preview)`} — run \`picked pull\` to refresh`),n.source===`preview`?D.warn(`${i.SNAPSHOT_FILENAME} holds preview data, so this run serves unpublished content. Run \`picked pull\` against the published workspace before you release.`):t.source===`preview`&&D.warn(`the preview workspace in force is not read: ${i.SNAPSHOT_FILENAME} holds published data. Run \`picked pull --allow-preview\` to serve the preview.`),n}async function Pe(e,t,r,i){let a=()=>(0,n.fetchProject)(e,t,{headers:r,previewToken:i??void 0});return j(e)?N(a,(e,t,n)=>{D.info(`local API not ready, retrying in ${(n/1e3).toString()}s (${e.toString()}/${t.toString()})`)}):a()}var Q=new Map;function Fe(e,t,n){return JSON.stringify([e,t,n])}function Ie(r={}){let a=r.mode,o=a??`bundle`,s=null,c=r.generateTypes??!0,l=[],u=process.cwd(),d=`serve`,f=`/`,m=null,h=!1,g,_,v=null,y=(0,i.isTelemetryForcedOffByEnvironment)()?null:V();return de(y,{name:`picked`,config:async(i,f)=>{d=f.command,u=i.root===void 0?process.cwd():(0,t.resolve)(process.cwd(),i.root);let{projectId:p,apiUrl:b}=r;m=await Z(u,{projectId:p,apiUrl:b,data:a});let{projectId:x,apiUrl:S,previewToken:C}=m;if(o=m.data,y=ke(y,m,r.telemetry),D.banner(),s=await Ne(m),s&&(l=P(s.projectConfig.features)),c&&!h&&(h=!0,await Oe(m)),o===`snapshot`)return;S!==Te&&D.warn(`using custom API URL: ${S}`),await Me(u,x);let w=(0,n.createClientHeaders)(`vite-plugin`,we());if(o===`api`)D.debug(`data is 'api': skipping the project-config prefetch`);else if(f.command===`build`){let t=Fe(S,x,u);g=t;let n=Q.get(t);n===void 0&&(n=(async()=>{D.info(`prefetching project config + content for "${x}"`);let t=I(u),n=(0,e.existsSync)(t.pickedDir),r=performance.now(),i=await le({apiUrl:S,projectId:x,projectRoot:u,headers:w,previewToken:C??void 0}),a=(performance.now()-r).toFixed(0);await ne(u,n);let o=i.config;return $(o,a),{virtualSource:pe({projectConfigPath:t.projectConfigPath,experienceContentPaths:i.experienceContentPaths,manifestMetadata:{mode:`build`,fetchedAt:i.manifest.fetchedAt,projectVersionId:i.manifest.projectVersionId,workspaceId:i.manifest.workspaceId}}),features:P(o.features)}})(),n.catch(()=>Q.delete(t)),Q.set(t,n));let r=await n;_=r.virtualSource,l=r.features}else if(f.mode===`production`)D.debug(`skipping the dev project-config fetch for a production serve resolution`);else{D.info(`fetching project config for "${x}" (dev)`);let e=performance.now(),t=await Pe(S,x,w,C),n=(performance.now()-e).toFixed(0);v=t,t?(l=P(t.features),$(t,n)):D.warn(`failed to fetch project config for "${x}" (${n}ms)`)}},configResolved(e){f=e.base},async buildStart(){o===`snapshot`&&m&&d===`build`&&(s=await(0,i.requireSnapshot)(m))},closeBundle(){g!==void 0&&Q.delete(g),y?.flush({"picked.vite.command":d,"picked.data.mode":o,"picked.source":m?.source??`unknown`})},transformIndexHtml:{order:`post`,handler(e,t){if(o===`api`||t.bundle===void 0)return;let n=Ee(t.bundle);if(n===void 0)return;let r=De(f,n);if(!e.includes(`"${r}"`))return[{tag:`link`,attrs:{rel:`modulepreload`,crossorigin:!0,href:r},injectTo:`head`}]}},resolveId(e){if(e===q||e.startsWith(`virtual:picked/data/experience/`))return`\0${e}`},load(e){if(e.startsWith(Y)&&s&&m)return this.addWatchFile((0,i.resolveSnapshotPath)(m.projectRoot)),ge(s,e.slice(Y.length));if(e===J){if(o===`api`)return fe();if(o===`snapshot`){if(!s||!m)throw Error(`picked plugin config hook must run before virtual module load`);return this.addWatchFile((0,i.resolveSnapshotPath)(m.projectRoot)),he(s)}if(d===`build`)return _;if(!m)throw Error(`picked plugin config hook must run before virtual module load`);return me({apiUrl:m.apiUrl,projectId:m.projectId,projectConfig:v,previewToken:m.previewToken??void 0})}},configureServer(e){if(o===`snapshot`&&m){let t=(0,i.resolveSnapshotPath)(m.projectRoot),n=n=>{n===t&&(D.info(`${i.SNAPSHOT_FILENAME} changed; restarting the dev server`),e.restart())};e.watcher.add(t),e.watcher.on(`add`,n),e.watcher.on(`change`,n),e.watcher.on(`unlink`,n)}if(r.disableLauncher)return;e.middlewares.use(O(()=>p(l)));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){r.disableLauncher||(`index.html`in t?D.debug(`index.html came from the build; skipping the launcher page`):this.emitFile({type:`asset`,fileName:`index.html`,source:p(l)}))}}})}function $(e,t){let n=P(e.features),r=P(e.experiences),i=P(e.steps),a=P(e.fields),o=P(e.conditions),s=P(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(`, `);D.info(`fetched config in ${t}ms (${l})`),K(`Features`,n,ye),K(`Experiences`,r,be),K(`Steps`,i,xe),K(`Fields`,a,Se),K(`Conditions`,o,Ce),ve(`Actions`,s),D.debug(`config size: ${c.toString()} bytes`)}exports.picked=Ie;
935
+ `}function _e(e,t){let n=/^\d+$/.test(t)?Object.keys(e.experiences)[Number(t)]:void 0,r=n===void 0?null:e.experiences[n]??null;return`export default ${JSON.stringify(r)}\n`}var ve=5;function G(e,t,n){if(t.length===0)return;if(t.length>ve){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(`
936
+ `))}function ye(e,t){t.length!==0&&console.log(`\n ${e}: ${t.length.toString()} loaded\n`)}var be=[{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:`Split`,value:e=>ae(e)},{header:`Ver`,value:e=>`v${e.version.toString()}`}],xe=[{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()}],Se=[{header:`Name`,value:e=>e.name},{header:`Key`,value:e=>e.key},{header:`Fields`,value:e=>(e.fieldIds?.length??0).toString()}],Ce=[{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`}],we=[{header:`Name`,value:e=>e.name},{header:`Key`,value:e=>e.key}];function Te(){return`0.0.111-next.4`}var Ee=`https://api.picked.app`,K=`virtual:picked/data`,q=`\0${K}`,J=`\0${W}`;function De(e){for(let t of Object.values(e))if(t.type===`chunk`&&t.moduleIds.includes(q))return t.fileName}function Oe(e,t){return e===``||e.endsWith(`/`)?`${e}${t}`:`${e}/${t}`}async function ke(e){try{let t=await(0,r.generate)({config:e,onWarn:e=>{D.warn(e)}});D.info(`generated types at ${t.typesOutput}`)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`type generation failed: ${t}. Fix the schema source, or set \`generateTypes: false\` on the picked plugin to skip it.`)}}function Ae(e,t,n){return e&&(0,i.isTelemetryEnabled)(t,n)?e:null}async function je(e,t){let n=await(0,i.loadResolvedPickedConfig)(e,t);if(!n)throw Error(`picked.config.{ts,js,json} is required. Add a picked.config.ts with projectId and apiUrl.`);return n}function Y(e,t,n,r){if(t===void 0||n===void 0||t===n)return;let i=r===void 0?`picked.config says "${n}"`:`picked.config \`${r}\` is "${n}"`;throw Error(`picked plugin option \`${e}\` is "${t}", and ${i}. Remove the plugin option; picked.config is the one place this belongs.`)}async function X(e){let t=await(0,i.loadPickedConfig)(e);return t&&(0,i.hasProject)(t)?t:null}function Me(e){e.data!==void 0&&D.warn("picked plugin option `mode` is deprecated, and a future release drops it. Set `data` in picked.config instead, which the CLI and the type generator read from too.");let t=[];if(e.projectId!==void 0&&t.push("`projectId`"),e.apiUrl!==void 0&&t.push("`apiUrl`"),t.length===0)return;let n=t.length>1;D.warn(`picked plugin option${n?`s`:``} ${t.join(` and `)} ${n?`are`:`is`} deprecated, and a future release drops ${n?`them`:`it`}. Move ${n?`them`:`it`} to picked.config, which the CLI and the type generator read from too.`)}async function Z(e,t){let n=await X(e);n&&n.projectId!==t&&D.warn(`using project "${t}" (picked.config default: "${n.projectId}") — run 'picked status' to inspect`)}async function Ne(e,t){let n=await X(e);return Y(`projectId`,t.projectId,n?.projectId),Y(`apiUrl`,t.apiUrl,n?.apiUrl),Y(`mode`,t.data,n?.data,`data`),Me(t),je(e,t)}async function Pe(t){if(t.data!==`snapshot`)return(0,e.existsSync)((0,i.resolveSnapshotPath)(t.projectRoot))&&D.warn(`${i.SNAPSHOT_FILENAME} is ignored: the data mode in force is '${t.data}'. Set \`data: 'snapshot'\` in picked.config to build from it, or delete it.`),null;let n=await(0,i.requireSnapshot)(t);return D.info(`serving ${i.SNAPSHOT_FILENAME}: project "${n.projectId}", version ${n.projectVersionId??`none (preview)`} — run \`picked pull\` to refresh`),n.source===`preview`?D.warn(`${i.SNAPSHOT_FILENAME} holds preview data, so this run serves unpublished content. Run \`picked pull\` against the published workspace before you release.`):t.source===`preview`&&D.warn(`the preview workspace in force is not read: ${i.SNAPSHOT_FILENAME} holds published data. Run \`picked pull --allow-preview\` to serve the preview.`),n}async function Fe(e,t,r,i){let a=()=>(0,n.fetchProject)(e,t,{headers:r,previewToken:i??void 0});return j(e)?N(a,(e,t,n)=>{D.info(`local API not ready, retrying in ${(n/1e3).toString()}s (${e.toString()}/${t.toString()})`)}):a()}var Q=new Map;function Ie(e,t,n){return JSON.stringify([e,t,n])}function Le(r={}){let a=r.mode,o=a??`bundle`,s=null,c=r.generateTypes??!0,l=[],u=process.cwd(),d=`serve`,f=`/`,m=null,h=!1,g,_,v=null,y=(0,i.isTelemetryForcedOffByEnvironment)()?null:B();return fe(y,{name:`picked`,config:async(i,f)=>{d=f.command,u=i.root===void 0?process.cwd():(0,t.resolve)(process.cwd(),i.root);let{projectId:p,apiUrl:b}=r;m=await Ne(u,{projectId:p,apiUrl:b,data:a});let{projectId:x,apiUrl:S,previewToken:C}=m;if(o=m.data,y=Ae(y,m,r.telemetry),D.banner(),s=await Pe(m),s&&(l=P(s.projectConfig.features)),c&&!h&&(h=!0,await ke(m)),o===`snapshot`)return;S!==Ee&&D.warn(`using custom API URL: ${S}`),await Z(u,x);let w=(0,n.createClientHeaders)(`vite-plugin`,Te());if(o===`api`)D.debug(`data is 'api': skipping the project-config prefetch`);else if(f.command===`build`){let t=Ie(S,x,u);g=t;let n=Q.get(t);n===void 0&&(n=(async()=>{D.info(`prefetching project config + content for "${x}"`);let t=I(u),n=(0,e.existsSync)(t.pickedDir),r=performance.now(),i=await le({apiUrl:S,projectId:x,projectRoot:u,headers:w,previewToken:C??void 0}),a=(performance.now()-r).toFixed(0);await ne(u,n);let o=i.config;return $(o,a),{virtualSource:me({projectConfigPath:t.projectConfigPath,experienceContentPaths:i.experienceContentPaths,manifestMetadata:{mode:`build`,fetchedAt:i.manifest.fetchedAt,projectVersionId:i.manifest.projectVersionId,workspaceId:i.manifest.workspaceId}}),features:P(o.features)}})(),n.catch(()=>Q.delete(t)),Q.set(t,n));let r=await n;_=r.virtualSource,l=r.features}else if(f.mode===`production`)D.debug(`skipping the dev project-config fetch for a production serve resolution`);else{D.info(`fetching project config for "${x}" (dev)`);let e=performance.now(),t=await Fe(S,x,w,C),n=(performance.now()-e).toFixed(0);v=t,t?(l=P(t.features),$(t,n)):D.warn(`failed to fetch project config for "${x}" (${n}ms)`)}},configResolved(e){f=e.base},async buildStart(){o===`snapshot`&&m&&d===`build`&&(s=await(0,i.requireSnapshot)(m))},closeBundle(){g!==void 0&&Q.delete(g),y?.flush({"picked.vite.command":d,"picked.data.mode":o,"picked.source":m?.source??`unknown`})},transformIndexHtml:{order:`post`,handler(e,t){if(o===`api`||t.bundle===void 0)return;let n=De(t.bundle);if(n===void 0)return;let r=Oe(f,n);if(!e.includes(`"${r}"`))return[{tag:`link`,attrs:{rel:`modulepreload`,crossorigin:!0,href:r},injectTo:`head`}]}},resolveId(e){if(e===K||e.startsWith(`virtual:picked/data/experience/`))return`\0${e}`},load(e){if(e.startsWith(J)&&s&&m)return this.addWatchFile((0,i.resolveSnapshotPath)(m.projectRoot)),_e(s,e.slice(J.length));if(e===q){if(o===`api`)return pe();if(o===`snapshot`){if(!s||!m)throw Error(`picked plugin config hook must run before virtual module load`);return this.addWatchFile((0,i.resolveSnapshotPath)(m.projectRoot)),ge(s)}if(d===`build`)return _;if(!m)throw Error(`picked plugin config hook must run before virtual module load`);return he({apiUrl:m.apiUrl,projectId:m.projectId,projectConfig:v,previewToken:m.previewToken??void 0})}},configureServer(e){if(o===`snapshot`&&m){let t=(0,i.resolveSnapshotPath)(m.projectRoot),n=n=>{n===t&&(D.info(`${i.SNAPSHOT_FILENAME} changed; restarting the dev server`),e.restart())};e.watcher.add(t),e.watcher.on(`add`,n),e.watcher.on(`change`,n),e.watcher.on(`unlink`,n)}if(r.disableLauncher)return;e.middlewares.use(O(()=>p(l)));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){r.disableLauncher||(`index.html`in t?D.debug(`index.html came from the build; skipping the launcher page`):this.emitFile({type:`asset`,fileName:`index.html`,source:p(l)}))}}})}function $(e,t){let n=P(e.features),r=P(e.experiences),i=P(e.steps),a=P(e.fields),o=P(e.conditions),s=P(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(`, `);D.info(`fetched config in ${t}ms (${l})`),G(`Features`,n,be),G(`Experiences`,r,xe),G(`Steps`,i,Se),G(`Fields`,a,Ce),G(`Conditions`,o,we),ye(`Actions`,s),D.debug(`config size: ${c.toString()} bytes`)}exports.picked=Le;