flintmaker 0.1.0 → 0.2.0

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,17 @@
1
+ import{c as u,d}from"./chunk-K3ZZ2VJH.js";import{spawn as z,spawnSync as Y}from"node:child_process";import{accessSync as O,chmodSync as K,closeSync as q,constants as F,existsSync as I,mkdirSync as T,openSync as G,readFileSync as U,realpathSync as Z,rmSync as B,writeFileSync as w}from"node:fs";import{homedir as D}from"node:os";var f="flintmaker",Q=`https://registry.npmjs.org/${f}/latest`,X=1440*60*1e3,_=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/,x=n=>typeof n=="string"&&_.test(n);function nn(n,e){let r=_.exec(n),t=_.exec(e);if(!r||!t)return 0;for(let a=1;a<=3;a++){let l=Number(r[a])-Number(t[a]);if(l)return l>0?1:-1}let o=r[4],s=t[4];if(o===s)return 0;if(o===void 0)return 1;if(s===void 0)return-1;let i=o.split("."),c=s.split(".");for(let a=0;a<Math.max(i.length,c.length);a++){if(i[a]===void 0)return-1;if(c[a]===void 0)return 1;if(i[a]===c[a])continue;let l=/^\d+$/.test(i[a]),m=/^\d+$/.test(c[a]);return l&&m?Number(i[a])>Number(c[a])?1:-1:l!==m?l?-1:1:i[a]>c[a]?1:-1}return 0}var v=(n,e)=>x(n)&&x(e)&&nn(n,e)>0,P=n=>!!n&&n!=="0"&&n.toLowerCase()!=="false";function en(n=process.env,e=""){return P(n.FLINT_NO_UPDATE)?"FLINT_NO_UPDATE is set":P(n.CI)?"running in CI":P(n.NO_UPDATE_NOTIFIER)?"NO_UPDATE_NOTIFIER is set":!x(e)||e.startsWith("0.0.0")?"development build":null}var $=(n=process.env)=>n.FLINT_UPDATE_DIR||d().join(D(),".flintmaker");function b(n=$()){try{let e=JSON.parse(U(d().join(n,"update.json"),"utf8"));return e&&typeof e=="object"?e:{}}catch{return{}}}function p(n,e=$()){try{T(e,{recursive:!0,mode:448}),w(d().join(e,"update.json"),JSON.stringify(n,null,2)+`
2
+ `)}catch{}}var tn=(n,e=Date.now())=>!n.checkedAt||e-n.checkedAt>=X||n.checkedAt>e;function rn(n,e={}){let r=e.platform??process.platform,t=d(r),o=u(r),s=e.env??process.env,i=e.exists??I,c=g=>o?t.normalize(g).toLowerCase():t.normalize(g),a=(g,W)=>c(g).startsWith(c(W).replace(/[\\/]+$/,"")+t.sep),l=t.normalize(n);if(c(l).split(t.sep).includes("_npx"))return{kind:"npx"};let N=`${t.sep}node_modules${t.sep}${f}${t.sep}`,j=c(l).lastIndexOf(c(N));if(j<0)return{kind:"dev"};let J=l.slice(0,j+N.length-f.length-2),h=t.dirname(J),V=e.home??D(),M=t.join(V,".flintmaker");if(a(l,M))return{kind:"flintmaker",prefix:M};if(o){let g=s.APPDATA?t.join(s.APPDATA,"npm"):null;return g&&c(h)===c(g)||i(t.join(h,"npm.cmd"))||i(t.join(h,"node.exe"))?{kind:"npm-global",prefix:h}:{kind:"local"}}return t.basename(h)==="lib"?{kind:"npm-global",prefix:t.dirname(h)}:{kind:"local"}}var E=(n,e=process.platform)=>u(e)?d(e).join(n,"node_modules"):d(e).join(n,"lib","node_modules");function on(n,e){let r=d(e),t=r.dirname(n);return u(e)?r.join(t,"node_modules","npm","bin","npm-cli.js"):r.join(t,"..","lib","node_modules","npm","bin","npm-cli.js")}function S(n,e,r={}){if(n.kind!=="flintmaker"&&n.kind!=="npm-global"||!x(e))return null;let t=r.platform??process.platform,o=d(t),s=r.exists??I,i=["install","-g","--prefix",n.prefix,"--no-fund","--no-audit",`${f}@${e}`],c=[];n.kind==="flintmaker"&&c.push(u(t)?o.join(n.prefix,"node","node.exe"):o.join(n.prefix,"node","bin","node")),c.push(r.execPath??process.execPath);for(let a of c){let l=on(a,t);if(s(a)&&s(l))return{file:a,args:[l,...i],options:{windowsHide:!0}}}if(u(t)){let a=i.map(l=>/[\s&()^]/.test(l)?`"${l}"`:l).join(" ");return{file:r.env?.ComSpec||"cmd.exe",args:["/d","/s","/c",`"npm ${a}"`],options:{windowsVerbatimArguments:!0,windowsHide:!0}}}return{file:"npm",args:i,options:{}}}function H(n,e=process.platform){if(n.kind!=="flintmaker"&&n.kind!=="npm-global")return!1;try{return O(E(n.prefix,e),F.W_OK),u(e)||O(d(e).join(n.prefix,"bin"),F.W_OK),!0}catch{return!1}}function A(){try{return rn(Z(process.argv[1]??""))}catch{return{kind:"dev"}}}var k=(n,e)=>n.kind==="flintmaker"?`Update available v${e}: run flint update`:n.kind==="npx"?`Update available v${e}: run npx flintmaker@latest`:`Update available v${e}: run npm i -g ${f}`;async function C(n=3e3,e=process.env.FLINT_UPDATE_URL||Q){try{let r=await fetch(e,{signal:AbortSignal.timeout(n),headers:{accept:"application/json"}});if(!r.ok)return null;let t=await r.json();return x(t?.version)?t.version:null}catch{return null}}function sn(n){let e="dist/flint.js";if(typeof n=="string")e=n;else if(n&&typeof n=="object"){let r=n,t=r.flint??r.flintmaker??Object.values(r)[0];typeof t=="string"&&(e=t)}return e.replace(/^\.[\\/]/,"")}var y=["flint","flintmaker"];function an(n,e=process.platform){let r=d(e);return u(e)?y.flatMap(t=>["",".cmd",".ps1"].map(o=>r.join(n,t+o))):y.map(t=>r.join(n,"bin",t))}function cn(n,e,r=process.platform){let t=d(r);if(u(r)){let i=["@echo off","rem FlintMaker CLI launcher (written by https://flintmaker.com/install.ps1)","setlocal",'set "FM_HOME=%~dp0"','set "FM_NODE=node"','if exist "%FM_HOME%node\\node.exe" set "FM_NODE=%FM_HOME%node\\node.exe"','if exist "%FM_HOME%node\\node.exe" set "PATH=%FM_HOME%node;%PATH%"',`"%FM_NODE%" "%FM_HOME%node_modules\\flintmaker\\${e.replace(/\//g,"\\")}" %*`,""].join(`\r
3
+ `);return y.map(c=>({path:t.join(n,`${c}.cmd`),content:i}))}let o=i=>i.replace(/[\\"$`]/g,"\\$&"),s=`#!/bin/sh
4
+ # FlintMaker CLI launcher (written by https://flintmaker.com/install.sh)
5
+ FM_HOME="${o(n)}"
6
+ ENTRY="$FM_HOME/lib/node_modules/flintmaker/${o(e)}"
7
+ if [ -x "$FM_HOME/node/bin/node" ]; then
8
+ PATH="$FM_HOME/node/bin:$PATH"; export PATH
9
+ exec "$FM_HOME/node/bin/node" "$ENTRY" "$@"
10
+ fi
11
+ if command -v node >/dev/null 2>&1; then exec node "$ENTRY" "$@"; fi
12
+ echo "flint: Node.js 20+ is missing. Reinstall: curl -fsSL https://flintmaker.com/install.sh | sh" >&2
13
+ exit 127
14
+ `;return y.map(i=>({path:t.join(n,"bin",i),content:s,mode:493}))}function L(n){for(let e of an(n))B(e,{force:!0})}function ln(n,e=process.platform){let r=d(e),t;try{t=JSON.parse(U(r.join(E(n,e),f,"package.json"),"utf8")).bin}catch{}L(n);for(let o of cn(n,sn(t),e))T(r.dirname(o.path),{recursive:!0}),w(o.path,o.content,o.mode?{mode:o.mode}:{}),o.mode&&K(o.path,o.mode)}function R(n,e,r="inherit"){let t=S(n,e);if(!t)return-1;let o=n.kind==="flintmaker";o&&L(n.prefix);let s=-1;try{s=Y(t.file,t.args,{...t.options,stdio:["ignore",r,r],env:{...process.env,npm_config_update_notifier:"false"}}).status??-1}finally{if(o)try{ln(n.prefix)}catch(i){typeof r=="number"&&w(r,`could not write launchers: ${i.message}
15
+ `),s=s===0?1:s}}return s}function gn(n){if(!x(n))return 2;let e=R(A(),n,"inherit");return p({...b(),attempted:n,...e===0?{installed:n,failed:void 0}:{failed:n}}),e}function dn(n,e){return new Promise(r=>{let t="ignore";try{t=G(e,"a"),w(t,`
16
+ [${new Date().toISOString()}] updating to ${f}@${n}
17
+ `)}catch{t="ignore"}try{let o=z(process.execPath,[process.argv[1],"__update",n],{detached:!0,windowsHide:!0,stdio:["ignore",t,t],env:{...process.env,FLINT_NO_UPDATE:"1"}});o.on("error",()=>r(-1)),o.on("exit",s=>r(s??-1)),o.unref()}catch{r(-1)}finally{typeof t=="number"&&q(t)}})}async function hn(n){let e=n.env??process.env;if(en(e,n.current))return"disabled";let r=n.dir??$(e),t=n.now??Date.now(),o=b(r),s=n.install??A();if(!tn(o,t)){let m=o.failed??(s.kind==="flintmaker"||s.kind==="npm-global"?void 0:o.latest);return m&&v(m,n.current)?(n.notify(k(s,m),"info"),"hint"):"throttled"}let i=await(n.fetchLatest??C)();if(!i)return"offline";let c={...o,checkedAt:t,latest:i};return v(i,n.current)?!((n.run||H(s))&&S(s,i)!==null)||o.attempted===i?(p(c,r),n.notify(k(s,i),"info"),"hint"):(p({...c,attempted:i},r),await n.preload?.().catch(()=>{}),await(n.run??dn)(i,d().join(r,"update.log"))===0?(p({...c,attempted:i,installed:i,failed:void 0},r),n.notify(`Updated to v${i} \u2014 restart flint to use it`,"ok"),"updated"):(p({...c,attempted:i,failed:i},r),n.notify(k(s,i),"info"),"failed")):(p({checkedAt:t,latest:i},r),"current")}async function xn(n,e){let r=await C(15e3);if(!r)return e("Could not reach the npm registry. Check your connection and try again."),1;if(!v(r,n))return e(`flint is up to date (v${n}).`),p({...b(),checkedAt:Date.now(),latest:r}),0;let t=A();if(!H(t)||!S(t,r))return t.kind==="npm-global"?e(`v${r} is available, but ${E(t.prefix)} is not writable by you. Run: npm i -g ${f} (without sudo, from a user-owned Node such as nvm), or use the FlintMaker installer.`):e(k(t,r).replace(/^Update available /,"Available: ")),1;e(`Updating flint v${n} \u2192 v${r}\u2026`);let o=R(t,r,"inherit"),s=o===0;return p({...b(),checkedAt:Date.now(),latest:r,attempted:r,...s?{installed:r,failed:void 0}:{failed:r}}),e(s?`Updated to v${r}.`:`Update failed (exit ${o}). Try: npm i -g ${f}`),s?0:1}export{X as CHECK_EVERY_MS,f as PACKAGE,Q as REGISTRY_URL,hn as autoUpdate,nn as compareVersions,A as currentInstall,rn as detectInstall,C as fetchLatest,E as globalModules,R as installVersion,v as isNewer,x as isVersion,sn as launcherEntry,cn as launcherFiles,an as launcherPaths,k as manualHint,b as readState,dn as runDetached,tn as shouldCheck,$ as stateDir,S as updateCommand,en as updateDisabled,xn as updateNow,gn as updateWorker,H as writable,ln as writeLaunchers,p as writeState};