@zktx.io/sui-move-builder 0.1.5 → 0.1.6

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/README.md CHANGED
@@ -8,9 +8,10 @@ Build Move packages in web or Node.js with Sui CLI-compatible dependency resolut
8
8
  - ✅ **Lockfile Support**: Reads `Move.lock` for faster, deterministic builds
9
9
  - ✅ **Per-Package Editions**: Each package can use its own Move edition (legacy, 2024.alpha, 2024.beta)
10
10
  - ✅ **Monorepo Support**: Handles local dependencies in monorepo structures
11
- - ✅ **Version Conflict Resolution**: Automatically resolves dependency version conflicts
11
+ - ✅ **Version Conflict Detection**: Matches Sui CLI behavior for conflicting dependency versions
12
12
  - ✅ **Browser & Node.js**: Works in both environments with WASM-based compilation
13
13
  - ✅ **GitHub Integration**: Fetches dependencies directly from git repositories
14
+ - ✅ **GitHub Token Support**: Optional token to raise rate limits (API calls only; raw fetch remains CORS-safe)
14
15
 
15
16
  ## Install
16
17
 
@@ -44,7 +45,11 @@ module hello_world::hello_world {
44
45
  };
45
46
 
46
47
  // 3) Compile
47
- const result = await buildMovePackage({ files });
48
+ const result = await buildMovePackage({
49
+ files,
50
+ // optional: bump GitHub API limits during dependency resolution
51
+ githubToken: process.env.GITHUB_TOKEN,
52
+ });
48
53
 
