@ekg_gg/devkit 0.0.2 → 0.0.3

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.
Files changed (2) hide show
  1. package/dist/index.mjs +2 -2
  2. package/package.json +2 -1
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import e from"yargs";import{hideBin as t}from"yargs/helpers";import n from"node:fs/promises";import r from"node:path";import{createServer as i}from"vite";import{fileURLToPath as a}from"node:url";import{z as o}from"zod/v4";o.object({width:o.number().min(0).default(1e3),height:o.number().min(0).default(1e3),settings:o.record(o.string(),o.unknown()).default({})});const s=o.object({$schema:o.literal(`https://ekg.gg/schemas/manifest.json`).default(`https://ekg.gg/schemas/manifest.json`),name:o.string().optional(),version:o.string().optional(),description:o.string().optional(),template:o.string().default(``),css:o.string().default(``),js:o.string().default(``),assets:o.record(o.string(),o.object({type:o.string().default(``),file:o.string().default(``)})).optional(),settings:o.record(o.string(),o.looseObject({type:o.string().default(``),name:o.string().default(``)})).optional()});async function c(e,t){let n=r.resolve(e),i=`${n}/.ekg`,o=`${i}/state.json`,s=await l(n),c=`${s}/manifest.json`,u=a(new URL(t?`..`:`.`,import.meta.url)),d=t?u:`${u}/../../..`,f=t?`${u}/client`:u;return{root:n,ekg:i,state:o,widget:s,manifest:c,node_modules:d,server:f,relative:e=>r.relative(f,e)}}async function l(e){for await(let t of n.glob(`${e}/**/manifest.json`))return r.dirname(t);throw`No manifest.json found in ${e}`}async function u(e,t){let r=[`devkit.d.ts`,`devkit.js`,`widget-worker.js`,`emscripten-module.wasm`];await n.mkdir(e,{recursive:!0});try{await n.writeFile(`${e}/state.json`,`{}`,{flag:`wx`})}catch{}let i=await Promise.allSettled(r.map(t=>n.stat(`${e}/${t}`))),a=i.every(e=>e.status===`fulfilled`&&e.value.isFile());if(!(i.every(e=>e.status===`fulfilled`&&e.value.isFile()&&e.value.mtimeMs>Date.now()-6048e5)&&!t))try{await Promise.all(r.map(t=>d(e,t)))}catch(e){if(a&&!t)console.log(`Failed to update EKG types and devkit binary. Continuing with existing files.`);else throw`Failed to download devkit: ${e}`}}async function d(e,t){let r=await(await fetch(`https://ekg.gg/assets/js/${t}`)).bytes();await n.writeFile(`${e}/${t}`,r)}async function f(e,t){let r=(e,t)=>`/// <reference path="./devkit.d.ts" />
2
+ import e from"yargs";import{hideBin as t}from"yargs/helpers";import n from"node:fs/promises";import r from"node:path";import{createServer as i}from"vite";import{fileURLToPath as a}from"node:url";import{z as o}from"zod/v4";o.object({width:o.number().min(0).default(1e3),height:o.number().min(0).default(1e3),settings:o.record(o.string(),o.unknown()).default({})});const s=o.object({$schema:o.literal(`https://ekg.gg/schemas/manifest.json`).default(`https://ekg.gg/schemas/manifest.json`),name:o.string().optional(),version:o.string().optional(),description:o.string().optional(),template:o.string().default(``),css:o.string().default(``),js:o.string().default(``),assets:o.record(o.string(),o.object({type:o.string().default(``),file:o.string().default(``)})).optional(),settings:o.record(o.string(),o.looseObject({type:o.string().default(``),name:o.string().default(``)})).optional()});async function c(e,t){let n=r.resolve(e),i=await l(n),o=`${i}/manifest.json`,s=a(new URL(`..`,import.meta.url)),c=t?s:`${s}/../..`,u=t?`${s}/client`:`${s}/dist`,d=e=>r.relative(u,e),f=`${s}/.runtime`;return{root:n,ekg:f,state:`${f}/state.json`,widget:i,manifest:o,node_modules:c,server:u,relative:d}}async function l(e){for await(let t of n.glob(`${e}/**/manifest.json`))return r.dirname(t);throw`No manifest.json found in ${e}`}async function u(e,t){let r=[`devkit.d.ts`,`devkit.js`,`widget-worker.js`,`emscripten-module.wasm`];await n.mkdir(e,{recursive:!0});try{await n.writeFile(`${e}/state.json`,`{}`,{flag:`wx`})}catch{}let i=await Promise.allSettled(r.map(t=>n.stat(`${e}/${t}`))),a=i.every(e=>e.status===`fulfilled`&&e.value.isFile());if(!(i.every(e=>e.status===`fulfilled`&&e.value.isFile()&&e.value.mtimeMs>Date.now()-6048e5)&&!t))try{await Promise.all(r.map(t=>d(e,t)))}catch(e){if(a&&!t)console.log(`Failed to update EKG types and devkit binary. Continuing with existing files.`);else throw`Failed to download devkit: ${e}`}}async function d(e,t){let r=await(await fetch(`https://ekg.gg/assets/js/${t}`)).bytes();await n.writeFile(`${e}/${t}`,r)}async function f(e,t){let r=(e,t)=>`/// <reference path="./devkit.d.ts" />
3
3
 
4
4
  namespace EKG {
5
5
  ${e===`any`?"// Run `ekg dev` for proper types":``}
@@ -9,7 +9,7 @@ namespace EKG {
9
9
  interface WidgetSettings ${t}
10
10
  }
11
11
  `,i=(e,t)=>`{\n${Object.entries(e).map(([e,n])=>` ${e}: ${t(n)}`).join(`
12
- `)}\n }`,a=e=>{if(e.choices)return Object.keys(e.choices).map(e=>JSON.stringify(e)).join(` | `);switch(e.type){case`string`:case`color`:case`image`:case`decimal`:return`string`;case`string_array`:case`color_array`:case`decimal_array`:return`string[]`;case`integer`:return`number`;case`integer_array`:return`number[]`;case`boolean`:return`boolean`;default:return`any`}};try{let o=await n.readFile(t),c=s.parse(JSON.parse(o.toString(`utf8`))),l=i(c.assets??{},()=>`string`),u=i(c.settings??{},a);await n.writeFile(`${e}/types.d.ts`,r(l,u))}catch{try{await n.writeFile(`${e}/types.d.ts`,r(`any`,`any`),{flag:`wx`})}catch{}}}async function p(e,t){let a=await c(e,t);await u(a.ekg);let o=await i({configFile:t?`vite.config.ts`:!1,root:a.server,server:{fs:{allow:[a.node_modules,a.ekg,a.widget]}},plugins:[{name:`EKG Dev Kit`,configureServer(e){e.ws.on(`ekg:state`,e=>{n.writeFile(a.state,JSON.stringify(e,null,2))}),e.ws.on(`ekg:manifest`,e=>{n.writeFile(a.manifest,JSON.stringify(e,null,2))})},resolveId(e){if(e.startsWith(`ekg:`))return`\0${e}`},load(e){switch(e){case`\0ekg:devkit`:return`export { loadWidget } from '/@fs${a.ekg}/devkit.js'`;case`\0ekg:widget`:return`
12
+ `)}\n }`,a=e=>{if(e.choices)return Object.keys(e.choices).map(e=>JSON.stringify(e)).join(` | `);switch(e.type){case`string`:case`color`:case`image`:case`decimal`:return`string`;case`string_array`:case`color_array`:case`decimal_array`:return`string[]`;case`integer`:return`number`;case`integer_array`:return`number[]`;case`boolean`:return`boolean`;default:return`any`}};try{let o=await n.readFile(t),c=s.parse(JSON.parse(o.toString(`utf8`))),l=i(c.assets??{},()=>`string`),u=i(c.settings??{},a);await n.writeFile(`${e}/types.d.ts`,r(l,u))}catch{try{await n.writeFile(`${e}/types.d.ts`,r(`any`,`any`),{flag:`wx`})}catch{}}}async function p(e,t){let a=await c(e,t);await u(a.ekg);let o=await i({configFile:t?`vite.config.ts`:!1,root:a.server,server:{fs:{allow:[a.node_modules,a.widget]}},plugins:[{name:`EKG Dev Kit`,configureServer(e){e.ws.on(`ekg:state`,e=>{n.writeFile(a.state,JSON.stringify(e,null,2))}),e.ws.on(`ekg:manifest`,e=>{n.writeFile(a.manifest,JSON.stringify(e,null,2))})},resolveId(e){if(e.startsWith(`ekg:`))return`\0${e}`},load(e){switch(e){case`\0ekg:devkit`:return`export { loadWidget } from '/@fs${a.ekg}/devkit.js'`;case`\0ekg:widget`:return`
13
13
  export { default as state } from '/@fs${a.state}?raw'
14
14
 
15
15
  export const widget = import.meta.glob('./**', {
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@ekg_gg/devkit",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "type": "module",
5
5
  "bin": "dist/index.mjs",
6
+ "types": ".runtime/types.d.ts",
6
7
  "scripts": {
7
8
  "dev": "bun run cli/index.ts dev --dev",
8
9
  "build": "tsdown && vite build"