@zktx.io/sui-move-builder 0.1.2 → 0.1.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.
package/dist/index.cjs CHANGED
@@ -1,15 +1,15 @@
1
- "use strict";var j=Object.create;var v=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var U=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var A=(n,e)=>{for(var t in e)v(n,t,{get:e[t],enumerable:!0})},M=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of L(e))!B.call(n,i)&&i!==t&&v(n,i,{get:()=>e[i],enumerable:!(s=W(e,i))||s.enumerable});return n};var O=(n,e,t)=>(t=n!=null?j(U(n)):{},M(e||!n||!n.__esModule?v(t,"default",{value:n,enumerable:!0}):t,n)),T=n=>M(v({},"__esModule",{value:!0}),n);var X={};A(X,{Fetcher:()=>g,GitHubFetcher:()=>p,Resolver:()=>y,buildMovePackage:()=>q,compileRaw:()=>Z,getSuiMoveVersion:()=>V,getSuiVersion:()=>K,getWasmBindings:()=>Q,initMoveCompiler:()=>J,parseToml:()=>h,resolve:()=>b});module.exports=T(X);var g=class{async fetch(e,t,s){throw new Error("Not implemented")}async fetchFile(e,t,s){throw new Error("Not implemented")}},p=class extends g{constructor(){super(),this.cache=new Map}async fetch(e,t,s){let{owner:i,repo:o}=this.parseGitUrl(e);if(!i||!o)throw new Error(`Invalid git URL: ${e}`);let c=`https://api.github.com/repos/${i}/${o}/git/trees/${t}?recursive=1`,l;try{let d=await fetch(c);if(!d.ok)throw d.status===403||d.status===429?new Error("GitHub API rate limit exceeded."):new Error(`Failed to fetch tree: ${d.statusText}`);l=await d.json()}catch{return{}}let r={},a=[];for(let d of l.tree){if(d.type!=="blob")continue;let u=d.path;if(s){if(!d.path.startsWith(s))continue;u=d.path.slice(s.length),u.startsWith("/")&&(u=u.slice(1))}if(!u.endsWith(".move")&&u!=="Move.toml")continue;let f=`https://raw.githubusercontent.com/${i}/${o}/${t}/${d.path}`,k=this.fetchContent(f).then(x=>{x&&(r[u]=x)});a.push(k)}return await Promise.all(a),r}async fetchFile(e,t,s){let{owner:i,repo:o}=this.parseGitUrl(e);if(!i||!o)throw new Error(`Invalid git URL: ${e}`);let c=`https://raw.githubusercontent.com/${i}/${o}/${t}/${s}`;return this.fetchContent(c)}async fetchContent(e){if(this.cache.has(e))return this.cache.get(e)??null;try{let t=await fetch(e);if(!t.ok)return null;let s=await t.text();return this.cache.set(e,s),s}catch{return null}}parseGitUrl(e){try{let s=new URL(e).pathname.split("/").filter(i=>i);if(s.length>=2){let i=s[1];return i.endsWith(".git")&&(i=i.slice(0,-4)),{owner:s[0],repo:i}}}catch{}return{owner:null,repo:null}}};function N(n){let e=!1,t="";for(let s=0;s<n.length;s++){let i=n[s];if((i==='"'||i==="'")&&(!e||i===t)&&(e=!e,t=i),!e&&i==="#")return n.slice(0,s)}return n}function w(n){let e=n.trim();if(!e)return"";if(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1);if(e==="true")return!0;if(e==="false")return!1;let t=Number(e);return Number.isNaN(t)?e:t}function E(n){let e={},t=n.trim().replace(/^\{/,"").replace(/\}$/,""),s="",i=!1,o="",c=[];for(let l=0;l<t.length;l++){let r=t[l];if((r==='"'||r==="'")&&(!i||r===o)&&(i=!i,o=r),!i&&r===","){c.push(s),s="";continue}s+=r}s.trim()&&c.push(s);for(let l of c){let r=l.indexOf("=");if(r===-1)continue;let a=l.slice(0,r).trim(),d=l.slice(r+1).trim();e[a]=w(d)}return e}function h(n){let e={package:{},dependencies:{},addresses:{}},t=null,s=n.split(/\r?\n/);for(let i of s){let o=N(i).trim();if(!o)continue;let c=o.match(/^\[([^\]]+)\]$/);if(c){t=c[1].trim();continue}let l=o.indexOf("=");if(l===-1||!t)continue;let r=o.slice(0,l).trim(),a=o.slice(l+1).trim();t==="package"?e.package[r.replace(/-/g,"_")]=w(a):t==="dependencies"?a.startsWith("{")?e.dependencies[r]=E(a):e.dependencies[r]=w(a):t==="addresses"&&(e.addresses[r]=w(a))}return e}var y=class{constructor(e){this.fetcher=e,this.globalAddresses={},this.visited=new Set,this.dependencyFiles={},this.systemDepsLoaded=new Set}async resolve(e,t){let s=h(e);s.addresses&&this.mergeAddresses(s.addresses),s.dependencies&&await this.resolveDeps(s.dependencies),await this.injectSystemDeps(s.dependencies);let i=this.reconstructMoveToml(s,this.globalAddresses),o={...t,"Move.toml":i};return{files:JSON.stringify(o),dependencies:JSON.stringify(this.dependencyFiles)}}mergeAddresses(e){for(let[t,s]of Object.entries(e))this.globalAddresses[t]=this.normalizeAddress(s)}normalizeAddress(e){if(!e)return e;let t=e;return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}async resolveDeps(e,t=null){for(let[s,i]of Object.entries(e)){let o,c,l;if(i.git)o=i.git,c=i.rev,l=i.subdir;else if(i.local){if(!t)continue;o=t.git,c=t.rev,l=this.resolvePath(t.subdir||"",i.local)}else continue;let r=`${o}|${c}|${l||""}`;if(this.visited.has(r))continue;this.visited.add(r);let a=await this.fetcher.fetch(o,c,l),d=null;for(let[u,f]of Object.entries(a))if(u.endsWith("Move.toml")){d=f;break}if(d){let u=h(d);u.addresses&&this.mergeAddresses(u.addresses),u.dependencies&&await this.resolveDeps(u.dependencies,{git:o,rev:c,subdir:l})}for(let[u,f]of Object.entries(a))if(u.endsWith(".move")||u.endsWith("Move.toml")){let k=`dependencies/${s}/${u}`;this.dependencyFiles[k]=f}}}resolvePath(e,t){let s=e.split("/").filter(o=>o&&o!=="."),i=t.split("/").filter(o=>o&&o!==".");for(let o of i)o===".."?s.pop():s.push(o);return s.join("/")}reconstructMoveToml(e,t){let s=`[package]
1
+ "use strict";var j=Object.create;var v=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var U=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var A=(s,e)=>{for(var t in e)v(s,t,{get:e[t],enumerable:!0})},M=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of W(e))!B.call(s,i)&&i!==t&&v(s,i,{get:()=>e[i],enumerable:!(n=L(e,i))||n.enumerable});return s};var O=(s,e,t)=>(t=s!=null?j(U(s)):{},M(e||!s||!s.__esModule?v(t,"default",{value:s,enumerable:!0}):t,s)),T=s=>M(v({},"__esModule",{value:!0}),s);var Z={};A(Z,{Fetcher:()=>g,GitHubFetcher:()=>p,Resolver:()=>y,buildMovePackage:()=>J,compileRaw:()=>Q,getSuiMoveVersion:()=>q,getSuiVersion:()=>V,getWasmBindings:()=>K,initMoveCompiler:()=>G,parseToml:()=>h,resolve:()=>b});module.exports=T(Z);var g=class{async fetch(e,t,n){throw new Error("Not implemented")}async fetchFile(e,t,n){throw new Error("Not implemented")}},p=class extends g{constructor(){super(),this.cache=new Map}async fetch(e,t,n){let{owner:i,repo:o}=this.parseGitUrl(e);if(!i||!o)throw new Error(`Invalid git URL: ${e}`);let c=`https://api.github.com/repos/${i}/${o}/git/trees/${t}?recursive=1`,l;try{let d=await fetch(c);if(!d.ok)throw d.status===403||d.status===429?new Error("GitHub API rate limit exceeded."):new Error(`Failed to fetch tree: ${d.statusText}`);l=await d.json()}catch{return{}}let r={},a=[];for(let d of l.tree){if(d.type!=="blob")continue;let u=d.path;if(n){if(!d.path.startsWith(n))continue;u=d.path.slice(n.length),u.startsWith("/")&&(u=u.slice(1))}if(!u.endsWith(".move")&&u!=="Move.toml")continue;let f=`https://raw.githubusercontent.com/${i}/${o}/${t}/${d.path}`,k=this.fetchContent(f).then(x=>{x&&(r[u]=x)});a.push(k)}return await Promise.all(a),r}async fetchFile(e,t,n){let{owner:i,repo:o}=this.parseGitUrl(e);if(!i||!o)throw new Error(`Invalid git URL: ${e}`);let c=`https://raw.githubusercontent.com/${i}/${o}/${t}/${n}`;return this.fetchContent(c)}async fetchContent(e){if(this.cache.has(e))return this.cache.get(e)??null;try{let t=await fetch(e);if(!t.ok)return null;let n=await t.text();return this.cache.set(e,n),n}catch{return null}}parseGitUrl(e){try{let n=new URL(e).pathname.split("/").filter(i=>i);if(n.length>=2){let i=n[1];return i.endsWith(".git")&&(i=i.slice(0,-4)),{owner:n[0],repo:i}}}catch{}return{owner:null,repo:null}}};function N(s){let e=!1,t="";for(let n=0;n<s.length;n++){let i=s[n];if((i==='"'||i==="'")&&(!e||i===t)&&(e=!e,t=i),!e&&i==="#")return s.slice(0,n)}return s}function w(s){let e=s.trim();if(!e)return"";if(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1);if(e==="true")return!0;if(e==="false")return!1;let t=Number(e);return Number.isNaN(t)?e:t}function E(s){let e={},t=s.trim().replace(/^\{/,"").replace(/\}$/,""),n="",i=!1,o="",c=[];for(let l=0;l<t.length;l++){let r=t[l];if((r==='"'||r==="'")&&(!i||r===o)&&(i=!i,o=r),!i&&r===","){c.push(n),n="";continue}n+=r}n.trim()&&c.push(n);for(let l of c){let r=l.indexOf("=");if(r===-1)continue;let a=l.slice(0,r).trim(),d=l.slice(r+1).trim();e[a]=w(d)}return e}function h(s){let e={package:{},dependencies:{},addresses:{}},t=null,n=s.split(/\r?\n/);for(let i of n){let o=N(i).trim();if(!o)continue;let c=o.match(/^\[([^\]]+)\]$/);if(c){t=c[1].trim();continue}let l=o.indexOf("=");if(l===-1||!t)continue;let r=o.slice(0,l).trim(),a=o.slice(l+1).trim();t==="package"?e.package[r.replace(/-/g,"_")]=w(a):t==="dependencies"?a.startsWith("{")?e.dependencies[r]=E(a):e.dependencies[r]=w(a):t==="addresses"&&(e.addresses[r]=w(a))}return e}var y=class{constructor(e){this.fetcher=e,this.globalAddresses={},this.visited=new Set,this.dependencyFiles={},this.systemDepsLoaded=new Set}async resolve(e,t){let n=h(e);n.addresses&&this.mergeAddresses(n.addresses),n.dependencies&&await this.resolveDeps(n.dependencies),await this.injectSystemDeps(n.dependencies);let i=this.reconstructMoveToml(n,this.globalAddresses),o={...t,"Move.toml":i};return{files:JSON.stringify(o),dependencies:JSON.stringify(this.dependencyFiles)}}mergeAddresses(e){for(let[t,n]of Object.entries(e))this.globalAddresses[t]=this.normalizeAddress(n)}normalizeAddress(e){if(!e)return e;let t=e;return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}async resolveDeps(e,t=null){for(let[n,i]of Object.entries(e)){let o,c,l;if(i.git)o=i.git,c=i.rev,l=i.subdir;else if(i.local){if(!t)continue;o=t.git,c=t.rev,l=this.resolvePath(t.subdir||"",i.local)}else continue;let r=`${o}|${c}|${l||""}`;if(this.visited.has(r))continue;this.visited.add(r);let a=await this.fetcher.fetch(o,c,l),d=null;for(let[u,f]of Object.entries(a))if(u.endsWith("Move.toml")){d=f;break}if(d){let u=h(d);u.addresses&&this.mergeAddresses(u.addresses),u.dependencies&&await this.resolveDeps(u.dependencies,{git:o,rev:c,subdir:l})}for(let[u,f]of Object.entries(a))if(u.endsWith(".move")||u.endsWith("Move.toml")){let k=`dependencies/${n}/${u}`;this.dependencyFiles[k]=f}}}resolvePath(e,t){let n=e.split("/").filter(o=>o&&o!=="."),i=t.split("/").filter(o=>o&&o!==".");for(let o of i)o===".."?n.pop():n.push(o);return n.join("/")}reconstructMoveToml(e,t){let n=`[package]
2
2
  name = "${e.package.name}"
3
3
  version = "${e.package.version}"
4
- `;if(e.package.edition&&(s+=`edition = "${e.package.edition}"
5
- `),s+=`
4
+ `;if(e.package.edition&&(n+=`edition = "${e.package.edition}"
5
+ `),n+=`
6
6
  [dependencies]
7
- `,e.dependencies)for(let[i,o]of Object.entries(e.dependencies))s+=`${i} = { git = "${o.git}", rev = "${o.rev}" }
8
- `;s+=`
7
+ `,e.dependencies)for(let[i,o]of Object.entries(e.dependencies))n+=`${i} = { git = "${o.git}", rev = "${o.rev}" }
8
+ `;n+=`
9
9
  [addresses]
10
- `;for(let[i,o]of Object.entries(t))s+=`${i} = "${o}"
11
- `;return s}async injectSystemDeps(e){if(e){for(let s of Object.values(e))if(!(!s||!s.git||!s.rev)&&this.isSuiRepo(s.git)){await this.addImplicitSystemDepsForRepo(s.git,s.rev);break}}this.dependencyFiles["dependencies/MoveStdlib/Move.toml"]||this.addFallbackSystemDeps()}async addImplicitSystemDepsForRepo(e,t){if(!this.isSuiRepo(e))return;let s=`${e}|${t}`;if(this.systemDepsLoaded.has(s))return;this.systemDepsLoaded.add(s);let i="crates/sui-framework-snapshot/manifest.json";if(!this.fetcher.fetchFile)return;let o=null;try{let c=await this.fetcher.fetchFile(e,t,i);if(c){let l=JSON.parse(c),r=Object.keys(l).map(u=>Number(u)).filter(u=>!Number.isNaN(u)).sort((u,f)=>u-f),a=r[r.length-1],d=l[String(a)];d&&d.packages&&(o=d.packages)}}catch{}o||(o=this.fallbackSystemPackages());for(let c of o)!c||!c.name||!c.id||c.name!=="DeepBook"&&this.addSystemDep(c.name,c.id)}addFallbackSystemDeps(){for(let e of this.fallbackSystemPackages())!e||!e.name||!e.id||e.name!=="DeepBook"&&this.addSystemDep(e.name,e.id)}addSystemDep(e,t){let s=`dependencies/${e}/Move.toml`;if(this.dependencyFiles[s])return;let i=["[package]",`name = "${e}"`,'version = "0.0.0"',`published-at = "${this.normalizeAddress(t)}"`,""].join(`
12
- `);this.dependencyFiles[s]=i}fallbackSystemPackages(){return[{name:"MoveStdlib",id:"0x1"},{name:"Sui",id:"0x2"},{name:"SuiSystem",id:"0x3"},{name:"Bridge",id:"0xb"}]}isSuiRepo(e){return e.includes("github.com/MystenLabs/sui")}};async function b(n,e,t){return new y(t).resolve(n,e)}var Y={},I=(()=>{try{return new URL("./sui_move_wasm_bg.wasm",Y.url)}catch{return"./sui_move_wasm_bg.wasm"}})(),R;async function m(n){return R||(R=import("./sui_move_wasm.js").then(async e=>(await e.default(n??I),e))),R}function S(n){return JSON.stringify(n??{})}function $(n){return{success:!1,error:n instanceof Error?n.message:typeof n=="string"?n:"Unknown error"}}function D(n){if(typeof n!="object"||n===null)throw new Error("Unexpected compile result shape from wasm");let e=n;if(typeof e.success=="function"&&typeof e.output=="function")return e;if(typeof e.success=="boolean"&&typeof e.output=="string")return{success:()=>e.success,output:()=>e.output};throw new Error("Unexpected compile result shape from wasm")}function C(n){let e=t=>t.map(s=>s.toString(16).padStart(2,"0")).join("");try{let t=JSON.parse(n);if(!t.modules||!t.dependencies||!t.digest)throw new Error("missing fields in compiler output");let s=typeof t.digest=="string"?t.digest:e(t.digest);return{success:!0,modules:t.modules,dependencies:t.dependencies,digest:s}}catch(t){return $(t)}}function P(n){if(!n)return n;let e=n;return e.startsWith("0x")&&(e=e.slice(2)),/^[0-9a-fA-F]+$/.test(e)?"0x"+e.padStart(64,"0"):n}function z(n){let e={std:"0x1",sui:"0x2",sui_system:"0x3",bridge:"0xb"},t=n.split(/\r?\n/),s=/^\s*\[[^\]]+\]\s*$/,i=-1,o=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[addresses\]\s*$/.test(t[r])){i=r;for(let a=r+1;a<t.length;a++)if(s.test(t[a])){o=a;break}break}let c=new Set;if(i>=0)for(let r=i+1;r<o;r++){let a=t[r].trim();if(!a||a.startsWith("#"))continue;let d=a.match(/^([A-Za-z0-9_.-]+)\s*=/);d&&c.add(d[1])}let l=Object.entries(e).filter(([r])=>!c.has(r)).map(([r,a])=>`${r} = "${P(a)}"`);return l.length===0?n:(i>=0?t.splice(o,0,...l):t.push("","[addresses]",...l),t.join(`
13
- `))}function H(n){let e=[{name:"Sui",git:"https://github.com/MystenLabs/sui.git",subdir:"crates/sui-framework/packages/sui-framework",rev:"framework/mainnet"},{name:"MoveStdlib",git:"https://github.com/MystenLabs/sui.git",subdir:"crates/sui-framework/packages/move-stdlib",rev:"framework/mainnet"}],t=n.split(/\r?\n/),s=/^\s*\[[^\]]+\]\s*$/,i=-1,o=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[dependencies\]\s*$/.test(t[r])){i=r;for(let a=r+1;a<t.length;a++)if(s.test(t[a])){o=a;break}break}let c=new Set;if(i>=0)for(let r=i+1;r<o;r++){let a=t[r].trim();if(!a||a.startsWith("#"))continue;let d=a.match(/^([A-Za-z0-9_.-]+)\s*=/);d&&c.add(d[1])}let l=e.filter(r=>!c.has(r.name)).map(r=>`${r.name} = { git = "${r.git}", subdir = "${r.subdir}", rev = "${r.rev}" }`);return l.length===0?n:(i>=0?t.splice(o,0,...l):t.push("","[dependencies]",...l),t.join(`
14
- `))}function G(n){let e={...n??{}};if(e["dependencies/MoveStdlib/Move.toml"])return e;let t=[{name:"MoveStdlib",id:"0x1"},{name:"Sui",id:"0x2"},{name:"SuiSystem",id:"0x3"},{name:"Bridge",id:"0xb"}];for(let s of t){let i=`dependencies/${s.name}/Move.toml`;e[i]||(e[i]=["[package]",`name = "${s.name}"`,'version = "0.0.0"',`published-at = "${P(s.id)}"`,""].join(`
15
- `))}return e}function F(n){return!!(n?.["dependencies/MoveStdlib/Move.toml"]&&n?.["dependencies/Sui/Move.toml"])}function _(n){return typeof n=="string"?JSON.parse(n):n}async function J(n){await m(n?.wasm)}async function q(n){try{let e=n.dependencies??{},t={...n.files},s=typeof t["Move.toml"]=="string";if(n.autoSystemDeps&&s){let a=z(t["Move.toml"]);F(e)||(a=H(a)),t["Move.toml"]=a}if(n.autoSystemDeps&&!F(e)&&s){let a=await b(t["Move.toml"],t,new p);t=_(a.files),e=_(a.dependencies)}else n.autoSystemDeps&&(e=G(e));let i=await m(n.wasm),o=n.ansiColor&&typeof i.compile_with_color=="function"?i.compile_with_color(S(t),S(e),!0):i.compile(S(t),S(e)),c=D(o),l=c.success(),r=c.output();return l?C(r):$(r)}catch(e){return $(e)}}async function V(n){return(await m(n?.wasm)).sui_move_version()}async function K(n){return(await m(n?.wasm)).sui_version()}async function Q(n){return m(n?.wasm)}async function Z(n,e,t){let s=await m(t?.wasm),i=t?.ansiColor&&typeof s.compile_with_color=="function"?s.compile_with_color(n,e,!0):s.compile(n,e),o=D(i);return{success:o.success(),output:o.output()}}0&&(module.exports={Fetcher,GitHubFetcher,Resolver,buildMovePackage,compileRaw,getSuiMoveVersion,getSuiVersion,getWasmBindings,initMoveCompiler,parseToml,resolve});
10
+ `;for(let[i,o]of Object.entries(t))n+=`${i} = "${o}"
11
+ `;return n}async injectSystemDeps(e){if(e){for(let n of Object.values(e))if(!(!n||!n.git||!n.rev)&&this.isSuiRepo(n.git)){await this.addImplicitSystemDepsForRepo(n.git,n.rev);break}}this.dependencyFiles["dependencies/MoveStdlib/Move.toml"]||this.addFallbackSystemDeps()}async addImplicitSystemDepsForRepo(e,t){if(!this.isSuiRepo(e))return;let n=`${e}|${t}`;if(this.systemDepsLoaded.has(n))return;this.systemDepsLoaded.add(n);let i="crates/sui-framework-snapshot/manifest.json";if(!this.fetcher.fetchFile)return;let o=null;try{let c=await this.fetcher.fetchFile(e,t,i);if(c){let l=JSON.parse(c),r=Object.keys(l).map(u=>Number(u)).filter(u=>!Number.isNaN(u)).sort((u,f)=>u-f),a=r[r.length-1],d=l[String(a)];d&&d.packages&&(o=d.packages)}}catch{}o||(o=this.fallbackSystemPackages());for(let c of o)!c||!c.name||!c.id||c.name!=="DeepBook"&&this.addSystemDep(c.name,c.id)}addFallbackSystemDeps(){for(let e of this.fallbackSystemPackages())!e||!e.name||!e.id||e.name!=="DeepBook"&&this.addSystemDep(e.name,e.id)}addSystemDep(e,t){let n=`dependencies/${e}/Move.toml`;if(this.dependencyFiles[n])return;let i=["[package]",`name = "${e}"`,'version = "0.0.0"',`published-at = "${this.normalizeAddress(t)}"`,""].join(`
12
+ `);this.dependencyFiles[n]=i}fallbackSystemPackages(){return[{name:"MoveStdlib",id:"0x1"},{name:"Sui",id:"0x2"},{name:"SuiSystem",id:"0x3"},{name:"Bridge",id:"0xb"}]}isSuiRepo(e){return e.includes("github.com/MystenLabs/sui")}};async function b(s,e,t){return new y(t).resolve(s,e)}var X={},oe=(()=>{try{return new URL("./sui_move_wasm_bg.wasm",X.url)}catch{return"./sui_move_wasm_bg.wasm"}})(),R;async function m(s){return R||(R=import("./sui_move_wasm.js").then(async e=>(s?await e.default({module_or_path:s}):await e.default(),e))),R}function S(s){return JSON.stringify(s??{})}function $(s){return{success:!1,error:s instanceof Error?s.message:typeof s=="string"?s:"Unknown error"}}function D(s){if(typeof s!="object"||s===null)throw new Error("Unexpected compile result shape from wasm");let e=s;if(typeof e.success=="function"&&typeof e.output=="function")return e;if(typeof e.success=="boolean"&&typeof e.output=="string")return{success:()=>e.success,output:()=>e.output};throw new Error("Unexpected compile result shape from wasm")}function I(s){let e=t=>t.map(n=>n.toString(16).padStart(2,"0")).join("");try{let t=JSON.parse(s);if(!t.modules||!t.dependencies||!t.digest)throw new Error("missing fields in compiler output");let n=typeof t.digest=="string"?t.digest:e(t.digest);return{success:!0,modules:t.modules,dependencies:t.dependencies,digest:n}}catch(t){return $(t)}}function P(s){if(!s)return s;let e=s;return e.startsWith("0x")&&(e=e.slice(2)),/^[0-9a-fA-F]+$/.test(e)?"0x"+e.padStart(64,"0"):s}function C(s){let e={std:"0x1",sui:"0x2",sui_system:"0x3",bridge:"0xb"},t=s.split(/\r?\n/),n=/^\s*\[[^\]]+\]\s*$/,i=-1,o=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[addresses\]\s*$/.test(t[r])){i=r;for(let a=r+1;a<t.length;a++)if(n.test(t[a])){o=a;break}break}let c=new Set;if(i>=0)for(let r=i+1;r<o;r++){let a=t[r].trim();if(!a||a.startsWith("#"))continue;let d=a.match(/^([A-Za-z0-9_.-]+)\s*=/);d&&c.add(d[1])}let l=Object.entries(e).filter(([r])=>!c.has(r)).map(([r,a])=>`${r} = "${P(a)}"`);return l.length===0?s:(i>=0?t.splice(o,0,...l):t.push("","[addresses]",...l),t.join(`
13
+ `))}function z(s){let e=[{name:"Sui",git:"https://github.com/MystenLabs/sui.git",subdir:"crates/sui-framework/packages/sui-framework",rev:"framework/mainnet"},{name:"MoveStdlib",git:"https://github.com/MystenLabs/sui.git",subdir:"crates/sui-framework/packages/move-stdlib",rev:"framework/mainnet"}],t=s.split(/\r?\n/),n=/^\s*\[[^\]]+\]\s*$/,i=-1,o=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[dependencies\]\s*$/.test(t[r])){i=r;for(let a=r+1;a<t.length;a++)if(n.test(t[a])){o=a;break}break}let c=new Set;if(i>=0)for(let r=i+1;r<o;r++){let a=t[r].trim();if(!a||a.startsWith("#"))continue;let d=a.match(/^([A-Za-z0-9_.-]+)\s*=/);d&&c.add(d[1])}let l=e.filter(r=>!c.has(r.name)).map(r=>`${r.name} = { git = "${r.git}", subdir = "${r.subdir}", rev = "${r.rev}" }`);return l.length===0?s:(i>=0?t.splice(o,0,...l):t.push("","[dependencies]",...l),t.join(`
14
+ `))}function H(s){let e={...s??{}};if(e["dependencies/MoveStdlib/Move.toml"])return e;let t=[{name:"MoveStdlib",id:"0x1"},{name:"Sui",id:"0x2"},{name:"SuiSystem",id:"0x3"},{name:"Bridge",id:"0xb"}];for(let n of t){let i=`dependencies/${n.name}/Move.toml`;e[i]||(e[i]=["[package]",`name = "${n.name}"`,'version = "0.0.0"',`published-at = "${P(n.id)}"`,""].join(`
15
+ `))}return e}function F(s){return!!(s?.["dependencies/MoveStdlib/Move.toml"]&&s?.["dependencies/Sui/Move.toml"])}function _(s){return typeof s=="string"?JSON.parse(s):s}async function G(s){await m(s?.wasm)}async function J(s){try{let e=s.dependencies??{},t={...s.files},n=typeof t["Move.toml"]=="string";if(s.autoSystemDeps&&n){let a=C(t["Move.toml"]);F(e)||(a=z(a)),t["Move.toml"]=a}if(s.autoSystemDeps&&!F(e)&&n){let a=await b(t["Move.toml"],t,new p);t=_(a.files),e=_(a.dependencies)}else s.autoSystemDeps&&(e=H(e));let i=await m(s.wasm),o=s.ansiColor&&typeof i.compile_with_color=="function"?i.compile_with_color(S(t),S(e),!0):i.compile(S(t),S(e)),c=D(o),l=c.success(),r=c.output();return l?I(r):$(r)}catch(e){return $(e)}}async function q(s){return(await m(s?.wasm)).sui_move_version()}async function V(s){return(await m(s?.wasm)).sui_version()}async function K(s){return m(s?.wasm)}async function Q(s,e,t){let n=await m(t?.wasm),i=t?.ansiColor&&typeof n.compile_with_color=="function"?n.compile_with_color(s,e,!0):n.compile(s,e),o=D(i);return{success:o.success(),output:o.output()}}0&&(module.exports={Fetcher,GitHubFetcher,Resolver,buildMovePackage,compileRaw,getSuiMoveVersion,getSuiVersion,getWasmBindings,initMoveCompiler,parseToml,resolve});
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ version = "${e.package.version}"
9
9
  [addresses]