49
54
  if (result.success) {
50
55
  console.log("Digest:", result.digest);
@@ -67,11 +72,17 @@ await initMoveCompiler();
67
72
 
68
73
  // Fetch a package from GitHub URL
69
74
  const files = await fetchPackageFromGitHub(
70
- "https://github.com/MystenLabs/sui/tree/framework/mainnet/crates/sui-framework/packages/sui-framework"
75
+ "https://github.com/MystenLabs/sui/tree/framework/mainnet/crates/sui-framework/packages/sui-framework",
76
+ {
77
+ githubToken: process.env.GITHUB_TOKEN, // optional
78
+ }
71
79
  );
72
80
 
73
81
  // Compile directly
74
- const result = await buildMovePackage({ files });
82
+ const result = await buildMovePackage({
83
+ files,
84
+ githubToken: process.env.GITHUB_TOKEN, // optional
85
+ });
75
86
  ```
76
87
 
77
88
  ## How it works
@@ -117,10 +128,10 @@ if (result.success) {
117
128
  For faster builds when compiling multiple times with the same dependencies, you can resolve dependencies once and reuse them:
118
129
 
119
130
  ```ts
120
- import {
121
- initMoveCompiler,
122
- resolveDependencies,
123
- buildMovePackage
131
+ import {
132
+ initMoveCompiler,
133
+ resolveDependencies,
134
+ buildMovePackage,
124
135
  } from "@zktx.io/sui-move-builder";
125
136
 
126
137
  await initMoveCompiler();
@@ -137,6 +148,7 @@ const deps = await resolveDependencies({ files, network: "mainnet" });
137
148
  const result1 = await buildMovePackage({
138
149
  files,
139
150
  network: "mainnet",
151
+ githubToken: process.env.GITHUB_TOKEN, // optional
140
152
  resolvedDependencies: deps, // Skip dependency resolution
141
153
  });
142
154
 
@@ -147,15 +159,21 @@ files["sources/main.move"] = "// updated code...";
147
159
  const result2 = await buildMovePackage({
148
160
  files,
149
161
  network: "mainnet",
162
+ githubToken: process.env.GITHUB_TOKEN, // optional
150
163
  resolvedDependencies: deps, // Reuse same dependencies
151
164
  });
152
165
  ```
153
166
 
154
167
  **Benefits:**
168
+
155
169
  - ⚡ Faster builds when dependencies haven't changed
156
170
  - 🔄 Useful for watch mode or iterative development
157
171
  - 💾 Reduce network requests by caching dependency resolution
158
172
 
173
+ ## Limitations
174
+
175
+ - Dependencies are always compiled from source. Bytecode-only deps (.mv fallback used by the Sui CLI when sources are missing) are not supported in the wasm path.
176
+
159
177
  ## Local test page
160
178
 
161
179
  ```
package/dist/index.cjs CHANGED
@@ -1,28 +1,28 @@
1
- "use strict";var U=Object.create;var b=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var E=(a,e)=>{for(var t in e)b(a,t,{get:e[t],enumerable:!0})},L=(a,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of O(e))!j.call(a,n)&&n!==t&&b(a,n,{get:()=>e[n],enumerable:!(i=B(e,n))||i.enumerable});return a};var H=(a,e,t)=>(t=a!=null?U(W(a)):{},L(e||!a||!a.__esModule?b(t,"default",{value:a,enumerable:!0}):t,a)),V=a=>L(b({},"__esModule",{value:!0}),a);var ie={};E(ie,{buildMovePackage:()=>X,compileRaw:()=>ne,fetchPackageFromGitHub:()=>C,getSuiMoveVersion:()=>Y,getSuiVersion:()=>ee,getWasmBindings:()=>te,initMoveCompiler:()=>Z,resolveDependencies:()=>_});module.exports=V(ie);var M=class{async fetch(e,t,i){throw new Error("Not implemented")}async fetchFile(e,t,i){throw new Error("Not implemented")}},k=class extends M{constructor(){super(),this.cache=new Map}async fetch(e,t,i){let{owner:n,repo:s}=this.parseGitUrl(e);if(!n||!s)throw new Error(`Invalid git URL: ${e}`);let o=`https://api.github.com/repos/${n}/${s}/git/trees/${t}?recursive=1`,d;try{let c=await fetch(o);if(!c.ok)throw c.status===403||c.status===429?new Error("GitHub API rate limit exceeded."):new Error(`Failed to fetch tree: ${c.statusText}`);d=await c.json()}catch{return{}}let r={},l=[];for(let c of d.tree){if(c.type!=="blob")continue;let p=c.path;if(i){if(!c.path.startsWith(i))continue;p=c.path.slice(i.length),p.startsWith("/")&&(p=p.slice(1))}if(!p.endsWith(".move")&&p!=="Move.toml"&&p!=="Move.lock"&&!p.match(/^Move\.(mainnet|testnet|devnet)\.toml$/))continue;let m=`https://raw.githubusercontent.com/${n}/${s}/${t}/${c.path}`,g=this.fetchContent(m).then(u=>{u&&(r[p]=u)});l.push(g)}return await Promise.all(l),r}async fetchFile(e,t,i){let{owner:n,repo:s}=this.parseGitUrl(e);if(!n||!s)throw new Error(`Invalid git URL: ${e}`);let o=`https://raw.githubusercontent.com/${n}/${s}/${t}/${i}`;return this.fetchContent(o)}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 i=await t.text();return this.cache.set(e,i),i}catch{return null}}parseGitUrl(e){try{let i=new URL(e).pathname.split("/").filter(n=>n);if(i.length>=2){let n=i[1];return n.endsWith(".git")&&(n=n.slice(0,-4)),{owner:i[0],repo:n}}}catch{}return{owner:null,repo:null}}};function z(a){let e=!1,t="";for(let i=0;i<a.length;i++){let n=a[i];if((n==='"'||n==="'")&&(!e||n===t)&&(e=!e,t=n),!e&&n==="#")return a.slice(0,i)}return a}function x(a){let e=a.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 G(a){let e={},t=a.trim().replace(/^\{/,"").replace(/\}$/,""),i="",n=!1,s="",o=[];for(let d=0;d<t.length;d++){let r=t[d];if((r==='"'||r==="'")&&(!n||r===s)&&(n=!n,s=r),!n&&r===","){o.push(i),i="";continue}i+=r}i.trim()&&o.push(i);for(let d of o){let r=d.indexOf("=");if(r===-1)continue;let l=d.slice(0,r).trim(),c=d.slice(r+1).trim();e[l]=x(c)}return e}function q(a){let e=[],t=a.trim().replace(/^\[/,"").replace(/\]$/,""),i="",n=!1,s="",o=0;for(let d=0;d<t.length;d++){let r=t[d];if((r==='"'||r==="'")&&(!n||r===s)&&(n=!n,s=n?r:""),!n&&(r==="{"&&o++,r==="}"&&o--,r===","&&o===0)){i.trim()&&e.push(F(i.trim())),i="";continue}i+=r}return i.trim()&&e.push(F(i.trim())),e}function F(a){return a.startsWith("{")?G(a):x(a)}function y(a){let e={},t=null,i=!1,n=a.split(/\r?\n/);function s(o,d){let r=o;for(let l of d){if(!(l in r))return;r=r[l]}return r}for(let o of n){let d=z(o).trim();if(!d)continue;let r=d.match(/^\[\[([^\]]+)\]\]$/);if(r){t=r[1].trim(),i=!0;let u=t.split("."),f=e;for(let v=0;v<u.length-1;v++){let D=u[v];D in f||(f[D]={}),f=f[D]}let h=u[u.length-1];Array.isArray(f[h])||(f[h]=[]),f[h].push({});continue}let l=d.match(/^\[([^\]]+)\]$/);if(l){t=l[1].trim(),i=!1;continue}let c=d.indexOf("=");if(c===-1||!t)continue;let p=d.slice(0,c).trim(),m=d.slice(c+1).trim(),g;if(m.startsWith("{")?g=G(m):m.startsWith("[")?g=q(m):g=x(m),i){let u=t.split("."),f=s(e,u);if(Array.isArray(f)&&f.length>0){let h=f[f.length-1];h[p]=g}}else{let u=t.split("."),f=e;for(let v of u)v in f||(f[v]={}),f=f[v];let h=t==="package"?p.replace(/-/g,"_"):p;f[h]=g}}return e}var P=class{constructor(e){this.packageTable=new Map;this.graph=new Map;this.alwaysDeps=new Set(["Sui","MoveStdlib"]);this.root=e}addPackage(e){this.packageTable.set(e.id.name,e),this.graph.has(e.id.name)||this.graph.set(e.id.name,new Set)}addDependency(e,t,i){this.graph.has(e)||this.graph.set(e,new Set),this.graph.get(e).add(t)}getPackage(e){return this.packageTable.get(e)}getAllPackages(){return Array.from(this.packageTable.values())}getImmediateDependencies(e){return this.graph.get(e)||new Set}getTransitiveDependencies(e){let t=new Set,i=new Set,n=s=>{if(i.has(s))return;i.add(s),t.add(s);let o=this.graph.get(s);if(o)for(let d of o)n(d)};return n(e),t.delete(e),t}topologicalOrder(){let e=new Set,t=[],i=n=>{if(e.has(n))return;e.add(n);let s=this.graph.get(n);if(s)for(let o of s)i(o);t.push(n)};i(this.root);for(let n of this.packageTable.keys())i(n);return t}detectCycle(){let e=new Set,t=new Set,i=new Map,n=s=>{e.add(s),t.add(s);let o=this.graph.get(s);if(o)for(let d of o)if(e.has(d)){if(t.has(d)){let r=[d],l=s;for(;l!==d;)r.unshift(l),l=i.get(l);return r.unshift(d),r}}else{i.set(d,s);let r=n(d);if(r)return r}return t.delete(s),null};for(let s of this.packageTable.keys())if(!e.has(s)){let o=n(s);if(o)return o}return null}getRootPackage(){return this.packageTable.get(this.root)}getRootName(){return this.root}isAlwaysDep(e){return this.alwaysDeps.has(e)}};var S=class{constructor(e,t={}){this.unifiedAddressTable=new Map;this.packageResolvedTables=new Map;this.graph=e,this.buildConfig=t}async resolve(){let e=this.graph.topologicalOrder();for(let t of e){let i=this.graph.getPackage(t);if(i)for(let[n,s]of Object.entries(i.manifest.addresses)){let o=this.normalizeAddress(s);this.unifiedAddressTable.has(n)&&this.unifiedAddressTable.get(n)!==o||this.unifiedAddressTable.set(n,o)}}for(let t of this.graph.getAllPackages()){let i={};for(let[n,s]of this.unifiedAddressTable.entries())i[n]=s;this.packageResolvedTables.set(t.id.name,i),t.resolvedTable=i}}normalizeAddress(e){if(!e)return e;let t=e.trim();return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}getUnifiedAddressTable(){let e={};for(let[t,i]of this.unifiedAddressTable.entries())e[t]=i;return e}getPackageResolvedTable(e){return this.packageResolvedTables.get(e)}getGraph(){return this.graph}topologicalOrder(){return this.graph.topologicalOrder()}getRootName(){return this.graph.getRootName()}getPackage(e){return this.graph.getPackage(e)}getImmediateDependencies(e){return this.graph.getImmediateDependencies(e)}};var R=class{constructor(e){this.dependencies=[];this.resolvedGraph=e,this.rootPackageName=e.getRootName()}async compute(e){if(!this.resolvedGraph.getPackage(this.rootPackageName))throw new Error(`Root package '${this.rootPackageName}' not found`);let i=this.resolvedGraph.getImmediateDependencies(this.rootPackageName),n=this.resolvedGraph.topologicalOrder();for(let s of n){if(s===this.rootPackageName)continue;let o=this.resolvedGraph.getPackage(s);if(!o)continue;let d=e.get(s)||{},r=this.extractSourcePaths(s,d),l=o.manifest.edition||"legacy",c={name:s,isImmediate:i.has(s),sourcePaths:r,addressMapping:o.resolvedTable||{},compilerConfig:{edition:l,flavor:"sui"},moduleFormat:r.length>0?"Source":"Bytecode",edition:l};this.dependencies.push(c)}}extractSourcePaths(e,t){let i=[];for(let n of Object.keys(t))n.endsWith("Move.toml")||n.endsWith("Move.lock")||n.endsWith(".move")&&i.push(n);return i}toPackageGroupedFormat(e){let t=[];for(let i of this.dependencies){let n=e.get(i.name)||{},s={};for(let[o,d]of Object.entries(n)){if(o.endsWith("Move.lock"))continue;let r=`dependencies/${i.name}/${o}`;if(o.endsWith("Move.toml")){let l=this.reconstructDependencyMoveToml(i.name,d,i.edition,i.addressMapping);s[r]=l}else s[r]=d}t.push({name:i.name,files:s,edition:i.edition})}return t}reconstructDependencyMoveToml(e,t,i,n){let s=t.split(`
2
- `),o=[],d=[],r=!1,l=!1;for(let g of s){let u=g.trim();if(u.startsWith("[package]")){r=!0,l=!1;continue}if(u.startsWith("[dependencies]")){r=!1,l=!0;continue}if(u.startsWith("[")){r=!1,l=!1;continue}r&&u&&o.push(g),l&&u&&d.push(g)}let c=`[package]
3
- `,p=!1,m=!1;for(let g of o)if(g.includes("name ="))c+=g+`
4
- `,p=!0;else if(g.includes("version ="))c+=g+`
5
- `,m=!0;else{if(g.includes("edition ="))continue;c+=g+`
6
- `}p||(c+=`name = "${e}"
7
- `),m||(c+=`version = "0.0.0"
8
- `),c+=`edition = "${i}"
9
- `,c+=`
1
+ "use strict";var W=Object.create;var S=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var H=(d,e)=>{for(var t in e)S(d,t,{get:e[t],enumerable:!0})},L=(d,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of E(e))!V.call(d,n)&&n!==t&&S(d,n,{get:()=>e[n],enumerable:!(i=U(e,n))||i.enumerable});return d};var q=(d,e,t)=>(t=d!=null?W(z(d)):{},L(e||!d||!d.__esModule?S(t,"default",{value:d,enumerable:!0}):t,d)),K=d=>L(S({},"__esModule",{value:!0}),d);var re={};H(re,{buildMovePackage:()=>ee,compileRaw:()=>se,fetchPackageFromGitHub:()=>B,getSuiMoveVersion:()=>te,getSuiVersion:()=>ne,getWasmBindings:()=>ie,initMoveCompiler:()=>Z,resolveDependencies:()=>j});module.exports=K(re);var I=class{async fetch(e,t,i){throw new Error("Not implemented")}async fetchFile(e,t,i){throw new Error("Not implemented")}},P=class extends I{constructor(t){super();this.rateLimitRemaining=60;this.rateLimitReset=0;this.cache=new Map,this.treeCache=new Map,this.token=t}updateRateLimit(t){let i=t.headers.get("x-ratelimit-remaining"),n=t.headers.get("x-ratelimit-reset");i&&(this.rateLimitRemaining=parseInt(i,10)),n&&(this.rateLimitReset=parseInt(n,10)*1e3)}async fetch(t,i,n,o){let{owner:s,repo:c}=this.parseGitUrl(t);if(!s||!c)throw new Error(`Invalid git URL: ${t}`);let a=`${s}/${c}@${i}`,l=`https://api.github.com/repos/${s}/${c}/git/trees/${i}?recursive=1`,r;if(this.treeCache.has(a))r=this.treeCache.get(a);else{let p=null;for(let m=1;m<=3;m++)try{if(m>1){let k=Math.pow(2,m-1)*1e3;await new Promise(v=>setTimeout(v,k))}let y={};this.token&&(y.Authorization=`Bearer ${this.token}`);let h=await fetch(l,{headers:y});if(this.updateRateLimit(h),!h.ok){if(h.status===403||h.status===429){let k=new Date(this.rateLimitReset);throw new Error(`GitHub API rate limit exceeded. Resets at ${k.toLocaleTimeString()}`)}if(h.status>=500&&h.status<600&&m<3){p=new Error(`Failed to fetch tree: ${h.statusText}`);continue}throw new Error(`Failed to fetch tree: ${h.statusText}`)}r=await h.json(),this.treeCache.set(a,r);break}catch(y){if(p=y instanceof Error?y:new Error(String(y)),m===3)return{}}if(p)return{}}let g={},f=[];for(let u of r.tree){if(u.type!=="blob")continue;let p=u.path;if(n){if(!u.path.startsWith(n))continue;p=u.path.slice(n.length),p.startsWith("/")&&(p=p.slice(1))}if(!p.endsWith(".move")&&p!=="Move.toml"&&p!=="Move.lock"&&!p.match(/^Move\.(mainnet|testnet|devnet)\.toml$/))continue;let m=`https://raw.githubusercontent.com/${s}/${c}/${i}/${u.path}`,y=this.fetchContent(m).then(h=>{h&&(g[p]=h)});f.push(y)}if(await Promise.all(f),g["Move.toml"]){let u=g["Move.toml"].trim();if(u.match(/^Move\.(mainnet|testnet|devnet)\.toml$/)&&!u.includes("[")&&!u.includes("=")){let p=u,m=n?`${n}/${p}`.replace(/\/+/g,"/"):p,y=`https://raw.githubusercontent.com/${s}/${c}/${i}/${m}`,h=await this.fetchContent(y);h&&(g["Move.toml"]=h,g[p]=h)}}return g}async fetchFile(t,i,n){let{owner:o,repo:s}=this.parseGitUrl(t);if(!o||!s)throw new Error(`Invalid git URL: ${t}`);let c=`https://raw.githubusercontent.com/${o}/${s}/${i}/${n}`;return this.fetchContent(c)}async fetchContent(t){if(this.cache.has(t))return this.cache.get(t)??null;try{let i={},n=typeof window<"u",o=t.startsWith("https://api.github.com/");this.token&&(!n||o)&&(i.Authorization=`Bearer ${this.token}`);let s=await fetch(t,{headers:i});if(!s.ok)return null;let c=await s.text();return this.cache.set(t,c),c}catch{return null}}parseGitUrl(t){try{let n=new URL(t).pathname.split("/").filter(o=>o);if(n.length>=2){let o=n[1];return o.endsWith(".git")&&(o=o.slice(0,-4)),{owner:n[0],repo:o}}}catch{}return{owner:null,repo:null}}};function M(d){let e=!1,t="";for(let i=0;i<d.length;i++){let n=d[i];if((n==='"'||n==="'")&&(!e||n===t)&&(e=!e,t=n),!e&&n==="#")return d.slice(0,i)}return d}function x(d){let e=d.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 N(d){let e={},t=d.trim().replace(/^\{/,"").replace(/\}$/,""),i="",n=!1,o="",s=[];for(let c=0;c<t.length;c++){let a=t[c];if((a==='"'||a==="'")&&(!n||a===o)&&(n=!n,o=a),!n&&a===","){s.push(i),i="";continue}i+=a}i.trim()&&s.push(i);for(let c of s){let a=c.indexOf("=");if(a===-1)continue;let l=c.slice(0,a).trim(),r=c.slice(a+1).trim();e[l]=x(r)}return e}function J(d){let e=[],t=d.trim().replace(/^\[/,"").replace(/\]$/,""),i="",n=!1,o="",s=0;for(let c=0;c<t.length;c++){let a=t[c];if((a==='"'||a==="'")&&(!n||a===o)&&(n=!n,o=n?a:""),!n&&(a==="{"&&s++,a==="}"&&s--,a===","&&s===0)){i.trim()&&e.push(G(i.trim())),i="";continue}i+=a}return i.trim()&&e.push(G(i.trim())),e}function G(d){return d.startsWith("{")?N(d):x(d)}function b(d){let e={},t=null,i=!1,n=d.split(/\r?\n/),o=[],s=0;for(;s<n.length;){let a=M(n[s]);if(a.match(/=\s*\[\s*$/)||a.includes("=")&&a.includes("[")&&!a.includes("]")){let l=a;for(s++;s<n.length&&!l.includes("]");)l+=" "+M(n[s]).trim(),s++;s<n.length&&l.includes("[")&&!l.includes("]")&&(l+=" "+M(n[s]).trim(),s++),o.push(l)}else o.push(a),s++}function c(a,l){let r=a;for(let g of l){if(!(g in r))return;r=r[g]}return r}for(let a of o){let l=M(a).trim();if(!l)continue;let r=l.match(/^\[\[([^\]]+)\]\]$/);if(r){t=r[1].trim(),i=!0;let y=t.split("."),h=e;for(let v=0;v<y.length-1;v++){let w=y[v];w in h||(h[w]={}),h=h[w]}let k=y[y.length-1];Array.isArray(h[k])||(h[k]=[]),h[k].push({});continue}let g=l.match(/^\[([^\]]+)\]$/);if(g){t=g[1].trim(),i=!1;continue}let f=l.indexOf("=");if(f===-1||!t)continue;let u=l.slice(0,f).trim(),p=l.slice(f+1).trim(),m;if(p.startsWith("{")?m=N(p):p.startsWith("[")?m=J(p):m=x(p),i){let y=t.split("."),h=c(e,y);if(Array.isArray(h)&&h.length>0){let k=h[h.length-1];k[u]=m}}else{let y=t.split("."),h=e;for(let v of y)v in h||(h[v]={}),h=h[v];let k=t==="package"?u.replace(/-/g,"_"):u;h[k]=m}}return e}var D=class{constructor(e){this.packageTable=new Map;this.graph=new Map;this.alwaysDeps=new Set(["Sui","MoveStdlib","SuiSystem","Bridge"]);this.lockfileOrder=[];this.root=e}setLockfileOrder(e){this.lockfileOrder=e}addPackage(e){this.packageTable.set(e.id.name,e),this.graph.has(e.id.name)||this.graph.set(e.id.name,new Set)}addDependency(e,t,i){this.graph.has(e)||this.graph.set(e,new Set),this.graph.get(e).add(t)}getPackage(e){return this.packageTable.get(e)}getAllPackages(){return Array.from(this.packageTable.values())}getImmediateDependencies(e){return this.graph.get(e)||new Set}getTransitiveDependencies(e){let t=new Set,i=new Set,n=o=>{if(i.has(o))return;i.add(o),t.add(o);let s=this.graph.get(o);if(s)for(let c of s)n(c)};return n(e),t.delete(e),t}topologicalOrder(){if(!this.lockfileOrder.length)return this.topologicalOrderDFS().filter(s=>s!==this.root);let e=new Set,t=new Set,i=o=>{if(t.has(o))return;t.add(o),e.add(o);let s=this.graph.get(o);if(s)for(let c of s)i(c)};i(this.root);let n=[];for(let o of this.lockfileOrder)o!==this.root&&e.has(o)&&n.push(o);return n}topologicalOrderDFS(){let e=new Set,t=[],i=n=>{if(e.has(n))return;e.add(n);let o=this.graph.get(n);if(o)for(let s of Array.from(o))i(s);t.push(n)};i(this.root);for(let n of this.packageTable.keys())i(n);return t}detectCycle(){let e=new Set,t=new Set,i=new Map,n=o=>{e.add(o),t.add(o);let s=this.graph.get(o);if(s)for(let c of s)if(e.has(c)){if(t.has(c)){let a=[c],l=o;for(;l!==c;)a.unshift(l),l=i.get(l);return a.unshift(c),a}}else{i.set(c,o);let a=n(c);if(a)return a}return t.delete(o),null};for(let o of this.packageTable.keys())if(!e.has(o)){let s=n(o);if(s)return s}return null}getRootPackage(){return this.packageTable.get(this.root)}getRootName(){return this.root}isAlwaysDep(e){return this.alwaysDeps.has(e)}};var $=class{constructor(e,t={}){this.unifiedAddressTable=new Map;this.packageResolvedTables=new Map;this.graph=e,this.buildConfig=t}async resolve(){let t=[this.graph.getRootName(),...this.graph.topologicalOrder()];for(let i of t){let n=this.graph.getPackage(i);if(n)for(let[o,s]of Object.entries(n.manifest.addresses)){let c=this.normalizeAddress(s);this.unifiedAddressTable.has(o)&&this.unifiedAddressTable.get(o)!==c||this.unifiedAddressTable.set(o,c)}}for(let i of this.graph.getAllPackages()){let n={};for(let[o,s]of this.unifiedAddressTable.entries())n[o]=s;this.packageResolvedTables.set(i.id.name,n),i.resolvedTable=n}}normalizeAddress(e){if(!e)return e;let t=e.trim();return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}getUnifiedAddressTable(){let e={};for(let[t,i]of this.unifiedAddressTable.entries())e[t]=i;return e}getPackageResolvedTable(e){return this.packageResolvedTables.get(e)}getGraph(){return this.graph}topologicalOrder(){return this.graph.topologicalOrder()}getRootName(){return this.graph.getRootName()}getPackage(e){return this.graph.getPackage(e)}getImmediateDependencies(e){return this.graph.getImmediateDependencies(e)}};var A=class{constructor(e){this.dependencies=[];this.resolvedGraph=e,this.rootPackageName=e.getRootName()}async compute(e){if(!this.resolvedGraph.getPackage(this.rootPackageName))throw new Error(`Root package '${this.rootPackageName}' not found`);let i=this.resolvedGraph.getImmediateDependencies(this.rootPackageName),n=this.resolvedGraph.topologicalOrder(),o=new Set(["Bridge","SuiSystem"]);for(let s of n){if(s===this.rootPackageName)continue;let c=this.resolvedGraph.getPackage(s);if(!c||o.has(s))continue;let a=e.get(s)||{},l=this.extractSourcePaths(s,a),r=c.manifest.edition||"legacy",g=c.manifest.latestPublishedId||c.manifest.originalId||c.manifest.publishedAt||c.resolvedTable?.[s],f={name:s,isImmediate:i.has(s),sourcePaths:l,addressMapping:c.resolvedTable||{},compilerConfig:{edition:r,flavor:"sui"},moduleFormat:l.length>0?"Source":"Bytecode",edition:r,publishedIdForOutput:g};this.dependencies.push(f)}}extractSourcePaths(e,t){let i=Object.keys(t).filter(s=>s.endsWith("Move.toml")||s.endsWith("Move.lock")?!1:s.endsWith(".move")),n=new TextEncoder,o=(s,c)=>{let a=n.encode(`/vfs/deps/${e}/${s}`),l=n.encode(`/vfs/deps/${e}/${c}`),r=Math.min(a.length,l.length);for(let g=0;g<r;g++)if(a[g]!==l[g])return a[g]-l[g];return a.length-l.length};return i.sort(o),i}toPackageGroupedFormat(e){let t=[];for(let i of this.dependencies){let n=e.get(i.name)||{},o={};for(let[s,c]of Object.entries(n)){if(s.endsWith("Move.lock"))continue;let a=`dependencies/${i.name}/${s}`;s.endsWith("Move.toml")?o[a]=this.reconstructDependencyMoveToml(i.name,c,i.edition,i.addressMapping):o[a]=c}t.push({name:i.name,files:o,edition:i.edition,addressMapping:i.addressMapping,publishedIdForOutput:i.publishedIdForOutput})}return t}reconstructDependencyMoveToml(e,t,i,n){let o=(t||"").split(`
2
+ `),s=[],c=[],a=!1,l=!1;for(let u of o){let p=u.trim();if(p.startsWith("[package]")){a=!0,l=!1;continue}if(p.startsWith("[dependencies]")){a=!1,l=!0;continue}if(p.startsWith("[")){a=!1,l=!1;continue}a&&p&&s.push(u),l&&p&&c.push(u)}let r=`[package]
3
+ `,g=!1,f=!1;for(let u of s)if(u.includes("name ="))r+=u+`
4
+ `,g=!0;else if(u.includes("version ="))r+=u+`
5
+ `,f=!0;else{if(u.includes("edition ="))continue;r+=u+`
6
+ `}g||(r+=`name = "${e}"
7
+ `),f||(r+=`version = "0.0.0"
8
+ `),r+=`edition = "${i}"
9
+ `,r+=`
10
10
  [dependencies]
11
- `;for(let g of d)c+=g+`
12
- `;c+=`
11
+ `;for(let u of c)r+=u+`
12
+ `;r+=`
13
13
  [addresses]
14
- `;for(let[g,u]of Object.entries(n))c+=`${g} = "${u}"
15
- `;return c}getUnifiedAddressTable(){return this.resolvedGraph.getUnifiedAddressTable()}};var $=class{constructor(e,t="mainnet"){this.visited=new Set;this.packageNameCache=new Map;this.packageFiles=new Map;this.fetcher=e,this.network=t}async resolve(e,t){let i=y(e),n=i.package?.name||"RootPackage",s=i.package?.edition;if(t["Move.lock"]){let h=y(t["Move.lock"]);h.move?.["toolchain-version"]?.edition&&(s=h.move["toolchain-version"].edition)}let o=s||"2024.beta",d=new P(n),r=await this.buildPackage(n,null,e,t);s&&(r.manifest.edition=s),d.addPackage(r),this.packageFiles.set(n,t),await this.loadFromLockfile(d,r,t)||await this.buildDependencyGraph(d,r);let c=d.detectCycle();if(c)throw new Error(`Dependency cycle detected: ${c.join(" \u2192 ")}`);let p=new S(d,{});await p.resolve();let m=new R(p);await m.compute(this.packageFiles);let g=this.reconstructMoveToml(i,p.getUnifiedAddressTable(),!0,o),u={...t};delete u["Move.lock"],u["Move.toml"]=g;let f=m.toPackageGroupedFormat(this.packageFiles);return{files:JSON.stringify(u),dependencies:JSON.stringify(f)}}async buildPackage(e,t,i,n){let s=y(i),o={name:s.package?.name||e,version:s.package?.version||"0.0.0",edition:s.package?.edition,publishedAt:s.package?.published_at,addresses:s.addresses||{},dependencies:s.dependencies||{},devDependencies:s["dev-dependencies"]},d=new Map;if(o.dependencies)for(let[l,c]of Object.entries(o.dependencies)){let p=this.parseDependencyInfo(c);p&&d.set(l,p)}return{id:{name:o.name,version:o.version,source:t||{type:"local"}},manifest:o,dependencies:d,devDependencies:new Map}}parseDependencyInfo(e){return e?e.git&&e.rev?{source:{type:"git",git:e.git,rev:e.rev,subdir:e.subdir}}:e.local?{source:{type:"local",local:e.local}}:null:null}async buildDependencyGraph(e,t){for(let[i,n]of t.dependencies.entries()){if(n.source.type==="local")if(t.id.source.type==="git"&&n.source.local){let g=t.id.source.subdir||"",u=n.source.local,f=this.resolveRelativePath(g,u);n.source={type:"git",git:t.id.source.git,rev:t.id.source.rev,subdir:f}}else continue;if(n.source.type!=="git")continue;let s=`${n.source.git}|${n.source.rev}|${n.source.subdir||""}`;if(this.visited.has(s)){let g=this.findPackageBySource(e,n.source);g&&e.addDependency(t.id.name,g.id.name,n);continue}this.visited.add(s);let o=n.source.subdir;!o&&n.source.git&&this.isSuiRepo(n.source.git)&&(o=this.inferSuiFrameworkSubdir(i),o&&(n.source.subdir=o));let d=await this.fetcher.fetch(n.source.git,n.source.rev,o),r=null,l=`Move.${this.network}.toml`;for(let[g,u]of Object.entries(d))if(g.endsWith(l)){r=u;break}if(!r){for(let[g,u]of Object.entries(d))if(g.endsWith("Move.toml")){r=u;break}}if(!r)continue;let c=await this.buildPackage(i,n.source,r,d),p=this.packageNameCache.get(c.manifest.name);if(p){let g=this.findPackageBySource(e,p);g&&e.addDependency(t.id.name,g.id.name,n);continue}this.packageNameCache.set(c.manifest.name,n.source);let m=d["Move.lock"];if(m){let g=y(m);if(g.env?.[this.network]){let u=g.env[this.network]["latest-published-id"]||g.env[this.network]["original-published-id"];u&&(c.manifest.publishedAt=u,c.manifest.addresses[c.manifest.name]=this.normalizeAddress(u))}c.manifest.edition||(c.manifest.edition="legacy")}if(!c.manifest.publishedAt){let g={Sui:"0x2",MoveStdlib:"0x1",SuiSystem:"0x3",Bridge:"0xb"};g[i]&&(c.manifest.publishedAt=g[i])}e.addPackage(c),e.addDependency(t.id.name,c.id.name,n),this.packageFiles.set(c.id.name,d),await this.buildDependencyGraph(e,c)}}findPackageBySource(e,t){for(let i of e.getAllPackages()){let n=i.id.source;if(n.type===t.type&&n.git===t.git&&n.rev===t.rev&&n.subdir===t.subdir)return i}}resolveRelativePath(e,t){let i=e?e.split("/").filter(Boolean):[],n=t.split("/").filter(Boolean),s=[...i];for(let o of n)o===".."?s.length>0&&s.pop():o!=="."&&s.push(o);return s.join("/")}async computeManifestDigest(e){let i=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",i);return Array.from(new Uint8Array(n)).map(d=>d.toString(16).padStart(2,"0")).join("").toUpperCase()}async loadFromLockfile(e,t,i){let n=i["Move.lock"];if(!n)return!1;let s=y(n),o=s.pinned?.[this.network];if(!o)return!1;let d=i["Move.toml"];if(d&&s.move?.manifest_digest&&await this.computeManifestDigest(d)!==s.move.manifest_digest)return!1;let r=new Map;for(let[l,c]of Object.entries(o)){let p=this.lockfileSourceToDependencySource(c.source);if(!p)continue;let m=await this.fetchFromSource(p);if(!m)return!1;let g=m["Move.toml"];if(!g||c["manifest-digest"]&&await this.computeManifestDigest(g)!==c["manifest-digest"])return!1;let u=await this.buildPackage(l,p,g,m);r.set(l,u),this.packageFiles.set(u.manifest.name,m),(p.type!=="local"||!("root"in c.source))&&e.addPackage(u)}for(let[l,c]of Object.entries(o)){let p=r.get(l);if(p&&c.deps)for(let[m,g]of Object.entries(c.deps)){let u=r.get(g);if(u){let f=p.dependencies.get(m);f&&e.addDependency(p.id.name,u.id.name,f)}}}return!0}lockfileSourceToDependencySource(e){return"git"in e?{type:"git",git:e.git,rev:e.rev,subdir:e.subdir}:"local"in e?{type:"local",local:e.local}:"root"in e?{type:"local"}:null}async fetchFromSource(e){if(e.type==="git"&&e.git&&e.rev)try{return await this.fetcher.fetch(e.git,e.rev,e.subdir)}catch{return null}return null}reconstructMoveToml(e,t,i,n){let o=`[package]
14
+ `;for(let[u,p]of Object.entries(n))r+=`${u} = "${p}"
15
+ `;return r}};var F=class{constructor(e,t="mainnet",i=null){this.visited=new Set;this.packageNameCache=new Map;this.packageFiles=new Map;this.fetcher=e,this.network=t,this.rootSource=i}async resolve(e,t){let i=b(e),n=i.package?.name||"RootPackage",o=i.package?.edition;if(t["Move.lock"]){let v=b(t["Move.lock"]);v.move?.["toolchain-version"]?.edition&&(o=v.move["toolchain-version"].edition)}let s=o||"2024.beta",c=new D(n),a=await this.buildPackage(n,this.rootSource,e,t);o&&(a.manifest.edition=o);let l=a.manifest.addresses[n];this.normalizeAddress(l||"")==="0x0000000000000000000000000000000000000000000000000000000000000000"&&a.manifest.originalId&&(a.manifest.addresses[n]=this.normalizeAddress(a.manifest.originalId)),c.addPackage(a),this.packageFiles.set(n,t);let g=await this.loadFromLockfile(c,a,t),f=Array.from(a.dependencies.keys()).filter(v=>!c.getPackage(v));(!g||f.length>0)&&await this.buildDependencyGraph(c,a);let u=c.detectCycle();if(u)throw new Error(`Dependency cycle detected: ${u.join(" \u2192 ")}`);let p=new $(c,{});await p.resolve();let m=new A(p);await m.compute(this.packageFiles);let y=this.reconstructMoveToml(i,p.getUnifiedAddressTable(),!0,s),h={...t};delete h["Move.lock"],h["Move.toml"]=y;let k=m.toPackageGroupedFormat(this.packageFiles);return{files:JSON.stringify(h),dependencies:JSON.stringify(k)}}async buildPackage(e,t,i,n){let o=b(i),s=n["Move.lock"],c=this.getChainIdForNetwork(this.network),a=this.resolvePublishedAt(i,s,c),l=a.latestId?this.normalizeAddress(a.latestId):void 0;a.error;let r={name:o.package?.name||e,version:o.package?.version||"0.0.0",edition:o.package?.edition,publishedAt:a.publishedAt,originalId:a.originalId,latestPublishedId:l,addresses:o.addresses||{},dependencies:o.dependencies||{},devDependencies:o["dev-dependencies"]},g=r.publishedAt&&r.publishedAt!=="0x0"?this.normalizeAddress(r.publishedAt):void 0,f=r.addresses[r.name],u=f?this.normalizeAddress(f):void 0;g?r.addresses[r.name]=g:u?r.addresses[r.name]=u:r.addresses[r.name]="0x0";let p=new Map;if(r.dependencies)for(let[y,h]of Object.entries(r.dependencies)){let k=this.parseDependencyInfo(h);k&&p.set(y,k)}return{id:{name:r.name,version:r.version,source:t||{type:"local"}},manifest:r,dependencies:p,devDependencies:new Map}}parseDependencyInfo(e){if(!e)return null;let t={source:{type:"local"}};if(e.git&&e.rev)t.source={type:"git",git:e.git,rev:e.rev,subdir:e.subdir};else if(e.local)t.source={type:"local",local:e.local};else return null;if(e["addr-subst"]||e.addr_subst){let i=e["addr-subst"]||e.addr_subst,n={};for(let[o,s]of Object.entries(i))typeof s=="string"&&(s.startsWith("0x")||/^[0-9a-fA-F]+$/.test(s)?n[o]={type:"assign",address:s}:n[o]={type:"renameFrom",name:s});Object.keys(n).length>0&&(t.subst=n)}return t}async buildDependencyGraph(e,t){for(let[i,n]of t.dependencies.entries()){if(n.source.type==="local")if(t.id.source.type==="git"&&n.source.local){let g=t.id.source.subdir||"",f=n.source.local,u=this.resolveRelativePath(g,f);n.source={type:"git",git:t.id.source.git,rev:t.id.source.rev,subdir:u}}else continue;if(n.source.type!=="git")continue;let o=`${n.source.git}|${n.source.rev}|${n.source.subdir||""}`;if(this.visited.has(o)){let g=this.findPackageBySource(e,n.source);g&&e.addDependency(t.id.name,g.id.name,n);continue}this.visited.add(o);let s=n.source.subdir;!s&&n.source.git&&this.isSuiRepo(n.source.git)&&(s=this.inferSuiFrameworkSubdir(i),s&&(n.source.subdir=s));let c=await this.fetcher.fetch(n.source.git,n.source.rev,s,`${t.id.name} -> ${i}`),a=null,l=`Move.${this.network}.toml`;for(let[g,f]of Object.entries(c))if(g.endsWith(l)){a=f;break}if(!a){for(let[g,f]of Object.entries(c))if(g.endsWith("Move.toml")){a=f;break}}if(!a)continue;let r=await this.buildPackage(i,n.source,a,c);if(!this.lockfileVersion||this.lockfileVersion<4){let g=this.packageNameCache.get(r.manifest.name);if(g){let f=u=>JSON.stringify(u);throw new Error([`Conflicting versions of package '${r.manifest.name}' found`,`Existing: ${f(g)}`,`New: ${f(n.source)}`,`When resolving dependencies for '${t.id.name}' -> '${i}'`].join(`
16
+ `))}this.packageNameCache.set(r.manifest.name,n.source)}r.manifest.publishedAt&&(r.manifest.addresses[r.manifest.name]=this.normalizeAddress(r.manifest.publishedAt)),r.manifest.edition||(r.manifest.edition="legacy"),e.addPackage(r),e.addDependency(t.id.name,r.id.name,n),this.packageFiles.set(r.id.name,c),await this.buildDependencyGraph(e,r)}}getChainIdForNetwork(e){return{mainnet:"35834a8a",testnet:"4c78adac",devnet:"2",localnet:"localnet"}[e]||e}resolvePublishedAt(e,t,i){let n=b(e),o=n.package?.published_at||n.package?.["published-at"],s=o&&o!=="0x0"?o:void 0,c=s?this.normalizeAddress(s):void 0,a=n.package?.["original-id"];if(!t||!i)return{publishedAt:c,originalId:a};let l=b(t),r,g,f;if(l.env)for(let[,u]of Object.entries(l.env)){let p=u["latest-published-id"],m=u["original-published-id"],y=u["chain-id"];if(y===i||!y){let h=p&&p!=="0x0"?this.normalizeAddress(p):void 0,k=m&&m!=="0x0"?this.normalizeAddress(m):void 0;g=h,f=k,r=h||k;break}}return!f&&r&&(f=r),r&&c&&r!==c?{error:`Conflicting 'published-at' addresses between Move.toml (${c}) and Move.lock (${r})`}:{publishedAt:f||c||r,originalId:f||a,latestId:g||r||c}}findPackageBySource(e,t){for(let i of e.getAllPackages()){let n=i.id.source;if(n.type===t.type&&n.git===t.git&&n.rev===t.rev&&n.subdir===t.subdir)return i}}resolveRelativePath(e,t){let i=e?e.split("/").filter(Boolean):[],n=t.split("/").filter(Boolean),o=[...i];for(let s of n)s===".."?o.length>0&&o.pop():s!=="."&&o.push(s);return o.join("/")}async computeManifestDigest(e){let i=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",i);return Array.from(new Uint8Array(n)).map(c=>c.toString(16).padStart(2,"0")).join("").toUpperCase()}async loadFromLockfile(e,t,i){let n=i["Move.lock"];if(!n)return!1;let o=b(n);this.lockfileVersion=o.move?.version;let s=o.move?.version;return s===3?await this.loadFromLockfileV3(e,o,t):s&&s>=4?await this.loadFromLockfileV4(e,o,i):await this.loadFromLockfileV0(e,o,t)}async loadFromLockfileV0(e,t,i){let n=t.move?.package;if(!n||!Array.isArray(n))return!1;let o=Array.isArray(t.move?.dependencies)?t.move.dependencies.map(r=>r.name||r.id||r).filter(Boolean):[],s=n.map(r=>r.name||r.id).filter(Boolean),c=[...o,...s.filter(r=>!o.includes(r))],a=new Map,l=new Map;for(let r of n){let g=r.id||r.name,f=r.source;if(!g||!f)continue;let u=null;if(f.git&&f.rev)u={type:"git",git:f.git,rev:f.rev,subdir:f.subdir};else if(f.local&&this.rootSource?.type==="git"){let h=this.resolveRelativePath(this.rootSource.subdir||"",f.local);u={type:"git",git:this.rootSource.git,rev:this.rootSource.rev,subdir:h}}else continue;let p=await this.fetcher.fetch(u.git,u.rev,u.subdir,`lockfile:${g}`);if(Object.keys(p).length===0)continue;let m=p["Move.toml"];if(!m)continue;let y=await this.buildPackage(g,u,m,p);a.set(g,y),l.set(y.manifest.name,y),this.packageFiles.set(y.manifest.name,p),e.addPackage(y)}c.length&&e.setLockfileOrder(c);for(let r of n){let g=r.id||r.name,f=a.get(g);if(!f)continue;let u=r.dependencies;if(u&&Array.isArray(u))for(let p of u){let m=p.id||p.name,y=a.get(m)||l.get(m);if(y){let h={source:y.id.source};e.addDependency(f.id.name,y.id.name,h)}}}for(let r of i.dependencies.keys()){let g=l.get(r);if(g){let f=i.dependencies.get(r);e.addDependency(i.id.name,g.id.name,f)}}return a.size>0}async loadFromLockfileV3(e,t,i){let n=t.move?.package;if(!n||!Array.isArray(n))return!1;let o=new Map,s=new Map,c=[];for(let a of n)a.id&&s.set(a.id,a);for(let a of n){let l=a.id,r=a.source;c.push(l);let g=null;if(r?.git&&r.rev)g={type:"git",git:r.git,rev:r.rev,subdir:r.subdir};else if(r?.local&&this.rootSource?.type==="git"){let m=this.resolveRelativePath(this.rootSource.subdir||"",r.local);g={type:"git",git:this.rootSource.git,rev:this.rootSource.rev,subdir:m}}else continue;let f=await this.fetcher.fetch(r.git,r.rev,r.subdir,`lockfile:${l}`);if(Object.keys(f).length===0)continue;let u=f["Move.toml"];if(!u)continue;let p=await this.buildPackage(l,g,u,f);o.set(l,p),this.packageFiles.set(p.manifest.name,f),e.addPackage(p)}e.setLockfileOrder(c);for(let a of n){let l=a.id,r=o.get(l);if(!r)continue;let g=a.dependencies;if(!(!g||!Array.isArray(g)))for(let f of g){let u=f.id,p=o.get(u);if(!p){let m=s.get(u);if(m?.source?.local&&r.id.source.type==="git"){let y=this.resolveRelativePath(r.id.source.subdir||"",m.source.local),h={type:"git",git:r.id.source.git,rev:r.id.source.rev,subdir:y},k=await this.fetcher.fetch(h.git,h.rev,h.subdir,`lockfile:${u}`),v=k["Move.toml"];if(v){let w=await this.buildPackage(u,h,v,k);o.set(u,w),this.packageFiles.set(w.manifest.name,k),e.addPackage(w),p=w}}}if(p){let m={source:p.id.source};e.addDependency(r.id.name,p.id.name,m)}}}for(let a of i.dependencies.keys()){let l=o.get(a);if(l){let r=i.dependencies.get(a);e.addDependency(i.id.name,l.id.name,r)}}return!0}async loadFromLockfileV4(e,t,i){let n=t.pinned?.[this.network];if(!n)return!1;let o=rootFiles["Move.toml"];if(o&&t.move?.manifest_digest&&await this.computeManifestDigest(o)!==t.move.manifest_digest)return!1;let s=new Map,c=new Map,a=[];for(let[l,r]of Object.entries(n)){a.push(l);let g=this.lockfileSourceToDependencySource(r.source);if(!g)continue;let f=await this.fetchFromSource(g);if(!f)return!1;let u=f["Move.toml"];if(!u||r["manifest-digest"]&&await this.computeManifestDigest(u)!==r["manifest-digest"])return!1;let p=await this.buildPackage(l,g,u,f);s.set(l,p),c.set(p.manifest.name,p),this.packageFiles.set(p.manifest.name,f),(g.type!=="local"||!("root"in r.source))&&e.addPackage(p)}a.length>0&&e.setLockfileOrder(a);for(let[l,r]of Object.entries(n)){let g=s.get(l);if(g&&r.deps)for(let[f,u]of Object.entries(r.deps)){let p=s.get(u);if(p){let m=g.dependencies.get(f);m&&e.addDependency(g.id.name,p.id.name,m)}}}for(let l of rootPackage.dependencies.keys()){let r=c.get(l)||s.get(l);if(r){let g=rootPackage.dependencies.get(l);e.addDependency(rootPackage.id.name,r.id.name,g)}}return!0}lockfileSourceToDependencySource(e){return"git"in e?{type:"git",git:e.git,rev:e.rev,subdir:e.subdir}:"local"in e?{type:"local",local:e.local}:"root"in e?{type:"local"}:null}async fetchFromSource(e){if(e.type==="git"&&e.git&&e.rev)try{return await this.fetcher.fetch(e.git,e.rev,e.subdir,"lockfile:dependency")}catch{return null}return null}reconstructMoveToml(e,t,i,n){let s=`[package]
16
17
  name = "${e.package.name}"
17
18
  version = "${e.package.version}"
18
- `,d=n||e.package.edition;if(d&&(o+=`edition = "${d}"
19
- `),o+=`
19
+ `,c=n||e.package.edition;if(c&&(s+=`edition = "${c}"
20
+ `),s+=`
20
21
  [dependencies]
21
- `,e.dependencies)for(let[r,l]of Object.entries(e.dependencies)){let c=l;c.local?o+=`${r} = { local = "${c.local}" }
22
- `:c.git&&c.rev&&(c.subdir?o+=`${r} = { git = "${c.git}", subdir = "${c.subdir}", rev = "${c.rev}" }
23
- `:o+=`${r} = { git = "${c.git}", rev = "${c.rev}" }
24
- `)}o+=`
22
+ `,e.dependencies)for(let[a,l]of Object.entries(e.dependencies)){let r=l;r.local?s+=`${a} = { local = "${r.local}" }
23
+ `:r.git&&r.rev&&(r.subdir?s+=`${a} = { git = "${r.git}", subdir = "${r.subdir}", rev = "${r.rev}" }
24
+ `:s+=`${a} = { git = "${r.git}", rev = "${r.rev}" }
25
+ `)}s+=`
25
26
  [addresses]
26
- `;for(let[r,l]of Object.entries(t))o+=`${r} = "${l}"
27
- `;return o}normalizeAddress(e){if(!e)return e;let t=e.trim();return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}isSuiRepo(e){return e.includes("github.com/MystenLabs/sui")}inferSuiFrameworkSubdir(e){let t={Sui:"crates/sui-framework/packages/sui-framework",MoveStdlib:"crates/sui-framework/packages/move-stdlib",SuiSystem:"crates/sui-framework/packages/sui-system",Bridge:"crates/sui-framework/packages/bridge",DeepBook:"crates/sui-framework/packages/deepbook",SuiFramework:"crates/sui-framework/packages/sui-framework"};return t[e]||t[e.toLowerCase()]}};async function I(a,e,t,i="mainnet"){return new $(t,i).resolve(a,e)}function K(a){try{let e=new URL(a);if(e.hostname!=="github.com")return null;let t=e.pathname.split("/").filter(Boolean);if(t.length<2)return null;let i=t[0],n=t[1],s="main",o;return t.length>=4&&t[2]==="tree"&&(s=t[3],t.length>4&&(o=t.slice(4).join("/"))),{owner:i,repo:n,ref:s,subdir:o}}catch{return null}}async function C(a,e){let t=K(a);if(!t)throw new Error(`Invalid GitHub URL: ${a}`);let i=e?.fetcher||new k,n=e?.includeLock!==!1,s=`https://github.com/${t.owner}/${t.repo}.git`,o=await i.fetch(s,t.ref,t.subdir);if(!n&&o["Move.lock"]){let{"Move.lock":d,...r}=o;return r}return o}var A;async function w(a){return A||(A=import("./sui_move_wasm.js").then(async e=>(a?await e.default({module_or_path:a}):await e.default(),e))),A}function T(a){return{success:!1,error:a instanceof Error?a.message:typeof a=="string"?a:"Unknown error"}}function N(a){if(typeof a!="object"||a===null)throw new Error("Unexpected compile result shape from wasm");let e=a;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 Q(a){let e=t=>t.map(i=>i.toString(16).padStart(2,"0")).join("");try{let t=JSON.parse(a);if(!t.modules||!t.dependencies||!t.digest)throw new Error("missing fields in compiler output");let i=typeof t.digest=="string"?t.digest:e(t.digest);return{success:!0,modules:t.modules,dependencies:t.dependencies,digest:i}}catch(t){return T(t)}}function J(a){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=a.split(/\r?\n/),i=/^\s*\[[^\]]+\]\s*$/,n=-1,s=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[dependencies\]\s*$/.test(t[r])){n=r;for(let l=r+1;l<t.length;l++)if(i.test(t[l])){s=l;break}break}let o=new Set;if(n>=0)for(let r=n+1;r<s;r++){let l=t[r].trim();if(!l||l.startsWith("#"))continue;let c=l.match(/^([A-Za-z0-9_.-]+)\s*=/);c&&o.add(c[1])}let d=e.filter(r=>!o.has(r.name)).map(r=>`${r.name} = { git = "${r.git}", subdir = "${r.subdir}", rev = "${r.rev}" }`);return d.length===0?a:(n>=0?t.splice(s,0,...d):t.push("","[dependencies]",...d),t.join(`
28
- `))}async function Z(a){await w(a?.wasm)}async function _(a){let e=a.files["Move.toml"]||"";e&&(e=J(e));let t=await I(e,{...a.files,"Move.toml":e},new k,a.network);return{files:t.files,dependencies:t.dependencies}}async function X(a){try{let e=a.resolvedDependencies?a.resolvedDependencies:await _(a),t=await w(a.wasm),i=a.ansiColor&&typeof t.compile_with_color=="function"?t.compile_with_color(e.files,e.dependencies,!0):t.compile(e.files,e.dependencies),n=N(i),s=n.success(),o=n.output();return s?Q(o):T(o)}catch(e){return T(e)}}async function Y(a){return(await w(a?.wasm)).sui_move_version()}async function ee(a){return(await w(a?.wasm)).sui_version()}async function te(a){return w(a?.wasm)}async function ne(a,e,t){let i=await w(t?.wasm),n=t?.ansiColor&&typeof i.compile_with_color=="function"?i.compile_with_color(a,e,!0):i.compile(a,e),s=N(n);return{success:s.success(),output:s.output()}}0&&(module.exports={buildMovePackage,compileRaw,fetchPackageFromGitHub,getSuiMoveVersion,getSuiVersion,getWasmBindings,initMoveCompiler,resolveDependencies});
27
+ `;for(let[a,l]of Object.entries(t))s+=`${a} = "${l}"
28
+ `;return s}normalizeAddress(e){if(!e)return e;let t=e.trim();return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}isSuiRepo(e){return e.includes("github.com/MystenLabs/sui")}inferSuiFrameworkSubdir(e){let t={Sui:"crates/sui-framework/packages/sui-framework",MoveStdlib:"crates/sui-framework/packages/move-stdlib",SuiSystem:"crates/sui-framework/packages/sui-system",Bridge:"crates/sui-framework/packages/bridge",DeepBook:"crates/sui-framework/packages/deepbook",SuiFramework:"crates/sui-framework/packages/sui-framework"};return t[e]||t[e.toLowerCase()]}};async function C(d,e,t,i="mainnet",n){return new F(t,i,n||null).resolve(d,e)}function Q(d){try{let e=new URL(d);if(e.hostname!=="github.com")return null;let t=e.pathname.split("/").filter(Boolean);if(t.length<2)return null;let i=t[0],n=t[1],o="main",s;return t.length>=4&&t[2]==="tree"&&(o=t[3],t.length>4&&(s=t.slice(4).join("/"))),{owner:i,repo:n,ref:o,subdir:s}}catch{return null}}async function B(d,e){let t=Q(d);if(!t)throw new Error(`Invalid GitHub URL: ${d}`);let i=e?.fetcher||new P(e?.githubToken),n=e?.includeLock!==!1,o=`https://github.com/${t.owner}/${t.repo}.git`,s=await i.fetch(o,t.ref,t.subdir,`root:${t.owner}/${t.repo}`);if(Object.defineProperty(s,"__rootGit",{value:{git:o,rev:t.ref,subdir:t.subdir},enumerable:!1}),!n&&s["Move.lock"]){let{"Move.lock":c,...a}=s;return a}return s}var O;async function R(d){return O||(O=import("./sui_move_wasm.js").then(async e=>(d?await e.default({module_or_path:d}):await e.default(),e))),O}function T(d){return{error:d instanceof Error?d.message:typeof d=="string"?d:"Unknown error"}}function _(d){if(typeof d!="object"||d===null)throw new Error("Unexpected compile result shape from wasm");let e=d;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 X(d){let e=t=>{let i=t.startsWith("0x")?t.slice(2):t,n=i.length%2===0?i:`0${i}`,o=[];for(let s=0;s<n.length;s+=2){let c=parseInt(n.slice(s,s+2),16);if(Number.isNaN(c))throw new Error("invalid hex digest");o.push(c)}return o};try{let t=JSON.parse(d);if(!t.modules||!t.dependencies||!t.digest)throw new Error("missing fields in compiler output");let i=typeof t.digest=="string"?e(t.digest):Array.from(t.digest);return{modules:t.modules,dependencies:t.dependencies,digest:i}}catch(t){return T(t)}}function Y(d){try{let e=JSON.parse(d);for(let t of e){let i=t.addressMapping?.[t.name]??(()=>{let n=Object.entries(t.files).find(([s])=>s.endsWith("Move.toml"));if(!n)return;let o=b(n[1]);return o.addresses&&o.addresses[t.name]||o.package?.published_at||o.package?.["published-at"]})()}}catch{}}async function Z(d){await R(d?.wasm)}async function j(d){let e=d.files["Move.toml"]||"",t=d.rootGit||d.files.__rootGit,i=await C(e,{...d.files,"Move.toml":e},new P(d.githubToken),d.network,t?{type:"git",git:t.git,rev:t.rev,subdir:t.subdir}:void 0);return{files:i.files,dependencies:i.dependencies}}async function ee(d){try{let e=d.resolvedDependencies?d.resolvedDependencies:await j(d),t=await R(d.wasm);Y(e.dependencies);let i=d.ansiColor&&typeof t.compile_with_color=="function"?t.compile_with_color(e.files,e.dependencies,!0):t.compile(e.files,e.dependencies),n=_(i),o=n.success(),s=n.output();return o?X(s):T(s)}catch(e){return T(e)}}async function te(d){return(await R(d?.wasm)).sui_move_version()}async function ne(d){return(await R(d?.wasm)).sui_version()}async function ie(d){return R(d?.wasm)}async function se(d,e,t){let i=await R(t?.wasm),n=t?.ansiColor&&typeof i.compile_with_color=="function"?i.compile_with_color(d,e,!0):i.compile(d,e),o=_(n);return{success:o.success(),output:o.output()}}0&&(module.exports={buildMovePackage,compileRaw,fetchPackageFromGitHub,getSuiMoveVersion,getSuiVersion,getWasmBindings,initMoveCompiler,resolveDependencies});
package/dist/index.d.cts CHANGED
@@ -10,8 +10,16 @@ declare class Fetcher {
10
10
  /** Fetcher that retrieves files from public GitHub repositories via fetch(). */
11
11
  declare class GitHubFetcher extends Fetcher {
12
12
  private cache;
13
- constructor();
14
- fetch(gitUrl: string, rev: string, subdir?: string): Promise<Record<string, string>>;
13
+ private treeCache;
14
+ private rateLimitRemaining;
15
+ private rateLimitReset;
16
+ private token;
17
+ constructor(token?: string);
18
+ /**
19
+ * Update rate limit info from response headers
20
+ */
21
+ private updateRateLimit;
22
+ fetch(gitUrl: string, rev: string, subdir?: string, context?: string): Promise<Record<string, string>>;
15
23
  fetchFile(gitUrl: string, rev: string, path: string): Promise<string | null>;
16
24
  private fetchContent;
17
25
  private parseGitUrl;
@@ -45,6 +53,8 @@ declare class GitHubFetcher extends Fetcher {
45
53
  declare function fetchPackageFromGitHub(url: string, options?: {
46
54
  /** Custom fetcher instance (default: GitHubFetcher) */
47
55
  fetcher?: GitHubFetcher;
56
+ /** Optional GitHub token to raise API limits (used when fetcher not provided). */
57
+ githubToken?: string;
48
58
  /** Include Move.lock file (default: true) */
49
59
  includeLock?: boolean;
50
60
  }): Promise<Record<string, string>>;
@@ -60,6 +70,14 @@ interface BuildInput {
60
70
  files: Record<string, string>;
61
71
  /** Optional custom URL for the wasm binary. Defaults to bundled wasm next to this module. */
62
72
  wasm?: string | URL;
73
+ /** Optional hint for the root package git source (enables resolving local deps from Move.lock). */
74
+ rootGit?: {
75
+ git: string;
76
+ rev: string;
77
+ subdir?: string;
78
+ };
79
+ /** Optional GitHub token to raise API limits when resolving dependencies. */
80
+ githubToken?: string;
63
81
  /** Emit ANSI color codes in diagnostics when available. */
64
82
  ansiColor?: boolean;
65
83
  /** Network environment (mainnet, testnet, devnet). Defaults to mainnet. */
@@ -68,16 +86,14 @@ interface BuildInput {
68
86
  resolvedDependencies?: ResolvedDependencies;
69
87
  }
70
88
  interface BuildSuccess {
71
- success: true;
72
89
  /** Base64-encoded bytecode modules. */
73
90
  modules: string[];
74
91
  /** Hex-encoded dependency IDs. */
75
92
  dependencies: string[];
76
- /** Hex-encoded Blake2b-256 package digest. */
77
- digest: string;
93
+ /** Blake2b-256 package digest as byte array (matches Sui CLI JSON). */
94
+ digest: number[];
78
95
  }
79
96
  interface BuildFailure {
80
- success: false;
81
97
  error: string;
82
98
  }
83
99
  type WasmModule = typeof __sui_move_wasm_js;
package/dist/index.d.ts CHANGED
@@ -10,8 +10,16 @@ declare class Fetcher {
10
10
  /** Fetcher that retrieves files from public GitHub repositories via fetch(). */
11
11
  declare class GitHubFetcher extends Fetcher {
12
12
  private cache;
13
- constructor();
14
- fetch(gitUrl: string, rev: string, subdir?: string): Promise<Record<string, string>>;
13
+ private treeCache;
14
+ private rateLimitRemaining;
15
+ private rateLimitReset;
16
+ private token;
17
+ constructor(token?: string);
18
+ /**
19
+ * Update rate limit info from response headers
20
+ */
21
+ private updateRateLimit;
22
+ fetch(gitUrl: string, rev: string, subdir?: string, context?: string): Promise<Record<string, string>>;
15
23
  fetchFile(gitUrl: string, rev: string, path: string): Promise<string | null>;
16
24
  private fetchContent;
17
25
  private parseGitUrl;
@@ -45,6 +53,8 @@ declare class GitHubFetcher extends Fetcher {
45
53
  declare function fetchPackageFromGitHub(url: string, options?: {
46
54
  /** Custom fetcher instance (default: GitHubFetcher) */
47
55
  fetcher?: GitHubFetcher;
56
+ /** Optional GitHub token to raise API limits (used when fetcher not provided). */
57
+ githubToken?: string;
48
58
  /** Include Move.lock file (default: true) */
49
59
  includeLock?: boolean;
50
60
  }): Promise<Record<string, string>>;
@@ -60,6 +70,14 @@ interface BuildInput {
60
70
  files: Record<string, string>;
61
71
  /** Optional custom URL for the wasm binary. Defaults to bundled wasm next to this module. */
62
72
  wasm?: string | URL;
73
+ /** Optional hint for the root package git source (enables resolving local deps from Move.lock). */
74
+ rootGit?: {
75
+ git: string;
76
+ rev: string;
77
+ subdir?: string;
78
+ };
79
+ /** Optional GitHub token to raise API limits when resolving dependencies. */
80
+ githubToken?: string;
63
81
  /** Emit ANSI color codes in diagnostics when available. */
64
82
  ansiColor?: boolean;
65
83
  /** Network environment (mainnet, testnet, devnet). Defaults to mainnet. */
@@ -68,16 +86,14 @@ interface BuildInput {
68
86
  resolvedDependencies?: ResolvedDependencies;
69
87
  }
70
88
  interface BuildSuccess {
71
- success: true;
72
89
  /** Base64-encoded bytecode modules. */
73
90
  modules: string[];
74
91
  /** Hex-encoded dependency IDs. */
75
92
  dependencies: string[];
76
- /** Hex-encoded Blake2b-256 package digest. */
77
- digest: string;
93
+ /** Blake2b-256 package digest as byte array (matches Sui CLI JSON). */
94
+ digest: number[];
78
95
  }
79
96
  interface BuildFailure {
80
- success: false;
81
97
  error: string;
82
98
  }
83
99
  type WasmModule = typeof __sui_move_wasm_js;
package/dist/index.js CHANGED
@@ -1,28 +1,28 @@
1
- var D=class{async fetch(e,t,i){throw new Error("Not implemented")}async fetchFile(e,t,i){throw new Error("Not implemented")}},k=class extends D{constructor(){super(),this.cache=new Map}async fetch(e,t,i){let{owner:n,repo:s}=this.parseGitUrl(e);if(!n||!s)throw new Error(`Invalid git URL: ${e}`);let o=`https://api.github.com/repos/${n}/${s}/git/trees/${t}?recursive=1`,c;try{let a=await fetch(o);if(!a.ok)throw a.status===403||a.status===429?new Error("GitHub API rate limit exceeded."):new Error(`Failed to fetch tree: ${a.statusText}`);c=await a.json()}catch{return{}}let r={},l=[];for(let a of c.tree){if(a.type!=="blob")continue;let p=a.path;if(i){if(!a.path.startsWith(i))continue;p=a.path.slice(i.length),p.startsWith("/")&&(p=p.slice(1))}if(!p.endsWith(".move")&&p!=="Move.toml"&&p!=="Move.lock"&&!p.match(/^Move\.(mainnet|testnet|devnet)\.toml$/))continue;let m=`https://raw.githubusercontent.com/${n}/${s}/${t}/${a.path}`,g=this.fetchContent(m).then(u=>{u&&(r[p]=u)});l.push(g)}return await Promise.all(l),r}async fetchFile(e,t,i){let{owner:n,repo:s}=this.parseGitUrl(e);if(!n||!s)throw new Error(`Invalid git URL: ${e}`);let o=`https://raw.githubusercontent.com/${n}/${s}/${t}/${i}`;return this.fetchContent(o)}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 i=await t.text();return this.cache.set(e,i),i}catch{return null}}parseGitUrl(e){try{let i=new URL(e).pathname.split("/").filter(n=>n);if(i.length>=2){let n=i[1];return n.endsWith(".git")&&(n=n.slice(0,-4)),{owner:i[0],repo:n}}}catch{}return{owner:null,repo:null}}};function I(d){let e=!1,t="";for(let i=0;i<d.length;i++){let n=d[i];if((n==='"'||n==="'")&&(!e||n===t)&&(e=!e,t=n),!e&&n==="#")return d.slice(0,i)}return d}function M(d){let e=d.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 L(d){let e={},t=d.trim().replace(/^\{/,"").replace(/\}$/,""),i="",n=!1,s="",o=[];for(let c=0;c<t.length;c++){let r=t[c];if((r==='"'||r==="'")&&(!n||r===s)&&(n=!n,s=r),!n&&r===","){o.push(i),i="";continue}i+=r}i.trim()&&o.push(i);for(let c of o){let r=c.indexOf("=");if(r===-1)continue;let l=c.slice(0,r).trim(),a=c.slice(r+1).trim();e[l]=M(a)}return e}function C(d){let e=[],t=d.trim().replace(/^\[/,"").replace(/\]$/,""),i="",n=!1,s="",o=0;for(let c=0;c<t.length;c++){let r=t[c];if((r==='"'||r==="'")&&(!n||r===s)&&(n=!n,s=n?r:""),!n&&(r==="{"&&o++,r==="}"&&o--,r===","&&o===0)){i.trim()&&e.push(T(i.trim())),i="";continue}i+=r}return i.trim()&&e.push(T(i.trim())),e}function T(d){return d.startsWith("{")?L(d):M(d)}function y(d){let e={},t=null,i=!1,n=d.split(/\r?\n/);function s(o,c){let r=o;for(let l of c){if(!(l in r))return;r=r[l]}return r}for(let o of n){let c=I(o).trim();if(!c)continue;let r=c.match(/^\[\[([^\]]+)\]\]$/);if(r){t=r[1].trim(),i=!0;let u=t.split("."),f=e;for(let v=0;v<u.length-1;v++){let R=u[v];R in f||(f[R]={}),f=f[R]}let h=u[u.length-1];Array.isArray(f[h])||(f[h]=[]),f[h].push({});continue}let l=c.match(/^\[([^\]]+)\]$/);if(l){t=l[1].trim(),i=!1;continue}let a=c.indexOf("=");if(a===-1||!t)continue;let p=c.slice(0,a).trim(),m=c.slice(a+1).trim(),g;if(m.startsWith("{")?g=L(m):m.startsWith("[")?g=C(m):g=M(m),i){let u=t.split("."),f=s(e,u);if(Array.isArray(f)&&f.length>0){let h=f[f.length-1];h[p]=g}}else{let u=t.split("."),f=e;for(let v of u)v in f||(f[v]={}),f=f[v];let h=t==="package"?p.replace(/-/g,"_"):p;f[h]=g}}return e}var b=class{constructor(e){this.packageTable=new Map;this.graph=new Map;this.alwaysDeps=new Set(["Sui","MoveStdlib"]);this.root=e}addPackage(e){this.packageTable.set(e.id.name,e),this.graph.has(e.id.name)||this.graph.set(e.id.name,new Set)}addDependency(e,t,i){this.graph.has(e)||this.graph.set(e,new Set),this.graph.get(e).add(t)}getPackage(e){return this.packageTable.get(e)}getAllPackages(){return Array.from(this.packageTable.values())}getImmediateDependencies(e){return this.graph.get(e)||new Set}getTransitiveDependencies(e){let t=new Set,i=new Set,n=s=>{if(i.has(s))return;i.add(s),t.add(s);let o=this.graph.get(s);if(o)for(let c of o)n(c)};return n(e),t.delete(e),t}topologicalOrder(){let e=new Set,t=[],i=n=>{if(e.has(n))return;e.add(n);let s=this.graph.get(n);if(s)for(let o of s)i(o);t.push(n)};i(this.root);for(let n of this.packageTable.keys())i(n);return t}detectCycle(){let e=new Set,t=new Set,i=new Map,n=s=>{e.add(s),t.add(s);let o=this.graph.get(s);if(o)for(let c of o)if(e.has(c)){if(t.has(c)){let r=[c],l=s;for(;l!==c;)r.unshift(l),l=i.get(l);return r.unshift(c),r}}else{i.set(c,s);let r=n(c);if(r)return r}return t.delete(s),null};for(let s of this.packageTable.keys())if(!e.has(s)){let o=n(s);if(o)return o}return null}getRootPackage(){return this.packageTable.get(this.root)}getRootName(){return this.root}isAlwaysDep(e){return this.alwaysDeps.has(e)}};var P=class{constructor(e,t={}){this.unifiedAddressTable=new Map;this.packageResolvedTables=new Map;this.graph=e,this.buildConfig=t}async resolve(){let e=this.graph.topologicalOrder();for(let t of e){let i=this.graph.getPackage(t);if(i)for(let[n,s]of Object.entries(i.manifest.addresses)){let o=this.normalizeAddress(s);this.unifiedAddressTable.has(n)&&this.unifiedAddressTable.get(n)!==o||this.unifiedAddressTable.set(n,o)}}for(let t of this.graph.getAllPackages()){let i={};for(let[n,s]of this.unifiedAddressTable.entries())i[n]=s;this.packageResolvedTables.set(t.id.name,i),t.resolvedTable=i}}normalizeAddress(e){if(!e)return e;let t=e.trim();return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}getUnifiedAddressTable(){let e={};for(let[t,i]of this.unifiedAddressTable.entries())e[t]=i;return e}getPackageResolvedTable(e){return this.packageResolvedTables.get(e)}getGraph(){return this.graph}topologicalOrder(){return this.graph.topologicalOrder()}getRootName(){return this.graph.getRootName()}getPackage(e){return this.graph.getPackage(e)}getImmediateDependencies(e){return this.graph.getImmediateDependencies(e)}};var S=class{constructor(e){this.dependencies=[];this.resolvedGraph=e,this.rootPackageName=e.getRootName()}async compute(e){if(!this.resolvedGraph.getPackage(this.rootPackageName))throw new Error(`Root package '${this.rootPackageName}' not found`);let i=this.resolvedGraph.getImmediateDependencies(this.rootPackageName),n=this.resolvedGraph.topologicalOrder();for(let s of n){if(s===this.rootPackageName)continue;let o=this.resolvedGraph.getPackage(s);if(!o)continue;let c=e.get(s)||{},r=this.extractSourcePaths(s,c),l=o.manifest.edition||"legacy",a={name:s,isImmediate:i.has(s),sourcePaths:r,addressMapping:o.resolvedTable||{},compilerConfig:{edition:l,flavor:"sui"},moduleFormat:r.length>0?"Source":"Bytecode",edition:l};this.dependencies.push(a)}}extractSourcePaths(e,t){let i=[];for(let n of Object.keys(t))n.endsWith("Move.toml")||n.endsWith("Move.lock")||n.endsWith(".move")&&i.push(n);return i}toPackageGroupedFormat(e){let t=[];for(let i of this.dependencies){let n=e.get(i.name)||{},s={};for(let[o,c]of Object.entries(n)){if(o.endsWith("Move.lock"))continue;let r=`dependencies/${i.name}/${o}`;if(o.endsWith("Move.toml")){let l=this.reconstructDependencyMoveToml(i.name,c,i.edition,i.addressMapping);s[r]=l}else s[r]=c}t.push({name:i.name,files:s,edition:i.edition})}return t}reconstructDependencyMoveToml(e,t,i,n){let s=t.split(`
2
- `),o=[],c=[],r=!1,l=!1;for(let g of s){let u=g.trim();if(u.startsWith("[package]")){r=!0,l=!1;continue}if(u.startsWith("[dependencies]")){r=!1,l=!0;continue}if(u.startsWith("[")){r=!1,l=!1;continue}r&&u&&o.push(g),l&&u&&c.push(g)}let a=`[package]
3
- `,p=!1,m=!1;for(let g of o)if(g.includes("name ="))a+=g+`
4
- `,p=!0;else if(g.includes("version ="))a+=g+`
5
- `,m=!0;else{if(g.includes("edition ="))continue;a+=g+`
6
- `}p||(a+=`name = "${e}"
7
- `),m||(a+=`version = "0.0.0"
8
- `),a+=`edition = "${i}"
9
- `,a+=`
1
+ var A=class{async fetch(e,t,i){throw new Error("Not implemented")}async fetchFile(e,t,i){throw new Error("Not implemented")}},P=class extends A{constructor(t){super();this.rateLimitRemaining=60;this.rateLimitReset=0;this.cache=new Map,this.treeCache=new Map,this.token=t}updateRateLimit(t){let i=t.headers.get("x-ratelimit-remaining"),n=t.headers.get("x-ratelimit-reset");i&&(this.rateLimitRemaining=parseInt(i,10)),n&&(this.rateLimitReset=parseInt(n,10)*1e3)}async fetch(t,i,n,o){let{owner:s,repo:c}=this.parseGitUrl(t);if(!s||!c)throw new Error(`Invalid git URL: ${t}`);let a=`${s}/${c}@${i}`,d=`https://api.github.com/repos/${s}/${c}/git/trees/${i}?recursive=1`,r;if(this.treeCache.has(a))r=this.treeCache.get(a);else{let p=null;for(let m=1;m<=3;m++)try{if(m>1){let k=Math.pow(2,m-1)*1e3;await new Promise(v=>setTimeout(v,k))}let y={};this.token&&(y.Authorization=`Bearer ${this.token}`);let h=await fetch(d,{headers:y});if(this.updateRateLimit(h),!h.ok){if(h.status===403||h.status===429){let k=new Date(this.rateLimitReset);throw new Error(`GitHub API rate limit exceeded. Resets at ${k.toLocaleTimeString()}`)}if(h.status>=500&&h.status<600&&m<3){p=new Error(`Failed to fetch tree: ${h.statusText}`);continue}throw new Error(`Failed to fetch tree: ${h.statusText}`)}r=await h.json(),this.treeCache.set(a,r);break}catch(y){if(p=y instanceof Error?y:new Error(String(y)),m===3)return{}}if(p)return{}}let l={},f=[];for(let g of r.tree){if(g.type!=="blob")continue;let p=g.path;if(n){if(!g.path.startsWith(n))continue;p=g.path.slice(n.length),p.startsWith("/")&&(p=p.slice(1))}if(!p.endsWith(".move")&&p!=="Move.toml"&&p!=="Move.lock"&&!p.match(/^Move\.(mainnet|testnet|devnet)\.toml$/))continue;let m=`https://raw.githubusercontent.com/${s}/${c}/${i}/${g.path}`,y=this.fetchContent(m).then(h=>{h&&(l[p]=h)});f.push(y)}if(await Promise.all(f),l["Move.toml"]){let g=l["Move.toml"].trim();if(g.match(/^Move\.(mainnet|testnet|devnet)\.toml$/)&&!g.includes("[")&&!g.includes("=")){let p=g,m=n?`${n}/${p}`.replace(/\/+/g,"/"):p,y=`https://raw.githubusercontent.com/${s}/${c}/${i}/${m}`,h=await this.fetchContent(y);h&&(l["Move.toml"]=h,l[p]=h)}}return l}async fetchFile(t,i,n){let{owner:o,repo:s}=this.parseGitUrl(t);if(!o||!s)throw new Error(`Invalid git URL: ${t}`);let c=`https://raw.githubusercontent.com/${o}/${s}/${i}/${n}`;return this.fetchContent(c)}async fetchContent(t){if(this.cache.has(t))return this.cache.get(t)??null;try{let i={},n=typeof window<"u",o=t.startsWith("https://api.github.com/");this.token&&(!n||o)&&(i.Authorization=`Bearer ${this.token}`);let s=await fetch(t,{headers:i});if(!s.ok)return null;let c=await s.text();return this.cache.set(t,c),c}catch{return null}}parseGitUrl(t){try{let n=new URL(t).pathname.split("/").filter(o=>o);if(n.length>=2){let o=n[1];return o.endsWith(".git")&&(o=o.slice(0,-4)),{owner:n[0],repo:o}}}catch{}return{owner:null,repo:null}}};function S(u){let e=!1,t="";for(let i=0;i<u.length;i++){let n=u[i];if((n==='"'||n==="'")&&(!e||n===t)&&(e=!e,t=n),!e&&n==="#")return u.slice(0,i)}return u}function I(u){let e=u.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 L(u){let e={},t=u.trim().replace(/^\{/,"").replace(/\}$/,""),i="",n=!1,o="",s=[];for(let c=0;c<t.length;c++){let a=t[c];if((a==='"'||a==="'")&&(!n||a===o)&&(n=!n,o=a),!n&&a===","){s.push(i),i="";continue}i+=a}i.trim()&&s.push(i);for(let c of s){let a=c.indexOf("=");if(a===-1)continue;let d=c.slice(0,a).trim(),r=c.slice(a+1).trim();e[d]=I(r)}return e}function C(u){let e=[],t=u.trim().replace(/^\[/,"").replace(/\]$/,""),i="",n=!1,o="",s=0;for(let c=0;c<t.length;c++){let a=t[c];if((a==='"'||a==="'")&&(!n||a===o)&&(n=!n,o=n?a:""),!n&&(a==="{"&&s++,a==="}"&&s--,a===","&&s===0)){i.trim()&&e.push(T(i.trim())),i="";continue}i+=a}return i.trim()&&e.push(T(i.trim())),e}function T(u){return u.startsWith("{")?L(u):I(u)}function b(u){let e={},t=null,i=!1,n=u.split(/\r?\n/),o=[],s=0;for(;s<n.length;){let a=S(n[s]);if(a.match(/=\s*\[\s*$/)||a.includes("=")&&a.includes("[")&&!a.includes("]")){let d=a;for(s++;s<n.length&&!d.includes("]");)d+=" "+S(n[s]).trim(),s++;s<n.length&&d.includes("[")&&!d.includes("]")&&(d+=" "+S(n[s]).trim(),s++),o.push(d)}else o.push(a),s++}function c(a,d){let r=a;for(let l of d){if(!(l in r))return;r=r[l]}return r}for(let a of o){let d=S(a).trim();if(!d)continue;let r=d.match(/^\[\[([^\]]+)\]\]$/);if(r){t=r[1].trim(),i=!0;let y=t.split("."),h=e;for(let v=0;v<y.length-1;v++){let w=y[v];w in h||(h[w]={}),h=h[w]}let k=y[y.length-1];Array.isArray(h[k])||(h[k]=[]),h[k].push({});continue}let l=d.match(/^\[([^\]]+)\]$/);if(l){t=l[1].trim(),i=!1;continue}let f=d.indexOf("=");if(f===-1||!t)continue;let g=d.slice(0,f).trim(),p=d.slice(f+1).trim(),m;if(p.startsWith("{")?m=L(p):p.startsWith("[")?m=C(p):m=I(p),i){let y=t.split("."),h=c(e,y);if(Array.isArray(h)&&h.length>0){let k=h[h.length-1];k[g]=m}}else{let y=t.split("."),h=e;for(let v of y)v in h||(h[v]={}),h=h[v];let k=t==="package"?g.replace(/-/g,"_"):g;h[k]=m}}return e}var M=class{constructor(e){this.packageTable=new Map;this.graph=new Map;this.alwaysDeps=new Set(["Sui","MoveStdlib","SuiSystem","Bridge"]);this.lockfileOrder=[];this.root=e}setLockfileOrder(e){this.lockfileOrder=e}addPackage(e){this.packageTable.set(e.id.name,e),this.graph.has(e.id.name)||this.graph.set(e.id.name,new Set)}addDependency(e,t,i){this.graph.has(e)||this.graph.set(e,new Set),this.graph.get(e).add(t)}getPackage(e){return this.packageTable.get(e)}getAllPackages(){return Array.from(this.packageTable.values())}getImmediateDependencies(e){return this.graph.get(e)||new Set}getTransitiveDependencies(e){let t=new Set,i=new Set,n=o=>{if(i.has(o))return;i.add(o),t.add(o);let s=this.graph.get(o);if(s)for(let c of s)n(c)};return n(e),t.delete(e),t}topologicalOrder(){if(!this.lockfileOrder.length)return this.topologicalOrderDFS().filter(s=>s!==this.root);let e=new Set,t=new Set,i=o=>{if(t.has(o))return;t.add(o),e.add(o);let s=this.graph.get(o);if(s)for(let c of s)i(c)};i(this.root);let n=[];for(let o of this.lockfileOrder)o!==this.root&&e.has(o)&&n.push(o);return n}topologicalOrderDFS(){let e=new Set,t=[],i=n=>{if(e.has(n))return;e.add(n);let o=this.graph.get(n);if(o)for(let s of Array.from(o))i(s);t.push(n)};i(this.root);for(let n of this.packageTable.keys())i(n);return t}detectCycle(){let e=new Set,t=new Set,i=new Map,n=o=>{e.add(o),t.add(o);let s=this.graph.get(o);if(s)for(let c of s)if(e.has(c)){if(t.has(c)){let a=[c],d=o;for(;d!==c;)a.unshift(d),d=i.get(d);return a.unshift(c),a}}else{i.set(c,o);let a=n(c);if(a)return a}return t.delete(o),null};for(let o of this.packageTable.keys())if(!e.has(o)){let s=n(o);if(s)return s}return null}getRootPackage(){return this.packageTable.get(this.root)}getRootName(){return this.root}isAlwaysDep(e){return this.alwaysDeps.has(e)}};var D=class{constructor(e,t={}){this.unifiedAddressTable=new Map;this.packageResolvedTables=new Map;this.graph=e,this.buildConfig=t}async resolve(){let t=[this.graph.getRootName(),...this.graph.topologicalOrder()];for(let i of t){let n=this.graph.getPackage(i);if(n)for(let[o,s]of Object.entries(n.manifest.addresses)){let c=this.normalizeAddress(s);this.unifiedAddressTable.has(o)&&this.unifiedAddressTable.get(o)!==c||this.unifiedAddressTable.set(o,c)}}for(let i of this.graph.getAllPackages()){let n={};for(let[o,s]of this.unifiedAddressTable.entries())n[o]=s;this.packageResolvedTables.set(i.id.name,n),i.resolvedTable=n}}normalizeAddress(e){if(!e)return e;let t=e.trim();return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}getUnifiedAddressTable(){let e={};for(let[t,i]of this.unifiedAddressTable.entries())e[t]=i;return e}getPackageResolvedTable(e){return this.packageResolvedTables.get(e)}getGraph(){return this.graph}topologicalOrder(){return this.graph.topologicalOrder()}getRootName(){return this.graph.getRootName()}getPackage(e){return this.graph.getPackage(e)}getImmediateDependencies(e){return this.graph.getImmediateDependencies(e)}};var $=class{constructor(e){this.dependencies=[];this.resolvedGraph=e,this.rootPackageName=e.getRootName()}async compute(e){if(!this.resolvedGraph.getPackage(this.rootPackageName))throw new Error(`Root package '${this.rootPackageName}' not found`);let i=this.resolvedGraph.getImmediateDependencies(this.rootPackageName),n=this.resolvedGraph.topologicalOrder(),o=new Set(["Bridge","SuiSystem"]);for(let s of n){if(s===this.rootPackageName)continue;let c=this.resolvedGraph.getPackage(s);if(!c||o.has(s))continue;let a=e.get(s)||{},d=this.extractSourcePaths(s,a),r=c.manifest.edition||"legacy",l=c.manifest.latestPublishedId||c.manifest.originalId||c.manifest.publishedAt||c.resolvedTable?.[s],f={name:s,isImmediate:i.has(s),sourcePaths:d,addressMapping:c.resolvedTable||{},compilerConfig:{edition:r,flavor:"sui"},moduleFormat:d.length>0?"Source":"Bytecode",edition:r,publishedIdForOutput:l};this.dependencies.push(f)}}extractSourcePaths(e,t){let i=Object.keys(t).filter(s=>s.endsWith("Move.toml")||s.endsWith("Move.lock")?!1:s.endsWith(".move")),n=new TextEncoder,o=(s,c)=>{let a=n.encode(`/vfs/deps/${e}/${s}`),d=n.encode(`/vfs/deps/${e}/${c}`),r=Math.min(a.length,d.length);for(let l=0;l<r;l++)if(a[l]!==d[l])return a[l]-d[l];return a.length-d.length};return i.sort(o),i}toPackageGroupedFormat(e){let t=[];for(let i of this.dependencies){let n=e.get(i.name)||{},o={};for(let[s,c]of Object.entries(n)){if(s.endsWith("Move.lock"))continue;let a=`dependencies/${i.name}/${s}`;s.endsWith("Move.toml")?o[a]=this.reconstructDependencyMoveToml(i.name,c,i.edition,i.addressMapping):o[a]=c}t.push({name:i.name,files:o,edition:i.edition,addressMapping:i.addressMapping,publishedIdForOutput:i.publishedIdForOutput})}return t}reconstructDependencyMoveToml(e,t,i,n){let o=(t||"").split(`
2
+ `),s=[],c=[],a=!1,d=!1;for(let g of o){let p=g.trim();if(p.startsWith("[package]")){a=!0,d=!1;continue}if(p.startsWith("[dependencies]")){a=!1,d=!0;continue}if(p.startsWith("[")){a=!1,d=!1;continue}a&&p&&s.push(g),d&&p&&c.push(g)}let r=`[package]
3
+ `,l=!1,f=!1;for(let g of s)if(g.includes("name ="))r+=g+`
4
+ `,l=!0;else if(g.includes("version ="))r+=g+`
5
+ `,f=!0;else{if(g.includes("edition ="))continue;r+=g+`
6
+ `}l||(r+=`name = "${e}"
7
+ `),f||(r+=`version = "0.0.0"
8
+ `),r+=`edition = "${i}"
9
+ `,r+=`
10
10
  [dependencies]
11
- `;for(let g of c)a+=g+`
12
- `;a+=`
11
+ `;for(let g of c)r+=g+`
12
+ `;r+=`
13
13
  [addresses]
14
- `;for(let[g,u]of Object.entries(n))a+=`${g} = "${u}"
15
- `;return a}getUnifiedAddressTable(){return this.resolvedGraph.getUnifiedAddressTable()}};var x=class{constructor(e,t="mainnet"){this.visited=new Set;this.packageNameCache=new Map;this.packageFiles=new Map;this.fetcher=e,this.network=t}async resolve(e,t){let i=y(e),n=i.package?.name||"RootPackage",s=i.package?.edition;if(t["Move.lock"]){let h=y(t["Move.lock"]);h.move?.["toolchain-version"]?.edition&&(s=h.move["toolchain-version"].edition)}let o=s||"2024.beta",c=new b(n),r=await this.buildPackage(n,null,e,t);s&&(r.manifest.edition=s),c.addPackage(r),this.packageFiles.set(n,t),await this.loadFromLockfile(c,r,t)||await this.buildDependencyGraph(c,r);let a=c.detectCycle();if(a)throw new Error(`Dependency cycle detected: ${a.join(" \u2192 ")}`);let p=new P(c,{});await p.resolve();let m=new S(p);await m.compute(this.packageFiles);let g=this.reconstructMoveToml(i,p.getUnifiedAddressTable(),!0,o),u={...t};delete u["Move.lock"],u["Move.toml"]=g;let f=m.toPackageGroupedFormat(this.packageFiles);return{files:JSON.stringify(u),dependencies:JSON.stringify(f)}}async buildPackage(e,t,i,n){let s=y(i),o={name:s.package?.name||e,version:s.package?.version||"0.0.0",edition:s.package?.edition,publishedAt:s.package?.published_at,addresses:s.addresses||{},dependencies:s.dependencies||{},devDependencies:s["dev-dependencies"]},c=new Map;if(o.dependencies)for(let[l,a]of Object.entries(o.dependencies)){let p=this.parseDependencyInfo(a);p&&c.set(l,p)}return{id:{name:o.name,version:o.version,source:t||{type:"local"}},manifest:o,dependencies:c,devDependencies:new Map}}parseDependencyInfo(e){return e?e.git&&e.rev?{source:{type:"git",git:e.git,rev:e.rev,subdir:e.subdir}}:e.local?{source:{type:"local",local:e.local}}:null:null}async buildDependencyGraph(e,t){for(let[i,n]of t.dependencies.entries()){if(n.source.type==="local")if(t.id.source.type==="git"&&n.source.local){let g=t.id.source.subdir||"",u=n.source.local,f=this.resolveRelativePath(g,u);n.source={type:"git",git:t.id.source.git,rev:t.id.source.rev,subdir:f}}else continue;if(n.source.type!=="git")continue;let s=`${n.source.git}|${n.source.rev}|${n.source.subdir||""}`;if(this.visited.has(s)){let g=this.findPackageBySource(e,n.source);g&&e.addDependency(t.id.name,g.id.name,n);continue}this.visited.add(s);let o=n.source.subdir;!o&&n.source.git&&this.isSuiRepo(n.source.git)&&(o=this.inferSuiFrameworkSubdir(i),o&&(n.source.subdir=o));let c=await this.fetcher.fetch(n.source.git,n.source.rev,o),r=null,l=`Move.${this.network}.toml`;for(let[g,u]of Object.entries(c))if(g.endsWith(l)){r=u;break}if(!r){for(let[g,u]of Object.entries(c))if(g.endsWith("Move.toml")){r=u;break}}if(!r)continue;let a=await this.buildPackage(i,n.source,r,c),p=this.packageNameCache.get(a.manifest.name);if(p){let g=this.findPackageBySource(e,p);g&&e.addDependency(t.id.name,g.id.name,n);continue}this.packageNameCache.set(a.manifest.name,n.source);let m=c["Move.lock"];if(m){let g=y(m);if(g.env?.[this.network]){let u=g.env[this.network]["latest-published-id"]||g.env[this.network]["original-published-id"];u&&(a.manifest.publishedAt=u,a.manifest.addresses[a.manifest.name]=this.normalizeAddress(u))}a.manifest.edition||(a.manifest.edition="legacy")}if(!a.manifest.publishedAt){let g={Sui:"0x2",MoveStdlib:"0x1",SuiSystem:"0x3",Bridge:"0xb"};g[i]&&(a.manifest.publishedAt=g[i])}e.addPackage(a),e.addDependency(t.id.name,a.id.name,n),this.packageFiles.set(a.id.name,c),await this.buildDependencyGraph(e,a)}}findPackageBySource(e,t){for(let i of e.getAllPackages()){let n=i.id.source;if(n.type===t.type&&n.git===t.git&&n.rev===t.rev&&n.subdir===t.subdir)return i}}resolveRelativePath(e,t){let i=e?e.split("/").filter(Boolean):[],n=t.split("/").filter(Boolean),s=[...i];for(let o of n)o===".."?s.length>0&&s.pop():o!=="."&&s.push(o);return s.join("/")}async computeManifestDigest(e){let i=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",i);return Array.from(new Uint8Array(n)).map(c=>c.toString(16).padStart(2,"0")).join("").toUpperCase()}async loadFromLockfile(e,t,i){let n=i["Move.lock"];if(!n)return!1;let s=y(n),o=s.pinned?.[this.network];if(!o)return!1;let c=i["Move.toml"];if(c&&s.move?.manifest_digest&&await this.computeManifestDigest(c)!==s.move.manifest_digest)return!1;let r=new Map;for(let[l,a]of Object.entries(o)){let p=this.lockfileSourceToDependencySource(a.source);if(!p)continue;let m=await this.fetchFromSource(p);if(!m)return!1;let g=m["Move.toml"];if(!g||a["manifest-digest"]&&await this.computeManifestDigest(g)!==a["manifest-digest"])return!1;let u=await this.buildPackage(l,p,g,m);r.set(l,u),this.packageFiles.set(u.manifest.name,m),(p.type!=="local"||!("root"in a.source))&&e.addPackage(u)}for(let[l,a]of Object.entries(o)){let p=r.get(l);if(p&&a.deps)for(let[m,g]of Object.entries(a.deps)){let u=r.get(g);if(u){let f=p.dependencies.get(m);f&&e.addDependency(p.id.name,u.id.name,f)}}}return!0}lockfileSourceToDependencySource(e){return"git"in e?{type:"git",git:e.git,rev:e.rev,subdir:e.subdir}:"local"in e?{type:"local",local:e.local}:"root"in e?{type:"local"}:null}async fetchFromSource(e){if(e.type==="git"&&e.git&&e.rev)try{return await this.fetcher.fetch(e.git,e.rev,e.subdir)}catch{return null}return null}reconstructMoveToml(e,t,i,n){let o=`[package]
14
+ `;for(let[g,p]of Object.entries(n))r+=`${g} = "${p}"
15
+ `;return r}};var x=class{constructor(e,t="mainnet",i=null){this.visited=new Set;this.packageNameCache=new Map;this.packageFiles=new Map;this.fetcher=e,this.network=t,this.rootSource=i}async resolve(e,t){let i=b(e),n=i.package?.name||"RootPackage",o=i.package?.edition;if(t["Move.lock"]){let v=b(t["Move.lock"]);v.move?.["toolchain-version"]?.edition&&(o=v.move["toolchain-version"].edition)}let s=o||"2024.beta",c=new M(n),a=await this.buildPackage(n,this.rootSource,e,t);o&&(a.manifest.edition=o);let d=a.manifest.addresses[n];this.normalizeAddress(d||"")==="0x0000000000000000000000000000000000000000000000000000000000000000"&&a.manifest.originalId&&(a.manifest.addresses[n]=this.normalizeAddress(a.manifest.originalId)),c.addPackage(a),this.packageFiles.set(n,t);let l=await this.loadFromLockfile(c,a,t),f=Array.from(a.dependencies.keys()).filter(v=>!c.getPackage(v));(!l||f.length>0)&&await this.buildDependencyGraph(c,a);let g=c.detectCycle();if(g)throw new Error(`Dependency cycle detected: ${g.join(" \u2192 ")}`);let p=new D(c,{});await p.resolve();let m=new $(p);await m.compute(this.packageFiles);let y=this.reconstructMoveToml(i,p.getUnifiedAddressTable(),!0,s),h={...t};delete h["Move.lock"],h["Move.toml"]=y;let k=m.toPackageGroupedFormat(this.packageFiles);return{files:JSON.stringify(h),dependencies:JSON.stringify(k)}}async buildPackage(e,t,i,n){let o=b(i),s=n["Move.lock"],c=this.getChainIdForNetwork(this.network),a=this.resolvePublishedAt(i,s,c),d=a.latestId?this.normalizeAddress(a.latestId):void 0;a.error;let r={name:o.package?.name||e,version:o.package?.version||"0.0.0",edition:o.package?.edition,publishedAt:a.publishedAt,originalId:a.originalId,latestPublishedId:d,addresses:o.addresses||{},dependencies:o.dependencies||{},devDependencies:o["dev-dependencies"]},l=r.publishedAt&&r.publishedAt!=="0x0"?this.normalizeAddress(r.publishedAt):void 0,f=r.addresses[r.name],g=f?this.normalizeAddress(f):void 0;l?r.addresses[r.name]=l:g?r.addresses[r.name]=g:r.addresses[r.name]="0x0";let p=new Map;if(r.dependencies)for(let[y,h]of Object.entries(r.dependencies)){let k=this.parseDependencyInfo(h);k&&p.set(y,k)}return{id:{name:r.name,version:r.version,source:t||{type:"local"}},manifest:r,dependencies:p,devDependencies:new Map}}parseDependencyInfo(e){if(!e)return null;let t={source:{type:"local"}};if(e.git&&e.rev)t.source={type:"git",git:e.git,rev:e.rev,subdir:e.subdir};else if(e.local)t.source={type:"local",local:e.local};else return null;if(e["addr-subst"]||e.addr_subst){let i=e["addr-subst"]||e.addr_subst,n={};for(let[o,s]of Object.entries(i))typeof s=="string"&&(s.startsWith("0x")||/^[0-9a-fA-F]+$/.test(s)?n[o]={type:"assign",address:s}:n[o]={type:"renameFrom",name:s});Object.keys(n).length>0&&(t.subst=n)}return t}async buildDependencyGraph(e,t){for(let[i,n]of t.dependencies.entries()){if(n.source.type==="local")if(t.id.source.type==="git"&&n.source.local){let l=t.id.source.subdir||"",f=n.source.local,g=this.resolveRelativePath(l,f);n.source={type:"git",git:t.id.source.git,rev:t.id.source.rev,subdir:g}}else continue;if(n.source.type!=="git")continue;let o=`${n.source.git}|${n.source.rev}|${n.source.subdir||""}`;if(this.visited.has(o)){let l=this.findPackageBySource(e,n.source);l&&e.addDependency(t.id.name,l.id.name,n);continue}this.visited.add(o);let s=n.source.subdir;!s&&n.source.git&&this.isSuiRepo(n.source.git)&&(s=this.inferSuiFrameworkSubdir(i),s&&(n.source.subdir=s));let c=await this.fetcher.fetch(n.source.git,n.source.rev,s,`${t.id.name} -> ${i}`),a=null,d=`Move.${this.network}.toml`;for(let[l,f]of Object.entries(c))if(l.endsWith(d)){a=f;break}if(!a){for(let[l,f]of Object.entries(c))if(l.endsWith("Move.toml")){a=f;break}}if(!a)continue;let r=await this.buildPackage(i,n.source,a,c);if(!this.lockfileVersion||this.lockfileVersion<4){let l=this.packageNameCache.get(r.manifest.name);if(l){let f=g=>JSON.stringify(g);throw new Error([`Conflicting versions of package '${r.manifest.name}' found`,`Existing: ${f(l)}`,`New: ${f(n.source)}`,`When resolving dependencies for '${t.id.name}' -> '${i}'`].join(`
16
+ `))}this.packageNameCache.set(r.manifest.name,n.source)}r.manifest.publishedAt&&(r.manifest.addresses[r.manifest.name]=this.normalizeAddress(r.manifest.publishedAt)),r.manifest.edition||(r.manifest.edition="legacy"),e.addPackage(r),e.addDependency(t.id.name,r.id.name,n),this.packageFiles.set(r.id.name,c),await this.buildDependencyGraph(e,r)}}getChainIdForNetwork(e){return{mainnet:"35834a8a",testnet:"4c78adac",devnet:"2",localnet:"localnet"}[e]||e}resolvePublishedAt(e,t,i){let n=b(e),o=n.package?.published_at||n.package?.["published-at"],s=o&&o!=="0x0"?o:void 0,c=s?this.normalizeAddress(s):void 0,a=n.package?.["original-id"];if(!t||!i)return{publishedAt:c,originalId:a};let d=b(t),r,l,f;if(d.env)for(let[,g]of Object.entries(d.env)){let p=g["latest-published-id"],m=g["original-published-id"],y=g["chain-id"];if(y===i||!y){let h=p&&p!=="0x0"?this.normalizeAddress(p):void 0,k=m&&m!=="0x0"?this.normalizeAddress(m):void 0;l=h,f=k,r=h||k;break}}return!f&&r&&(f=r),r&&c&&r!==c?{error:`Conflicting 'published-at' addresses between Move.toml (${c}) and Move.lock (${r})`}:{publishedAt:f||c||r,originalId:f||a,latestId:l||r||c}}findPackageBySource(e,t){for(let i of e.getAllPackages()){let n=i.id.source;if(n.type===t.type&&n.git===t.git&&n.rev===t.rev&&n.subdir===t.subdir)return i}}resolveRelativePath(e,t){let i=e?e.split("/").filter(Boolean):[],n=t.split("/").filter(Boolean),o=[...i];for(let s of n)s===".."?o.length>0&&o.pop():s!=="."&&o.push(s);return o.join("/")}async computeManifestDigest(e){let i=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",i);return Array.from(new Uint8Array(n)).map(c=>c.toString(16).padStart(2,"0")).join("").toUpperCase()}async loadFromLockfile(e,t,i){let n=i["Move.lock"];if(!n)return!1;let o=b(n);this.lockfileVersion=o.move?.version;let s=o.move?.version;return s===3?await this.loadFromLockfileV3(e,o,t):s&&s>=4?await this.loadFromLockfileV4(e,o,i):await this.loadFromLockfileV0(e,o,t)}async loadFromLockfileV0(e,t,i){let n=t.move?.package;if(!n||!Array.isArray(n))return!1;let o=Array.isArray(t.move?.dependencies)?t.move.dependencies.map(r=>r.name||r.id||r).filter(Boolean):[],s=n.map(r=>r.name||r.id).filter(Boolean),c=[...o,...s.filter(r=>!o.includes(r))],a=new Map,d=new Map;for(let r of n){let l=r.id||r.name,f=r.source;if(!l||!f)continue;let g=null;if(f.git&&f.rev)g={type:"git",git:f.git,rev:f.rev,subdir:f.subdir};else if(f.local&&this.rootSource?.type==="git"){let h=this.resolveRelativePath(this.rootSource.subdir||"",f.local);g={type:"git",git:this.rootSource.git,rev:this.rootSource.rev,subdir:h}}else continue;let p=await this.fetcher.fetch(g.git,g.rev,g.subdir,`lockfile:${l}`);if(Object.keys(p).length===0)continue;let m=p["Move.toml"];if(!m)continue;let y=await this.buildPackage(l,g,m,p);a.set(l,y),d.set(y.manifest.name,y),this.packageFiles.set(y.manifest.name,p),e.addPackage(y)}c.length&&e.setLockfileOrder(c);for(let r of n){let l=r.id||r.name,f=a.get(l);if(!f)continue;let g=r.dependencies;if(g&&Array.isArray(g))for(let p of g){let m=p.id||p.name,y=a.get(m)||d.get(m);if(y){let h={source:y.id.source};e.addDependency(f.id.name,y.id.name,h)}}}for(let r of i.dependencies.keys()){let l=d.get(r);if(l){let f=i.dependencies.get(r);e.addDependency(i.id.name,l.id.name,f)}}return a.size>0}async loadFromLockfileV3(e,t,i){let n=t.move?.package;if(!n||!Array.isArray(n))return!1;let o=new Map,s=new Map,c=[];for(let a of n)a.id&&s.set(a.id,a);for(let a of n){let d=a.id,r=a.source;c.push(d);let l=null;if(r?.git&&r.rev)l={type:"git",git:r.git,rev:r.rev,subdir:r.subdir};else if(r?.local&&this.rootSource?.type==="git"){let m=this.resolveRelativePath(this.rootSource.subdir||"",r.local);l={type:"git",git:this.rootSource.git,rev:this.rootSource.rev,subdir:m}}else continue;let f=await this.fetcher.fetch(r.git,r.rev,r.subdir,`lockfile:${d}`);if(Object.keys(f).length===0)continue;let g=f["Move.toml"];if(!g)continue;let p=await this.buildPackage(d,l,g,f);o.set(d,p),this.packageFiles.set(p.manifest.name,f),e.addPackage(p)}e.setLockfileOrder(c);for(let a of n){let d=a.id,r=o.get(d);if(!r)continue;let l=a.dependencies;if(!(!l||!Array.isArray(l)))for(let f of l){let g=f.id,p=o.get(g);if(!p){let m=s.get(g);if(m?.source?.local&&r.id.source.type==="git"){let y=this.resolveRelativePath(r.id.source.subdir||"",m.source.local),h={type:"git",git:r.id.source.git,rev:r.id.source.rev,subdir:y},k=await this.fetcher.fetch(h.git,h.rev,h.subdir,`lockfile:${g}`),v=k["Move.toml"];if(v){let w=await this.buildPackage(g,h,v,k);o.set(g,w),this.packageFiles.set(w.manifest.name,k),e.addPackage(w),p=w}}}if(p){let m={source:p.id.source};e.addDependency(r.id.name,p.id.name,m)}}}for(let a of i.dependencies.keys()){let d=o.get(a);if(d){let r=i.dependencies.get(a);e.addDependency(i.id.name,d.id.name,r)}}return!0}async loadFromLockfileV4(e,t,i){let n=t.pinned?.[this.network];if(!n)return!1;let o=rootFiles["Move.toml"];if(o&&t.move?.manifest_digest&&await this.computeManifestDigest(o)!==t.move.manifest_digest)return!1;let s=new Map,c=new Map,a=[];for(let[d,r]of Object.entries(n)){a.push(d);let l=this.lockfileSourceToDependencySource(r.source);if(!l)continue;let f=await this.fetchFromSource(l);if(!f)return!1;let g=f["Move.toml"];if(!g||r["manifest-digest"]&&await this.computeManifestDigest(g)!==r["manifest-digest"])return!1;let p=await this.buildPackage(d,l,g,f);s.set(d,p),c.set(p.manifest.name,p),this.packageFiles.set(p.manifest.name,f),(l.type!=="local"||!("root"in r.source))&&e.addPackage(p)}a.length>0&&e.setLockfileOrder(a);for(let[d,r]of Object.entries(n)){let l=s.get(d);if(l&&r.deps)for(let[f,g]of Object.entries(r.deps)){let p=s.get(g);if(p){let m=l.dependencies.get(f);m&&e.addDependency(l.id.name,p.id.name,m)}}}for(let d of rootPackage.dependencies.keys()){let r=c.get(d)||s.get(d);if(r){let l=rootPackage.dependencies.get(d);e.addDependency(rootPackage.id.name,r.id.name,l)}}return!0}lockfileSourceToDependencySource(e){return"git"in e?{type:"git",git:e.git,rev:e.rev,subdir:e.subdir}:"local"in e?{type:"local",local:e.local}:"root"in e?{type:"local"}:null}async fetchFromSource(e){if(e.type==="git"&&e.git&&e.rev)try{return await this.fetcher.fetch(e.git,e.rev,e.subdir,"lockfile:dependency")}catch{return null}return null}reconstructMoveToml(e,t,i,n){let s=`[package]
16
17
  name = "${e.package.name}"
17
18
  version = "${e.package.version}"
18
- `,c=n||e.package.edition;if(c&&(o+=`edition = "${c}"
19
- `),o+=`
19
+ `,c=n||e.package.edition;if(c&&(s+=`edition = "${c}"
20
+ `),s+=`
20
21
  [dependencies]
21
- `,e.dependencies)for(let[r,l]of Object.entries(e.dependencies)){let a=l;a.local?o+=`${r} = { local = "${a.local}" }
22
- `:a.git&&a.rev&&(a.subdir?o+=`${r} = { git = "${a.git}", subdir = "${a.subdir}", rev = "${a.rev}" }
23
- `:o+=`${r} = { git = "${a.git}", rev = "${a.rev}" }
24
- `)}o+=`
22
+ `,e.dependencies)for(let[a,d]of Object.entries(e.dependencies)){let r=d;r.local?s+=`${a} = { local = "${r.local}" }
23
+ `:r.git&&r.rev&&(r.subdir?s+=`${a} = { git = "${r.git}", subdir = "${r.subdir}", rev = "${r.rev}" }
24
+ `:s+=`${a} = { git = "${r.git}", rev = "${r.rev}" }
25
+ `)}s+=`
25
26
  [addresses]
26
- `;for(let[r,l]of Object.entries(t))o+=`${r} = "${l}"
27
- `;return o}normalizeAddress(e){if(!e)return e;let t=e.trim();return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}isSuiRepo(e){return e.includes("github.com/MystenLabs/sui")}inferSuiFrameworkSubdir(e){let t={Sui:"crates/sui-framework/packages/sui-framework",MoveStdlib:"crates/sui-framework/packages/move-stdlib",SuiSystem:"crates/sui-framework/packages/sui-system",Bridge:"crates/sui-framework/packages/bridge",DeepBook:"crates/sui-framework/packages/deepbook",SuiFramework:"crates/sui-framework/packages/sui-framework"};return t[e]||t[e.toLowerCase()]}};async function F(d,e,t,i="mainnet"){return new x(t,i).resolve(d,e)}function N(d){try{let e=new URL(d);if(e.hostname!=="github.com")return null;let t=e.pathname.split("/").filter(Boolean);if(t.length<2)return null;let i=t[0],n=t[1],s="main",o;return t.length>=4&&t[2]==="tree"&&(s=t[3],t.length>4&&(o=t.slice(4).join("/"))),{owner:i,repo:n,ref:s,subdir:o}}catch{return null}}async function _(d,e){let t=N(d);if(!t)throw new Error(`Invalid GitHub URL: ${d}`);let i=e?.fetcher||new k,n=e?.includeLock!==!1,s=`https://github.com/${t.owner}/${t.repo}.git`,o=await i.fetch(s,t.ref,t.subdir);if(!n&&o["Move.lock"]){let{"Move.lock":c,...r}=o;return r}return o}var $;async function w(d){return $||($=import("./sui_move_wasm.js").then(async e=>(d?await e.default({module_or_path:d}):await e.default(),e))),$}function A(d){return{success:!1,error:d instanceof Error?d.message:typeof d=="string"?d:"Unknown error"}}function G(d){if(typeof d!="object"||d===null)throw new Error("Unexpected compile result shape from wasm");let e=d;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 U(d){let e=t=>t.map(i=>i.toString(16).padStart(2,"0")).join("");try{let t=JSON.parse(d);if(!t.modules||!t.dependencies||!t.digest)throw new Error("missing fields in compiler output");let i=typeof t.digest=="string"?t.digest:e(t.digest);return{success:!0,modules:t.modules,dependencies:t.dependencies,digest:i}}catch(t){return A(t)}}function B(d){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=d.split(/\r?\n/),i=/^\s*\[[^\]]+\]\s*$/,n=-1,s=t.length;for(let r=0;r<t.length;r++)if(/^\s*\[dependencies\]\s*$/.test(t[r])){n=r;for(let l=r+1;l<t.length;l++)if(i.test(t[l])){s=l;break}break}let o=new Set;if(n>=0)for(let r=n+1;r<s;r++){let l=t[r].trim();if(!l||l.startsWith("#"))continue;let a=l.match(/^([A-Za-z0-9_.-]+)\s*=/);a&&o.add(a[1])}let c=e.filter(r=>!o.has(r.name)).map(r=>`${r.name} = { git = "${r.git}", subdir = "${r.subdir}", rev = "${r.rev}" }`);return c.length===0?d:(n>=0?t.splice(s,0,...c):t.push("","[dependencies]",...c),t.join(`
28
- `))}async function ce(d){await w(d?.wasm)}async function O(d){let e=d.files["Move.toml"]||"";e&&(e=B(e));let t=await F(e,{...d.files,"Move.toml":e},new k,d.network);return{files:t.files,dependencies:t.dependencies}}async function de(d){try{let e=d.resolvedDependencies?d.resolvedDependencies:await O(d),t=await w(d.wasm),i=d.ansiColor&&typeof t.compile_with_color=="function"?t.compile_with_color(e.files,e.dependencies,!0):t.compile(e.files,e.dependencies),n=G(i),s=n.success(),o=n.output();return s?U(o):A(o)}catch(e){return A(e)}}async function le(d){return(await w(d?.wasm)).sui_move_version()}async function ge(d){return(await w(d?.wasm)).sui_version()}async function ue(d){return w(d?.wasm)}async function pe(d,e,t){let i=await w(t?.wasm),n=t?.ansiColor&&typeof i.compile_with_color=="function"?i.compile_with_color(d,e,!0):i.compile(d,e),s=G(n);return{success:s.success(),output:s.output()}}export{de as buildMovePackage,pe as compileRaw,_ as fetchPackageFromGitHub,le as getSuiMoveVersion,ge as getSuiVersion,ue as getWasmBindings,ce as initMoveCompiler,O as resolveDependencies};
27
+ `;for(let[a,d]of Object.entries(t))s+=`${a} = "${d}"
28
+ `;return s}normalizeAddress(e){if(!e)return e;let t=e.trim();return t.startsWith("0x")&&(t=t.slice(2)),/^[0-9a-fA-F]+$/.test(t)?"0x"+t.padStart(64,"0"):e}isSuiRepo(e){return e.includes("github.com/MystenLabs/sui")}inferSuiFrameworkSubdir(e){let t={Sui:"crates/sui-framework/packages/sui-framework",MoveStdlib:"crates/sui-framework/packages/move-stdlib",SuiSystem:"crates/sui-framework/packages/sui-system",Bridge:"crates/sui-framework/packages/bridge",DeepBook:"crates/sui-framework/packages/deepbook",SuiFramework:"crates/sui-framework/packages/sui-framework"};return t[e]||t[e.toLowerCase()]}};async function G(u,e,t,i="mainnet",n){return new x(t,i,n||null).resolve(u,e)}function B(u){try{let e=new URL(u);if(e.hostname!=="github.com")return null;let t=e.pathname.split("/").filter(Boolean);if(t.length<2)return null;let i=t[0],n=t[1],o="main",s;return t.length>=4&&t[2]==="tree"&&(o=t[3],t.length>4&&(s=t.slice(4).join("/"))),{owner:i,repo:n,ref:o,subdir:s}}catch{return null}}async function _(u,e){let t=B(u);if(!t)throw new Error(`Invalid GitHub URL: ${u}`);let i=e?.fetcher||new P(e?.githubToken),n=e?.includeLock!==!1,o=`https://github.com/${t.owner}/${t.repo}.git`,s=await i.fetch(o,t.ref,t.subdir,`root:${t.owner}/${t.repo}`);if(Object.defineProperty(s,"__rootGit",{value:{git:o,rev:t.ref,subdir:t.subdir},enumerable:!1}),!n&&s["Move.lock"]){let{"Move.lock":c,...a}=s;return a}return s}var F;async function R(u){return F||(F=import("./sui_move_wasm.js").then(async e=>(u?await e.default({module_or_path:u}):await e.default(),e))),F}function O(u){return{error:u instanceof Error?u.message:typeof u=="string"?u:"Unknown error"}}function N(u){if(typeof u!="object"||u===null)throw new Error("Unexpected compile result shape from wasm");let e=u;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(u){let e=t=>{let i=t.startsWith("0x")?t.slice(2):t,n=i.length%2===0?i:`0${i}`,o=[];for(let s=0;s<n.length;s+=2){let c=parseInt(n.slice(s,s+2),16);if(Number.isNaN(c))throw new Error("invalid hex digest");o.push(c)}return o};try{let t=JSON.parse(u);if(!t.modules||!t.dependencies||!t.digest)throw new Error("missing fields in compiler output");let i=typeof t.digest=="string"?e(t.digest):Array.from(t.digest);return{modules:t.modules,dependencies:t.dependencies,digest:i}}catch(t){return O(t)}}function W(u){try{let e=JSON.parse(u);for(let t of e){let i=t.addressMapping?.[t.name]??(()=>{let n=Object.entries(t.files).find(([s])=>s.endsWith("Move.toml"));if(!n)return;let o=b(n[1]);return o.addresses&&o.addresses[t.name]||o.package?.published_at||o.package?.["published-at"]})()}}catch{}}async function le(u){await R(u?.wasm)}async function U(u){let e=u.files["Move.toml"]||"",t=u.rootGit||u.files.__rootGit,i=await G(e,{...u.files,"Move.toml":e},new P(u.githubToken),u.network,t?{type:"git",git:t.git,rev:t.rev,subdir:t.subdir}:void 0);return{files:i.files,dependencies:i.dependencies}}async function ge(u){try{let e=u.resolvedDependencies?u.resolvedDependencies:await U(u),t=await R(u.wasm);W(e.dependencies);let i=u.ansiColor&&typeof t.compile_with_color=="function"?t.compile_with_color(e.files,e.dependencies,!0):t.compile(e.files,e.dependencies),n=N(i),o=n.success(),s=n.output();return o?j(s):O(s)}catch(e){return O(e)}}async function ue(u){return(await R(u?.wasm)).sui_move_version()}async function pe(u){return(await R(u?.wasm)).sui_version()}async function fe(u){return R(u?.wasm)}async function he(u,e,t){let i=await R(t?.wasm),n=t?.ansiColor&&typeof i.compile_with_color=="function"?i.compile_with_color(u,e,!0):i.compile(u,e),o=N(n);return{success:o.success(),output:o.output()}}export{ge as buildMovePackage,he as compileRaw,_ as fetchPackageFromGitHub,ue as getSuiMoveVersion,pe as getSuiVersion,fe as getWasmBindings,le as initMoveCompiler,U as resolveDependencies};
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zktx.io/sui-move-builder",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Build Move packages in web or Node.js with dependency fetching and dump outputs.",
5
5
  "keywords": [
6
6
  "sui",