@coreframe/vite 0.1.22 → 0.1.24

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.
@@ -0,0 +1,9 @@
1
+ //#region browser/worktree-head-reload.d.ts
2
+ type WatchWorktreeHeadOptions = {
3
+ intervalMs?: number;
4
+ };
5
+ declare function watchWorktreeHead(onChange: () => void, {
6
+ intervalMs
7
+ }?: WatchWorktreeHeadOptions): () => void;
8
+ //#endregion
9
+ export { WatchWorktreeHeadOptions, watchWorktreeHead };
@@ -0,0 +1 @@
1
+ function e(e,{intervalMs:t=3e4}={}){let n=!1,r,i=!1,a=()=>{i||(i=!0,window.clearInterval(c),window.removeEventListener(`focus`,o),document.removeEventListener(`visibilitychange`,s))},o=()=>{n||i||(n=!0,fetch(`/__coreframe/worktree-head`,{cache:`no-store`}).then(async t=>{if(!t.ok||i)return;let n=(await t.text()).trim();if(n){if(!r){r=n;return}n!==r&&(a(),e())}}).catch(()=>{}).finally(()=>{n=!1}))},s=()=>{document.visibilityState===`visible`&&o()},c=window.setInterval(o,t);return window.addEventListener(`focus`,o),document.addEventListener(`visibilitychange`,s),o(),a}export{e as watchWorktreeHead};
@@ -1,2 +1,2 @@
1
- import{readFile as e}from"node:fs/promises";import{checkAssets as t,formatAssetProblems as n,materializeAsset as r,readAssetManifest as i,resolveAssetVariantFile as a}from"@coreframe/scripts/assets";const o=/!\[([^\]]*)\]\(@asset\s+([a-z0-9][a-z0-9/-]*)\)/g;function s({cwd:e=process.cwd(),devMaterialize:s=!0}={}){let d=`virtual:assets`,h=`\0${d}`,g=new Map,_=``,v=!1;function y(e){return{...e,variants:[...e.variants].sort((e,t)=>e.width-t.width).map(e=>({...e,src:c(_,e.path)}))}}async function b(t){let i=g.get(t);if(i)return i;let a=(async()=>{let i=await r(t,{cwd:e,updateManifest:!1});if(!i.ok)throw Error(n(i.problems));return i})();g.set(t,a);try{return await a}finally{g.delete(t)}}return{name:`coreframe:assets`,configResolved(e){_=l(e.env.VITE_MEDIA_PUBLIC_BASE_URL),v=e.mode===`test`||process.env.VITEST===`true`},configureServer(t){t.middlewares.use(async(r,o,c)=>{try{if(!r.url||![`GET`,`HEAD`].includes(r.method??`GET`)){c();return}let l=f(r.url);if(!l){c();return}let u=await i(e);if(u.problems.length>0){c(Error(n(u.problems)));return}let d=p(u.manifest,l);if(!d){c();return}let h=a(e,l),g=await m(h);if(!g&&s&&(t.config.logger.info(`Materializing Coreframe asset "${d}" for dev.`),await b(d),g=await m(h),!g))throw Error(`Coreframe asset variant "${l}" does not match its source. Run: coreframe assets build --id ${d}`);if(!g){c();return}o.statusCode=200,o.setHeader(`Content-Type`,`image/webp`),o.setHeader(`Cache-Control`,`public, max-age=31536000, immutable`),o.setHeader(`Content-Length`,g.byteLength),o.end(r.method===`HEAD`?void 0:g)}catch(e){c(e)}})},async buildStart(){if(this.meta.watchMode||v)return;let r=await t({cwd:e});if(!r.ok)throw Error(n(r.problems))},async resolveId(e){if(e===d)return h},async load(t){if(t!==h)return;let{manifest:r,problems:a}=await i(e);if(a.length>0)throw Error(n(a));let o=Object.fromEntries(Object.entries(r).map(([e,t])=>[e,y(t)]));return[`const manifest = ${JSON.stringify(o)};`,`export { manifest };`,`export function asset(id) {`,` const entry = manifest[id];`," if (!entry) throw new Error(`Unknown Coreframe asset: ${id}`);",` if (entry.variants.length === 0) {`," throw new Error(`Coreframe asset has no generated variants: ${id}. Run: coreframe assets build --id ${id}`);",` }`,` return entry;`,`}`].join(`
2
- `)},async transform(t,r){let[a]=r.split(`?`,1);if(!a?.endsWith(`.md`)&&!a?.endsWith(`.mdx`))return;let c=[...t.matchAll(o)];if(c.length===0)return;let l=await i(e),d=[...l.problems],f=t;for(let e of c){let[t,n,i]=e,a=l.manifest[i];if(!a){d.push({code:`INVALID_REFERENCE`,message:`Asset reference "${i}" in "${r}" is not present in assets/manifest.json.`,assetId:i,file:r});continue}if(this.meta.watchMode&&s&&a.variants.length===0){this.warn(`Materializing Coreframe asset "${i}" for dev.`);let e=await b(i);d.push(...e.problems);let t=e.assets.find(e=>e.assetId===i);t&&(l.manifest[i]={...a,variants:t.variants})}let o=y(l.manifest[i]??a);if(o.variants.length===0){d.push({code:`GENERATED_VARIANT_MISSING`,message:`Asset "${i}" has no generated variants.`,assetId:i,file:r,fix:`Run: coreframe assets build --id ${i}`});continue}f=f.replace(t,u(n,o))}if(d.length>0)throw Error(n(d));return f}}}function c(e,t){return`${e}/${t}`}function l(e){return(e??``).replace(/\/+$/,``)}function u(e,t){let n=t.variants.at(-1),r=t.variants.map(e=>`${e.src} ${e.width}w`).join(`, `);return[`<img alt="${d(e)}"`,`src="${d(n.src)}"`,`srcset="${d(r)}"`,`sizes="100vw"`,`width="${t.width}"`,`height="${t.height}">`].join(` `)}function d(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`)}function f(e){let t=decodeURIComponent(new URL(e,`http://coreframe.local`).pathname).replace(/^\/+/,``);return t.startsWith(`assets/`)?t:void 0}function p(e,t){return Object.entries(e).find(([,e])=>e.variants.some(e=>e.path===t))?.[0]}async function m(t){try{return await e(t)}catch(e){if(h(e)&&e.code===`ENOENT`)return;throw e}}function h(e){return e instanceof Error&&`code`in e}export{s as coreframeAssetsPlugin};
1
+ import{readFile as e}from"node:fs/promises";import{checkAssets as t,formatAssetProblems as n,materializeAsset as r,readAssetManifest as i,resolveAssetVariantFile as a}from"@coreframe/scripts/assets";import{readProjectConfig as o}from"@coreframe/scripts/config";const s=/!\[([^\]]*)\]\(@asset\s+([a-z0-9][a-z0-9/-]*)\)/g;function c({cwd:e=process.cwd(),devMaterialize:c=!0}={}){let f=`virtual:assets`,g=`\0${f}`,_=new Map,v=``,y=!1;async function b(){v||=u((await o({cwd:e})).assets?.publicBaseUrl)}function x(e){return{...e,variants:[...e.variants].sort((e,t)=>e.width-t.width).map(e=>({...e,src:l(v,e.path)}))}}async function S(t){let i=_.get(t);if(i)return i;let a=(async()=>{let i=await r(t,{cwd:e,updateManifest:!1});if(!i.ok)throw Error(n(i.problems));return i})();_.set(t,a);try{return await a}finally{_.delete(t)}}return{name:`coreframe:assets`,configResolved(e){v=u(e.env.VITE_ASSETS_PUBLIC_BASE_URL),y=e.mode===`test`||process.env.VITEST===`true`},configureServer(t){t.middlewares.use(async(r,o,s)=>{try{if(!r.url||![`GET`,`HEAD`].includes(r.method??`GET`)){s();return}let l=p(r.url);if(!l){s();return}let u=await i(e);if(u.problems.length>0){s(Error(n(u.problems)));return}let d=m(u.manifest,l);if(!d){s();return}let f=a(e,l),g=await h(f);if(!g&&c&&(t.config.logger.info(`Materializing Coreframe asset "${d}" for dev.`),await S(d),g=await h(f),!g))throw Error(`Coreframe asset variant "${l}" does not match its source. Run: coreframe assets build --id ${d}`);if(!g){s();return}o.statusCode=200,o.setHeader(`Content-Type`,`image/webp`),o.setHeader(`Cache-Control`,`public, max-age=31536000, immutable`),o.setHeader(`Content-Length`,g.byteLength),o.end(r.method===`HEAD`?void 0:g)}catch(e){s(e)}})},async buildStart(){if(this.meta.watchMode||y)return;let r=await t({cwd:e});if(!r.ok)throw Error(n(r.problems))},async resolveId(e){if(e===f)return g},async load(t){if(t!==g)return;await b();let{manifest:r,problems:a}=await i(e);if(a.length>0)throw Error(n(a));let o=Object.fromEntries(Object.entries(r.assets).map(([e,t])=>[e,x(t)]));return[`const manifest = ${JSON.stringify(o)};`,`export { manifest };`,`export function asset(id) {`,` const entry = manifest[id];`," if (!entry) throw new Error(`Unknown Coreframe asset: ${id}`);",` if (entry.variants.length === 0) {`," throw new Error(`Coreframe asset has no generated variants: ${id}. Run: coreframe assets build --id ${id}`);",` }`,` return entry;`,`}`].join(`
2
+ `)},async transform(t,r){let[a]=r.split(`?`,1);if(!a?.endsWith(`.md`)&&!a?.endsWith(`.mdx`))return;let o=[...t.matchAll(s)];if(o.length===0)return;await b();let l=await i(e),u=[...l.problems],f=t;for(let e of o){let[t,n,i]=e,a=l.manifest.assets[i];if(!a){u.push({code:`INVALID_REFERENCE`,message:`Asset reference "${i}" in "${r}" is not present in assets/manifest.json.`,assetId:i,file:r});continue}if(this.meta.watchMode&&c&&a.variants.length===0){this.warn(`Materializing Coreframe asset "${i}" for dev.`);let e=await S(i);u.push(...e.problems);let t=e.assets.find(e=>e.assetId===i);t&&(l.manifest.assets[i]={...a,variants:t.variants})}let o=x(l.manifest.assets[i]??a);if(o.variants.length===0){u.push({code:`GENERATED_VARIANT_MISSING`,message:`Asset "${i}" has no generated variants.`,assetId:i,file:r,fix:`Run: coreframe assets build --id ${i}`});continue}f=f.replace(t,d(n,o))}if(u.length>0)throw Error(n(u));return f}}}function l(e,t){return`${e}/${t}`}function u(e){return(e??``).replace(/\/+$/,``)}function d(e,t){let n=t.variants.at(-1),r=t.variants.map(e=>`${e.src} ${e.width}w`).join(`, `);return[`<img alt="${f(e)}"`,`src="${f(n.src)}"`,`srcset="${f(r)}"`,`sizes="100vw"`,`width="${t.width}"`,`height="${t.height}">`].join(` `)}function f(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`)}function p(e){let t=decodeURIComponent(new URL(e,`http://coreframe.local`).pathname).replace(/^\/+/,``);return t.startsWith(`projects/`)?t:void 0}function m(e,t){return Object.entries(e.assets).find(([,e])=>e.variants.some(e=>e.path===t))?.[0]}async function h(t){try{return await e(t)}catch(e){if(g(e)&&e.code===`ENOENT`)return;throw e}}function g(e){return e instanceof Error&&`code`in e}export{c as coreframeAssetsPlugin};
@@ -1 +1 @@
1
- import{cp as e,readFile as t}from"node:fs/promises";import{basename as n,join as r,resolve as i}from"node:path";import{createDashboardRequestHandler as a,resolveDashboardClientDist as o}from"@coreframe/dashboard/server";import{readProjectConfig as s}from"@coreframe/scripts/config";const c=`/__dashboard`;function l({clientDist:t=o(),env:i=process.env,projectRoot:s=process.cwd()}={}){return{name:`coreframe:dashboard`,async config(){return{define:{__COREFRAME_DASHBOARD_BUILD__:JSON.stringify(await d(s,i))}}},configureServer(e){let n=a({clientDist:t,projectRoot:s});return e.middlewares.use(async(e,t,r)=>{if(!e.url||!u(e.url)){r();return}await n.handle(e,t)}),e.httpServer?.once(`close`,()=>{n.dispose()}),()=>{let t=e.printUrls.bind(e);e.printUrls=()=>{t();let n=e.resolvedUrls?.local[0];n&&e.config.logger.info(` ➜ Dashboard: ${new URL(c,n)}`)}}},async writeBundle(i){!i.dir||n(i.dir)!==`client`||await e(t,r(i.dir,c.slice(1)),{force:!0,recursive:!0})}}}function u(e){let t=new URL(e,`http://coreframe.local`).pathname;return t===c||t.startsWith(`${c}/`)}async function d(e,n){let[r,a]=await Promise.all([t(i(e,`package.json`),`utf8`),s({cwd:e})]),o=JSON.parse(r),c=Object.entries(a.worker?.environment??{}).flatMap(([e,t])=>t.kind===`generated`?[]:[{description:t.description,kind:t.kind,name:e,requiredIn:t.requiredIn??[]}]);return{applicationName:o.name??`Coreframe application`,applicationVersion:o.version,commit:n.GITHUB_SHA,configuration:c,coreframeVersion:o.engines?.coreframe,deployUrls:{production:a.deploy?.environments?.production?.url,staging:a.deploy?.environments?.staging?.url}}}export{l as coreframeDashboardPlugin};
1
+ import{cp as e,readFile as t}from"node:fs/promises";import{readProjectConfig as n}from"@coreframe/scripts/config";import{basename as r,join as i,resolve as a}from"node:path";import{createDashboardRequestHandler as o,resolveDashboardClientDist as s}from"@coreframe/dashboard/server";const c=`/__dashboard`;function l({clientDist:t=s(),env:n=process.env,projectRoot:a=process.cwd()}={}){return{name:`coreframe:dashboard`,async config(){return{define:{__COREFRAME_DASHBOARD_BUILD__:JSON.stringify(await d(a,n))}}},configureServer(e){let n=o({clientDist:t,projectRoot:a});return e.middlewares.use(async(e,t,r)=>{if(!e.url||!u(e.url)){r();return}await n.handle(e,t)}),e.httpServer?.once(`close`,()=>{n.dispose()}),()=>{let t=e.printUrls.bind(e);e.printUrls=()=>{t();let n=e.resolvedUrls?.local[0];n&&e.config.logger.info(` ➜ Dashboard: ${new URL(c,n)}`)}}},async writeBundle(n){!n.dir||r(n.dir)!==`client`||await e(t,i(n.dir,c.slice(1)),{force:!0,recursive:!0})}}}function u(e){let t=new URL(e,`http://coreframe.local`).pathname;return t===c||t.startsWith(`${c}/`)}async function d(e,r){let[i,o]=await Promise.all([t(a(e,`package.json`),`utf8`),n({cwd:e})]),s=JSON.parse(i),c=Object.entries(o.worker?.environment??{}).flatMap(([e,t])=>t.kind===`generated`?[]:[{description:t.description,kind:t.kind,name:e,requiredIn:t.requiredIn??[]}]);return{applicationName:s.name??`Coreframe application`,applicationVersion:s.version,commit:r.GITHUB_SHA,configuration:c,coreframeVersion:s.engines?.coreframe,deployUrls:{production:o.deploy?.environments?.production?.url,staging:o.deploy?.environments?.staging?.url}}}export{l as coreframeDashboardPlugin};
@@ -1 +1 @@
1
- import{coreframeAssetsPlugin as e}from"./assets.js";import{coreframeDashboardPlugin as t}from"./dashboard.js";import{t as n}from"../icons-Dn2tl9hg.js";import{coreframeManagedDevPlugin as r}from"./managed-dev.js";function i(){return[e(),...n(),r(),t()]}export{i as coreframeVitePreset};
1
+ import{coreframeAssetsPlugin as e}from"./assets.js";import{coreframeDashboardPlugin as t}from"./dashboard.js";import{t as n}from"../icons-Dn2tl9hg.js";import{coreframeManagedDevPlugin as r}from"./managed-dev.js";import{t as i}from"../worktree-head-BZrhW1-Q.js";function a(){return[e(),...n(),r(),i(),t()]}export{a as coreframeVitePreset};
@@ -0,0 +1,6 @@
1
+ import { Plugin } from "vite";
2
+
3
+ //#region plugins/worktree-head.d.ts
4
+ declare function coreframeWorktreeHeadPlugin(): Plugin;
5
+ //#endregion
6
+ export { coreframeWorktreeHeadPlugin };
@@ -0,0 +1 @@
1
+ import{t as e}from"../worktree-head-BZrhW1-Q.js";export{e as coreframeWorktreeHeadPlugin};
@@ -0,0 +1 @@
1
+ import{execFile as e}from"node:child_process";import{promisify as t}from"node:util";const n=t(e);function r(){return{name:`coreframe:worktree-head`,apply:`serve`,configureServer(e){let t=e.config.root;e.middlewares.use(async(e,n,r)=>{if(!e.url||![`GET`,`HEAD`].includes(e.method??`GET`)||new URL(e.url,`http://coreframe.local`).pathname!==`/__coreframe/worktree-head`){r();return}let a=await i(t);if(n.setHeader(`Cache-Control`,`no-store`),n.setHeader(`Content-Type`,`text/plain; charset=utf-8`),!a){n.statusCode=503,n.end();return}n.statusCode=200,n.end(e.method===`HEAD`?void 0:`${a}\n`)})}}}async function i(e){try{let{stdout:t}=await n(`git`,[`rev-parse`,`--verify`,`HEAD`],{cwd:e});return t.trim()||void 0}catch{return}}export{r as t};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coreframe/vite",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/airlock-labs/coreframe.git",
@@ -19,6 +19,10 @@
19
19
  "types": "./dist/overlay/managed-dev-overlay.d.ts",
20
20
  "default": "./dist/overlay/managed-dev-overlay.js"
21
21
  },
22
+ "./worktree-head-reload": {
23
+ "types": "./dist/browser/worktree-head-reload.d.ts",
24
+ "default": "./dist/browser/worktree-head-reload.js"
25
+ },
22
26
  "./*": {
23
27
  "types": "./dist/plugins/*.d.ts",
24
28
  "default": "./dist/plugins/*.js"
@@ -31,9 +35,9 @@
31
35
  "lucide-react": "^1.24.0",
32
36
  "obug": "^2.1.3",
33
37
  "unplugin": "^2.3.11",
34
- "@coreframe/dashboard": "^0.2.12",
38
+ "@coreframe/dashboard": "^0.2.14",
35
39
  "@coreframe/lib": "^0.1.12",
36
- "@coreframe/scripts": "^0.1.34"
40
+ "@coreframe/scripts": "^0.1.36"
37
41
  },
38
42
  "devDependencies": {
39
43
  "@tsdown/css": "0.22.3",