10
10
  `;for(let[i,o]of Object.entries(t))s+=`${i} = "${o}"
11
11
  `;return s}async injectSystemDeps(e){if(e){for(let s of Object.values(e))if(!(!s||!s.git||!s.rev)&&this.isSuiRepo(s.git)){await this.addImplicitSystemDepsForRepo(s.git,s.rev);break}}this.dependencyFiles["dependencies/MoveStdlib/Move.toml"]||this.addFallbackSystemDeps()}async addImplicitSystemDepsForRepo(e,t){if(!this.isSuiRepo(e))return;let s=`${e}|${t}`;if(this.systemDepsLoaded.has(s))return;this.systemDepsLoaded.add(s);let i="crates/sui-framework-snapshot/manifest.json";if(!this.fetcher.fetchFile)return;let o=null;try{let c=await this.fetcher.fetchFile(e,t,i);if(c){let l=JSON.parse(c),r=Object.keys(l).map(u=>Number(u)).filter(u=>!Number.isNaN(u)).sort((u,f)=>u-f),a=r[r.length-1],d=l[String(a)];d&&d.packages&&(o=d.packages)}}catch{}o||(o=this.fallbackSystemPackages());for(let c of o)!c||!c.name||!c.id||c.name!=="DeepBook"&&this.addSystemDep(c.name,c.id)}addFallbackSystemDeps(){for(let e of this.fallbackSystemPackages())!e||!e.name||!e.id||e.name!=="DeepBook"&&this.addSystemDep(e.name,e.id)}addSystemDep(e,t){let s=`dependencies/${e}/Move.toml`;if(this.dependencyFiles[s])return;let i=["[package]",`name = "${e}"`,'version = "0.0.0"',`published-at = "${this.normalizeAddress(t)}"`,""].join(`
