@unbound-app/rollup-plugin-hermes 1.1.2 → 1.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.
- package/dist/index.js +2 -2
- package/dist/manifest.js +1 -0
- package/package.json +4 -9
- package/hermesc-versions.json +0 -4
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("fs/promises"),r=require("child_process"),
|
|
2
|
-
${e}`)}h.trim()&&o.warn(h.trim());let w=await (0,e.readFile)(
|
|
1
|
+
"use strict";const e=require("fs/promises"),r=require("child_process"),i=require("crypto"),t=require("path"),s=require("fs"),n=require("os"),o=require("./manifest");async function compile(o,a,l){let c="win32"===process.platform?".exe":"",d=(0,t.resolve)(a,process.platform,"hermesc"+c);if(!(0,s.existsSync)(d))return o.warn(`The hermesc binary is either not supported for your OS or cannot be found at ${d}. Skipping.`),null;let m=(0,t.join)((0,n.tmpdir)(),"hermesc");(0,s.existsSync)(m)||await (0,e.mkdir)(m);let u=(0,t.join)(m,(0,i.randomBytes)(8).readUint32LE(0)+".bundle"),f=["--emit-binary","--out",u,"-Wno-direct-eval","-Wno-undefined-variable",l],{code:p,stderr:h}=await new Promise((e,i)=>{let t=(0,r.spawn)(d,f,{shell:!0}),s="";t.stdout.setEncoding("utf8"),t.stdout.on("data",o.debug),t.stderr.setEncoding("utf8"),t.stderr.on("data",e=>s+=e),t.on("error",i),t.on("close",r=>e({code:r,stderr:s}))});if(0!==p){let e=h.trim()||`hermesc exited with code ${p}.`;o.error(`hermesc failed to compile:
|
|
2
|
+
${e}`)}h.trim()&&o.warn(h.trim());let w=await (0,e.readFile)(u);return await (0,e.rm)(u,{force:!0}),w}function hermesc(r){let a;return{name:"hermesc",async generateBundle(l,c,d){let m=l.file?.split("/");if(!m)return;let u=m.pop(),f=u.split(".").shift(),p=c[u];if(!p)return;a??=r?.hermesc?[{version:null,dir:r.hermesc}]:await (0,o.resolveHermesTargets)(this,r??{});let h=(0,t.join)((0,n.tmpdir)(),"hermesc");(0,s.existsSync)(h)||await (0,e.mkdir)(h);let w=(0,t.join)(h,(0,i.randomBytes)(8).readUint32LE(0)+".js");for(let r of(await (0,e.writeFile)(w,p.code,"utf-8"),a)){if(!r.dir){this.warn(`hermesc for bytecode version ${r.version} could not be resolved from the manifest cache. Skipping.`);continue}let e=null===r.version?`${f}.bundle`:`${f}.${r.version}.bundle`;this.info(`${l.file} -> ${l.file.replace(u,e)}...`);let i=await compile(this,r.dir,w);i&&(this.emitFile({type:"asset",fileName:e,source:i}),this.info(`( ͡\xb0 ͜ʖ ͡\xb0) Bytecode compiled to ${e}`))}await (0,e.rm)(w,{force:!0})},async buildEnd(){let r=(0,t.join)((0,n.tmpdir)(),"hermesc");(0,s.existsSync)(r)&&await (0,e.rm)(r,{recursive:!0,force:!0})}}}module.exports=hermesc;
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function _export(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{default:function(){return n},fetchManifest:function(){return fetchManifest},resolveHermesTargets:function(){return resolveHermesTargets}});const e=require("child_process"),t=require("fs"),r=require("fs/promises"),a=require("path"),i=require("os");function defaultCacheDir(){return(0,a.resolve)(process.cwd(),"node_modules",".cache","rollup-plugin-hermes")}async function readCachedManifest(e){let i=(0,a.join)(e,"manifest.json");if(!(0,t.existsSync)(i))return null;try{return JSON.parse(await (0,r.readFile)(i,"utf-8"))}catch{return null}}async function readStoredEtag(e){let i=(0,a.join)(e,"etag");return(0,t.existsSync)(i)&&(await (0,r.readFile)(i,"utf-8")).trim()||null}async function persistManifest(e,t,i){await (0,r.mkdir)(e,{recursive:!0}),await (0,r.writeFile)((0,a.join)(e,"manifest.json"),t,"utf-8"),i&&await (0,r.writeFile)((0,a.join)(e,"etag"),i,"utf-8")}async function fetchManifest(e,t={},r={}){let a;let i=r.fetch??fetch,n=t.manifestUrl??"https://raw.githubusercontent.com/unbound-app/hermesc/main/manifest.json",s=t.cacheDir??defaultCacheDir(),c=await readStoredEtag(s);try{let e={};c&&(e["If-None-Match"]=c),a=await i(n,{headers:e})}catch(r){let t=await readCachedManifest(s);if(t)return e.warn(`Failed to fetch hermesc manifest (${r?.message??r}). Using cached manifest.`),t;return e.error(`Failed to fetch hermesc manifest from ${n} and no cached copy is available: ${r?.message??r}`)}if(304===a.status)return await readCachedManifest(s)||e.error(`hermesc manifest server returned 304 but no cached manifest exists at ${s}.`);if(!a.ok){let t=await readCachedManifest(s);return t?(e.warn(`hermesc manifest request failed with status ${a.status}. Using cached manifest.`),t):e.error(`Failed to fetch hermesc manifest from ${n}: ${a.status}`)}let o=await a.text(),f=JSON.parse(o);return await persistManifest(s,o,a.headers.get("etag")),f}async function downloadVersion(n,s){let c=(0,t.mkdtempSync)((0,a.join)((0,i.tmpdir)(),"hermesc-"));try{(0,e.execSync)(`npm pack @unbound-app/hermesc@${n} --silent --pack-destination "${c}"`,{stdio:"pipe"});let i=(await (0,r.readdir)(c)).find(e=>e.endsWith(".tgz"));if(!i)throw Error(`npm pack did not produce a tarball for ${n}.`);(0,e.execFileSync)("tar",["-xzf",i,"-C",c],{cwd:c});let o=(0,a.join)(c,"package");for(let e of(await (0,r.mkdir)(s,{recursive:!0}),await (0,r.readdir)(o))){let i=(0,a.join)(s,e);(0,t.rmSync)(i,{recursive:!0,force:!0}),await (0,r.rename)((0,a.join)(o,e),i)}}finally{(0,t.rmSync)(c,{recursive:!0,force:!0})}if("win32"!==process.platform){let e=(0,a.resolve)(s,process.platform,"hermesc");(0,t.existsSync)(e)&&await (0,r.chmod)(e,493)}}async function resolveHermesTargets(e,r={},i={}){let n=i.download??downloadVersion,s=r.cacheDir??defaultCacheDir(),c=r.versions??3,o=await fetchManifest(e,r,i),f="win32"===process.platform?".exe":"",l=[];for(let r of o.latest.slice(0,c)){let i=o.versions[String(r)];if(!i){e.warn(`hermesc manifest is missing an entry for bytecode version ${r}. Skipping.`);continue}let c=(0,a.join)(s,"hermesc",i.npm),u=(0,a.resolve)(c,process.platform,"hermesc"+f);if(!(0,t.existsSync)(u))try{await n(i.npm,c)}catch(t){e.warn(`Failed to download hermesc ${i.npm} (bytecode ${r}): ${t?.message??t}. Skipping.`),l.push({version:r,dir:null});continue}l.push({version:r,dir:c})}return l}const n={fetchManifest,resolveHermesTargets};
|
package/package.json
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbound-app/rollup-plugin-hermes",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Compile JavaScript bundles to hermes binaries.",
|
|
5
|
+
"repository": "https://github.com/unbound-app/rollup-plugin-hermes",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"scripts": {
|
|
7
8
|
"build": "swc src -d dist -D --delete-dir-on-start --strip-leading-paths",
|
|
8
|
-
"test": "node --test"
|
|
9
|
-
"update-hermesc": "node scripts/update-hermesc.mjs"
|
|
9
|
+
"test": "node --test"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
|
-
"dist
|
|
13
|
-
"hermesc-versions.json"
|
|
12
|
+
"dist/**"
|
|
14
13
|
],
|
|
15
14
|
"publishConfig": {
|
|
16
15
|
"access": "public"
|
|
@@ -22,9 +21,5 @@
|
|
|
22
21
|
"@swc/core": "^1.7.18",
|
|
23
22
|
"@types/node": "^22.5.0",
|
|
24
23
|
"rollup": "^4.21.0"
|
|
25
|
-
},
|
|
26
|
-
"dependencies": {
|
|
27
|
-
"hermesc-94": "npm:@unbound-app/hermesc@94.0.0",
|
|
28
|
-
"hermesc-96": "npm:@unbound-app/hermesc@96.0.0"
|
|
29
24
|
}
|
|
30
25
|
}
|
package/hermesc-versions.json
DELETED