12
- `);this.dependencyFiles[s]=i}fallbackSystemPackages(){return[{name:"MoveStdlib",id:"0x1"},{name:"Sui",id:"0x2"},{name:"SuiSystem",id:"0x3"},{name:"Bridge",id:"0xb"}]}isSuiRepo(e){return e.includes("github.com/MystenLabs/sui")}};async function S(n,e,t){return new v(t).resolve(n,e)}var j=(()=>{try{return new URL("./sui_move_wasm_bg.wasm",import.meta.url)}catch{return"./sui_move_wasm_bg.wasm"}})(),k;async function p(n){return k||(k=import("./sui_move_wasm.js").then(async e=>(await e.default(n??j),e))),k}function w(n){return JSON.stringify(n??{})}function R(n){return{success:!1,error:n instanceof Error?n.message:typeof n=="string"?n:"Unknown error"}}function F(n){if(typeof n!="object"||n===null)throw new Error("Unexpected compile result shape from wasm");let e=n;if(typeof e.success=="function"&&typeof e.output=="function")return e;if(typeof e.success=="boolean"&&typeof e.output=="string")return{success:()=>e.success,output:()=>e.output};throw new Error("Unexpected compile result shape from wasm")}function W(n){let e=t=>t.map(s=>s.toString(16).padStart(2,"0")).join("");try{let t=JSON.parse(n);if(!t.modules||!t.dependencies||!t.digest)throw new Error("missing fields in compiler output");let s=typeof t.digest=="string"?t.digest:e(t.digest);return{success:!0,modules:t.modules,dependencies:t.dependencies,digest:s}}catch(t){return R(t)}}function _(n){if(!n)return n;let e=n;return e.startsWith("0x")&&(e=e.slice(2)),/^[0-9a-fA-F]+$/.test(e)?"0x"+e.padStart(64,"0"):n}function L(n){let e={std:"0x1",sui:"0x2",sui_system:"0x3",bridge:"0xb"},t=n.split(/\r?\n/),s=/^\s*\[[^\]]+\]\s*$/,i=-1,o=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[addresses\]\s*$/.test(t[r])){i=r;for(let a=r+1;a<t.length;a++)if(s.test(t[a])){o=a;break}break}let c=new Set;if(i>=0)for(let r=i+1;r<o;r++){let a=t[r].trim();if(!a||a.startsWith("#"))continue;let d=a.match(/^([A-Za-z0-9_.-]+)\s*=/);d&&c.add(d[1])}let l=Object.entries(e).filter(([r])=>!c.has(r)).map(([r,a])=>`${r} = "${_(a)}"`);return l.length===0?n:(i>=0?t.splice(o,0,...l):t.push("","[addresses]",...l),t.join(`
13
- `))}function U(n){let e=[{name:"Sui",git:"https://github.com/MystenLabs/sui.git",subdir:"crates/sui-framework/packages/sui-framework",rev:"framework/mainnet"},{name:"MoveStdlib",git:"https://github.com/MystenLabs/sui.git",subdir:"crates/sui-framework/packages/move-stdlib",rev:"framework/mainnet"}],t=n.split(/\r?\n/),s=/^\s*\[[^\]]+\]\s*$/,i=-1,o=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[dependencies\]\s*$/.test(t[r])){i=r;for(let a=r+1;a<t.length;a++)if(s.test(t[a])){o=a;break}break}let c=new Set;if(i>=0)for(let r=i+1;r<o;r++){let a=t[r].trim();if(!a||a.startsWith("#"))continue;let d=a.match(/^([A-Za-z0-9_.-]+)\s*=/);d&&c.add(d[1])}let l=e.filter(r=>!c.has(r.name)).map(r=>`${r.name} = { git = "${r.git}", subdir = "${r.subdir}", rev = "${r.rev}" }`);return l.length===0?n:(i>=0?t.splice(o,0,...l):t.push("","[dependencies]",...l),t.join(`
14
- `))}function B(n){let e={...n??{}};if(e["dependencies/MoveStdlib/Move.toml"])return e;let t=[{name:"MoveStdlib",id:"0x1"},{name:"Sui",id:"0x2"},{name:"SuiSystem",id:"0x3"},{name:"Bridge",id:"0xb"}];for(let s of t){let i=`dependencies/${s.name}/Move.toml`;e[i]||(e[i]=["[package]",`name = "${s.name}"`,'version = "0.0.0"',`published-at = "${_(s.id)}"`,""].join(`
15
- `))}return e}function x(n){return!!(n?.["dependencies/MoveStdlib/Move.toml"]&&n?.["dependencies/Sui/Move.toml"])}function M(n){return typeof n=="string"?JSON.parse(n):n}async function C(n){await p(n?.wasm)}async function z(n){try{let e=n.dependencies??{},t={...n.files},s=typeof t["Move.toml"]=="string";if(n.autoSystemDeps&&s){let a=L(t["Move.toml"]);x(e)||(a=U(a)),t["Move.toml"]=a}if(n.autoSystemDeps&&!x(e)&&s){let a=await S(t["Move.toml"],t,new m);t=M(a.files),e=M(a.dependencies)}else n.autoSystemDeps&&(e=B(e));let i=await p(n.wasm),o=n.ansiColor&&typeof i.compile_with_color=="function"?i.compile_with_color(w(t),w(e),!0):i.compile(w(t),w(e)),c=F(o),l=c.success(),r=c.output();return l?W(r):R(r)}catch(e){return R(e)}}async function H(n){return(await p(n?.wasm)).sui_move_version()}async function G(n){return(await p(n?.wasm)).sui_version()}async function J(n){return p(n?.wasm)}async function q(n,e,t){let s=await p(t?.wasm),i=t?.ansiColor&&typeof s.compile_with_color=="function"?s.compile_with_color(n,e,!0):s.compile(n,e),o=F(i);return{success:o.success(),output:o.output()}}export{g as Fetcher,m as GitHubFetcher,v as Resolver,z as buildMovePackage,q as compileRaw,H as getSuiMoveVersion,G as getSuiVersion,J as getWasmBindings,C as initMoveCompiler,y as parseToml,S as resolve};
12
+ `);this.dependencyFiles[s]=i}fallbackSystemPackages(){return[{name:"MoveStdlib",id:"0x1"},{name:"Sui",id:"0x2"},{name:"SuiSystem",id:"0x3"},{name:"Bridge",id:"0xb"}]}isSuiRepo(e){return e.includes("github.com/MystenLabs/sui")}};async function S(n,e,t){return new v(t).resolve(n,e)}var I=(()=>{try{return new URL("./sui_move_wasm_bg.wasm",import.meta.url)}catch{return"./sui_move_wasm_bg.wasm"}})(),k;async function p(n){return k||(k=import("./sui_move_wasm.js").then(async e=>(n?await e.default({module_or_path:n}):await e.default(),e))),k}function w(n){return JSON.stringify(n??{})}function R(n){return{success:!1,error:n instanceof Error?n.message:typeof n=="string"?n:"Unknown error"}}function F(n){if(typeof n!="object"||n===null)throw new Error("Unexpected compile result shape from wasm");let e=n;if(typeof e.success=="function"&&typeof e.output=="function")return e;if(typeof e.success=="boolean"&&typeof e.output=="string")return{success:()=>e.success,output:()=>e.output};throw new Error("Unexpected compile result shape from wasm")}function j(n){let e=t=>t.map(s=>s.toString(16).padStart(2,"0")).join("");try{let t=JSON.parse(n);if(!t.modules||!t.dependencies||!t.digest)throw new Error("missing fields in compiler output");let s=typeof t.digest=="string"?t.digest:e(t.digest);return{success:!0,modules:t.modules,dependencies:t.dependencies,digest:s}}catch(t){return R(t)}}function _(n){if(!n)return n;let e=n;return e.startsWith("0x")&&(e=e.slice(2)),/^[0-9a-fA-F]+$/.test(e)?"0x"+e.padStart(64,"0"):n}function L(n){let e={std:"0x1",sui:"0x2",sui_system:"0x3",bridge:"0xb"},t=n.split(/\r?\n/),s=/^\s*\[[^\]]+\]\s*$/,i=-1,o=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[addresses\]\s*$/.test(t[r])){i=r;for(let a=r+1;a<t.length;a++)if(s.test(t[a])){o=a;break}break}let c=new Set;if(i>=0)for(let r=i+1;r<o;r++){let a=t[r].trim();if(!a||a.startsWith("#"))continue;let d=a.match(/^([A-Za-z0-9_.-]+)\s*=/);d&&c.add(d[1])}let l=Object.entries(e).filter(([r])=>!c.has(r)).map(([r,a])=>`${r} = "${_(a)}"`);return l.length===0?n:(i>=0?t.splice(o,0,...l):t.push("","[addresses]",...l),t.join(`
13
+ `))}function W(n){let e=[{name:"Sui",git:"https://github.com/MystenLabs/sui.git",subdir:"crates/sui-framework/packages/sui-framework",rev:"framework/mainnet"},{name:"MoveStdlib",git:"https://github.com/MystenLabs/sui.git",subdir:"crates/sui-framework/packages/move-stdlib",rev:"framework/mainnet"}],t=n.split(/\r?\n/),s=/^\s*\[[^\]]+\]\s*$/,i=-1,o=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[dependencies\]\s*$/.test(t[r])){i=r;for(let a=r+1;a<t.length;a++)if(s.test(t[a])){o=a;break}break}let c=new Set;if(i>=0)for(let r=i+1;r<o;r++){let a=t[r].trim();if(!a||a.startsWith("#"))continue;let d=a.match(/^([A-Za-z0-9_.-]+)\s*=/);d&&c.add(d[1])}let l=e.filter(r=>!c.has(r.name)).map(r=>`${r.name} = { git = "${r.git}", subdir = "${r.subdir}", rev = "${r.rev}" }`);return l.length===0?n:(i>=0?t.splice(o,0,...l):t.push("","[dependencies]",...l),t.join(`
14
+ `))}function U(n){let e={...n??{}};if(e["dependencies/MoveStdlib/Move.toml"])return e;let t=[{name:"MoveStdlib",id:"0x1"},{name:"Sui",id:"0x2"},{name:"SuiSystem",id:"0x3"},{name:"Bridge",id:"0xb"}];for(let s of t){let i=`dependencies/${s.name}/Move.toml`;e[i]||(e[i]=["[package]",`name = "${s.name}"`,'version = "0.0.0"',`published-at = "${_(s.id)}"`,""].join(`
15
+ `))}return e}function x(n){return!!(n?.["dependencies/MoveStdlib/Move.toml"]&&n?.["dependencies/Sui/Move.toml"])}function M(n){return typeof n=="string"?JSON.parse(n):n}async function C(n){await p(n?.wasm)}async function z(n){try{let e=n.dependencies??{},t={...n.files},s=typeof t["Move.toml"]=="string";if(n.autoSystemDeps&&s){let a=L(t["Move.toml"]);x(e)||(a=W(a)),t["Move.toml"]=a}if(n.autoSystemDeps&&!x(e)&&s){let a=await S(t["Move.toml"],t,new m);t=M(a.files),e=M(a.dependencies)}else n.autoSystemDeps&&(e=U(e));let i=await p(n.wasm),o=n.ansiColor&&typeof i.compile_with_color=="function"?i.compile_with_color(w(t),w(e),!0):i.compile(w(t),w(e)),c=F(o),l=c.success(),r=c.output();return l?j(r):R(r)}catch(e){return R(e)}}async function H(n){return(await p(n?.wasm)).sui_move_version()}async function G(n){return(await p(n?.wasm)).sui_version()}async function J(n){return p(n?.wasm)}async function q(n,e,t){let s=await p(t?.wasm),i=t?.ansiColor&&typeof s.compile_with_color=="function"?s.compile_with_color(n,e,!0):s.compile(n,e),o=F(i);return{success:o.success(),output:o.output()}}export{g as Fetcher,m as GitHubFetcher,v as Resolver,z as buildMovePackage,q as compileRaw,H as getSuiMoveVersion,G as getSuiVersion,J as getWasmBindings,C as initMoveCompiler,y as parseToml,S as resolve};
Binary file
package/package.json CHANGED
@@ -1,7 +1,14 @@
1
1
  {
2
2
  "name": "@zktx.io/sui-move-builder",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Build Move packages in web or Node.js with dependency fetching and dump outputs.",
5
+ "keywords": [
6
+ "sui",
7
+ "move",
8
+ "compiler",
9
+ "builder",
10
+ "wasm"
11
+ ],
5
12
  "license": "MIT",
6
13
  "author": "",
7
14
  "repository": {