@zktx.io/sui-move-builder 0.1.0 → 0.1.1

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
@@ -68,6 +68,13 @@ const result = await buildMovePackage({
68
68
  files: filesJson,
69
69
  dependencies: depsJson,
70
70
  });
71
+
72
+ // Enable ANSI-colored diagnostics (CLI-like output)
73
+ const resultWithColor = await buildMovePackage({
74
+ files: filesJson,
75
+ dependencies: depsJson,
76
+ ansiColor: true,
77
+ });
71
78
  ```
72
79
 
73
80
  `buildMovePackage` returns:
package/dist/index.cjs CHANGED
@@ -491,7 +491,11 @@ async function initMoveCompiler(options) {
491
491
  async function buildMovePackage(input) {
492
492
  try {
493
493
  const mod = await loadWasm(input.wasm);
494
- const raw = mod.compile(
494
+ const raw = input.ansiColor && typeof mod.compile_with_color === "function" ? mod.compile_with_color(
495
+ toJson(input.files),
496
+ toJson(input.dependencies ?? {}),
497
+ true
498
+ ) : mod.compile(
495
499
  toJson(input.files),
496
500
  toJson(input.dependencies ?? {})
497
501
  );
@@ -519,7 +523,8 @@ async function getWasmBindings(options) {
519
523
  }
520
524
  async function compileRaw(filesJson, depsJson, options) {
521
525
  const mod = await loadWasm(options?.wasm);
522
- const result = ensureCompileResult(mod.compile(filesJson, depsJson));
526
+ const raw = options?.ansiColor && typeof mod.compile_with_color === "function" ? mod.compile_with_color(filesJson, depsJson, true) : mod.compile(filesJson, depsJson);
527
+ const result = ensureCompileResult(raw);
523
528
  return {
524
529
  success: result.success(),
525
530
  output: result.output()
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/tomlParser.ts","../src/resolver.ts","../src/fetcher.ts"],"sourcesContent":["type MaybePromise<T> = T | Promise<T>;\n\nexport interface BuildInput {\n /** Virtual file system contents. Keys are paths (e.g. \"Move.toml\", \"sources/Module.move\"). */\n files: Record<string, string>;\n /** Optional dependency files keyed by path. */\n dependencies?: Record<string, string>;\n /** Optional custom URL for the wasm binary. Defaults to bundled wasm next to this module. */\n wasm?: string | URL;\n}\n\nexport interface BuildSuccess {\n success: true;\n /** Base64-encoded bytecode modules. */\n modules: string[];\n /** Hex-encoded dependency IDs. */\n dependencies: string[];\n /** Hex-encoded Blake2b-256 package digest. */\n digest: string;\n}\n\nexport interface BuildFailure {\n success: false;\n error: string;\n}\n\ntype WasmModule = typeof import(\"./sui_move_wasm.js\");\n\nconst wasmUrl = (() => {\n try {\n // Works in ESM builds; CJS bundle falls back to plain string.\n return new URL(\"./sui_move_wasm_bg.wasm\", import.meta.url);\n } catch {\n return \"./sui_move_wasm_bg.wasm\";\n }\n})();\nlet wasmReady: Promise<WasmModule> | undefined;\n\nasync function loadWasm(customWasm?: string | URL): Promise<WasmModule> {\n if (!wasmReady) {\n wasmReady = import(\"./sui_move_wasm.js\").then(async (mod) => {\n await mod.default(customWasm ?? wasmUrl);\n return mod;\n });\n }\n return wasmReady;\n}\n\nfunction toJson(value: unknown): string {\n return JSON.stringify(value ?? {});\n}\n\nfunction asFailure(err: unknown): BuildFailure {\n const msg =\n err instanceof Error\n ? err.message\n : typeof err === \"string\"\n ? err\n : \"Unknown error\";\n return { success: false, error: msg };\n}\n\nfunction ensureCompileResult(result: unknown): {\n success: () => boolean;\n output: () => string;\n} {\n if (typeof result !== \"object\" || result === null) {\n throw new Error(\"Unexpected compile result shape from wasm\");\n }\n\n const asAny = result as any;\n\n // wasm-bindgen structs expose methods\n if (\n typeof asAny.success === \"function\" &&\n typeof asAny.output === \"function\"\n ) {\n return asAny as { success: () => boolean; output: () => string };\n }\n\n // Some builds may expose plain fields; wrap them into functions.\n if (typeof asAny.success === \"boolean\" && typeof asAny.output === \"string\") {\n return {\n success: () => asAny.success as boolean,\n output: () => asAny.output as string,\n };\n }\n\n throw new Error(\"Unexpected compile result shape from wasm\");\n}\n\nfunction parseCompileResult(output: string): BuildSuccess | BuildFailure {\n const toHex = (bytes: number[]): string =>\n bytes.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n try {\n const parsed = JSON.parse(output) as {\n modules?: string[];\n dependencies?: string[];\n digest?: number[] | string;\n };\n if (!parsed.modules || !parsed.dependencies || !parsed.digest) {\n throw new Error(\"missing fields in compiler output\");\n }\n const digestHex =\n typeof parsed.digest === \"string\" ? parsed.digest : toHex(parsed.digest);\n return {\n success: true,\n modules: parsed.modules,\n dependencies: parsed.dependencies,\n digest: digestHex,\n };\n } catch (error) {\n return asFailure(error);\n }\n}\n\n/** Initialize the wasm module (idempotent). Provide a custom wasm URL if hosting separately. */\nexport async function initMoveCompiler(options?: {\n wasm?: string | URL;\n}): Promise<void> {\n await loadWasm(options?.wasm);\n}\n\n/** Compile a Move package in memory using the bundled Move compiler wasm. */\nexport async function buildMovePackage(\n input: BuildInput\n): Promise<BuildSuccess | BuildFailure> {\n try {\n const mod = await loadWasm(input.wasm);\n const raw = mod.compile(\n toJson(input.files),\n toJson(input.dependencies ?? {})\n );\n const result = ensureCompileResult(raw);\n const ok = result.success();\n const output = result.output();\n\n if (!ok) {\n return asFailure(output);\n }\n return parseCompileResult(output);\n } catch (error) {\n return asFailure(error);\n }\n}\n\n/** Sui Move version baked into the wasm (e.g. from Cargo.lock). */\nexport async function getSuiMoveVersion(options?: {\n wasm?: string | URL;\n}): Promise<string> {\n const mod = await loadWasm(options?.wasm);\n return mod.sui_move_version();\n}\n\n/** Sui repo version baked into the wasm (e.g. from Cargo.lock). */\nexport async function getSuiVersion(options?: {\n wasm?: string | URL;\n}): Promise<string> {\n const mod = await loadWasm(options?.wasm);\n return mod.sui_version();\n}\n\n/** Get the raw wasm bindings (low-level interface). */\nexport async function getWasmBindings(options?: {\n wasm?: string | URL;\n}): Promise<WasmModule> {\n return loadWasm(options?.wasm);\n}\n\n/** Low-level helper to call wasm compile directly with JSON strings. */\nexport async function compileRaw(\n filesJson: string,\n depsJson: string,\n options?: { wasm?: string | URL }\n) {\n const mod = await loadWasm(options?.wasm);\n const result = ensureCompileResult(mod.compile(filesJson, depsJson));\n return {\n success: result.success(),\n output: result.output(),\n };\n}\n\nexport type BuildResult = BuildSuccess | BuildFailure;\n\n// Resolver utilities (optional dependency fetching)\nexport { resolve, Resolver } from \"./resolver.js\";\nexport { GitHubFetcher, Fetcher } from \"./fetcher.js\";\nexport { parseToml } from \"./tomlParser.js\";\n","function stripInlineComment(line: string): string {\n let inQuote = false;\n let quoteChar = \"\";\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if ((ch === '\"' || ch === \"'\") && (!inQuote || ch === quoteChar)) {\n inQuote = !inQuote;\n quoteChar = ch;\n }\n if (!inQuote && ch === \"#\") {\n return line.slice(0, i);\n }\n }\n return line;\n}\n\nfunction parseScalar(value: string): any {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n return trimmed.slice(1, -1);\n }\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n const num = Number(trimmed);\n if (!Number.isNaN(num)) return num;\n return trimmed;\n}\n\nfunction parseInlineTable(value: string): Record<string, any> {\n const result: Record<string, any> = {};\n const inner = value.trim().replace(/^\\{/, \"\").replace(/\\}$/, \"\");\n let current = \"\";\n let inQuote = false;\n let quoteChar = \"\";\n const parts: string[] = [];\n\n for (let i = 0; i < inner.length; i++) {\n const ch = inner[i];\n if ((ch === '\"' || ch === \"'\") && (!inQuote || ch === quoteChar)) {\n inQuote = !inQuote;\n quoteChar = ch;\n }\n if (!inQuote && ch === \",\") {\n parts.push(current);\n current = \"\";\n continue;\n }\n current += ch;\n }\n if (current.trim()) {\n parts.push(current);\n }\n\n for (const part of parts) {\n const eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n const key = part.slice(0, eq).trim();\n const val = part.slice(eq + 1).trim();\n result[key] = parseScalar(val);\n }\n return result;\n}\n\nexport function parseToml(content: string): {\n package: Record<string, any>;\n dependencies: Record<string, any>;\n addresses: Record<string, any>;\n} {\n const result = {\n package: {},\n dependencies: {},\n addresses: {},\n } as {\n package: Record<string, any>;\n dependencies: Record<string, any>;\n addresses: Record<string, any>;\n };\n let section: string | null = null;\n const lines = content.split(/\\r?\\n/);\n\n for (const rawLine of lines) {\n const line = stripInlineComment(rawLine).trim();\n if (!line) continue;\n const sectionMatch = line.match(/^\\[([^\\]]+)\\]$/);\n if (sectionMatch) {\n section = sectionMatch[1].trim();\n continue;\n }\n const eq = line.indexOf(\"=\");\n if (eq === -1 || !section) continue;\n\n const key = line.slice(0, eq).trim();\n const value = line.slice(eq + 1).trim();\n\n if (section === \"package\") {\n result.package[key.replace(/-/g, \"_\")] = parseScalar(value);\n } else if (section === \"dependencies\") {\n if (value.startsWith(\"{\")) {\n result.dependencies[key] = parseInlineTable(value);\n } else {\n result.dependencies[key] = parseScalar(value);\n }\n } else if (section === \"addresses\") {\n result.addresses[key] = parseScalar(value);\n }\n }\n\n return result;\n}\n","import { parseToml } from \"./tomlParser.js\";\nimport type { Fetcher } from \"./fetcher.js\";\n\nexport class Resolver {\n private fetcher: Fetcher;\n private globalAddresses: Record<string, string>;\n private visited: Set<string>;\n private dependencyFiles: Record<string, string>;\n private systemDepsLoaded: Set<string>;\n\n constructor(fetcher: Fetcher) {\n this.fetcher = fetcher;\n this.globalAddresses = {};\n this.visited = new Set();\n this.dependencyFiles = {};\n this.systemDepsLoaded = new Set();\n }\n\n async resolve(\n rootMoveToml: string,\n rootFiles: Record<string, string>\n ): Promise<{ files: string; dependencies: string }> {\n const parsedToml = parseToml(rootMoveToml);\n\n if (parsedToml.addresses) {\n this.mergeAddresses(parsedToml.addresses);\n }\n\n if (parsedToml.dependencies) {\n await this.resolveDeps(parsedToml.dependencies);\n await this.injectSystemDepsFromRoot(parsedToml.dependencies);\n }\n\n const finalMoveToml = this.reconstructMoveToml(parsedToml, this.globalAddresses);\n const finalFiles = { ...rootFiles, \"Move.toml\": finalMoveToml };\n\n return {\n files: JSON.stringify(finalFiles),\n dependencies: JSON.stringify(this.dependencyFiles),\n };\n }\n\n private mergeAddresses(addresses: Record<string, string>) {\n for (const [name, val] of Object.entries(addresses)) {\n this.globalAddresses[name] = this.normalizeAddress(val);\n }\n }\n\n private normalizeAddress(addr: string) {\n if (!addr) return addr;\n let clean = addr;\n if (clean.startsWith(\"0x\")) clean = clean.slice(2);\n if (/^[0-9a-fA-F]+$/.test(clean)) {\n return \"0x\" + clean.padStart(64, \"0\");\n }\n return addr;\n }\n\n private async resolveDeps(\n depsObj: Record<string, any>,\n parentContext: { git?: string; rev?: string; subdir?: string } | null = null\n ) {\n for (const [name, depInfo] of Object.entries(depsObj)) {\n let gitUrl: string | undefined;\n let rev: string | undefined;\n let subdir: string | undefined;\n\n if ((depInfo as any).git) {\n gitUrl = (depInfo as any).git;\n rev = (depInfo as any).rev;\n subdir = (depInfo as any).subdir;\n } else if ((depInfo as any).local) {\n if (!parentContext) continue;\n gitUrl = parentContext.git;\n rev = parentContext.rev;\n subdir = this.resolvePath(parentContext.subdir || \"\", (depInfo as any).local);\n } else {\n continue;\n }\n\n const cacheKey = `${gitUrl}|${rev}|${subdir || \"\"}`;\n if (this.visited.has(cacheKey)) continue;\n this.visited.add(cacheKey);\n\n const files = await this.fetcher.fetch(gitUrl!, rev!, subdir);\n\n let pkgMoveToml: string | null = null;\n for (const [path, content] of Object.entries(files)) {\n if (path.endsWith(\"Move.toml\")) {\n pkgMoveToml = content;\n break;\n }\n }\n\n if (pkgMoveToml) {\n const parsed = parseToml(pkgMoveToml);\n if (parsed.addresses) {\n this.mergeAddresses(parsed.addresses);\n }\n if (parsed.dependencies) {\n await this.resolveDeps(parsed.dependencies, { git: gitUrl, rev, subdir });\n }\n }\n\n for (const [path, content] of Object.entries(files)) {\n if (path.endsWith(\".move\") || path.endsWith(\"Move.toml\")) {\n const targetPath = `dependencies/${name}/${path}`;\n this.dependencyFiles[targetPath] = content;\n }\n }\n }\n }\n\n private resolvePath(base: string, relative: string): string {\n const stack = base.split(\"/\").filter((p) => p && p !== \".\");\n const parts = relative.split(\"/\").filter((p) => p && p !== \".\");\n for (const part of parts) {\n if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return stack.join(\"/\");\n }\n\n private reconstructMoveToml(originalParsed: any, addresses: Record<string, string>) {\n let newToml = `[package]\\nname = \"${originalParsed.package.name}\"\\nversion = \"${originalParsed.package.version}\"\\n`;\n if (originalParsed.package.edition) {\n newToml += `edition = \"${originalParsed.package.edition}\"\\n`;\n }\n\n newToml += `\\n[dependencies]\\n`;\n if (originalParsed.dependencies) {\n for (const [name, info] of Object.entries(originalParsed.dependencies)) {\n newToml += `${name} = { git = \"${(info as any).git}\", rev = \"${(info as any).rev}\" }\\n`;\n }\n }\n\n newToml += `\\n[addresses]\\n`;\n for (const [addrName, addrVal] of Object.entries(addresses)) {\n newToml += `${addrName} = \"${addrVal}\"\\n`;\n }\n return newToml;\n }\n\n private async injectSystemDepsFromRoot(depsObj: Record<string, any>) {\n for (const depInfo of Object.values(depsObj)) {\n if (!depInfo || !(depInfo as any).git || !(depInfo as any).rev) continue;\n if (!this.isSuiRepo((depInfo as any).git)) continue;\n await this.addImplicitSystemDepsForRepo((depInfo as any).git, (depInfo as any).rev);\n return;\n }\n }\n\n private async addImplicitSystemDepsForRepo(gitUrl: string, rev: string) {\n if (!this.isSuiRepo(gitUrl)) return;\n const cacheKey = `${gitUrl}|${rev}`;\n if (this.systemDepsLoaded.has(cacheKey)) return;\n this.systemDepsLoaded.add(cacheKey);\n\n const manifestPath = \"crates/sui-framework-snapshot/manifest.json\";\n if (!(this.fetcher as any).fetchFile) return;\n\n let packages: { name: string; id: string }[] | null = null;\n try {\n const manifestText = await (this.fetcher as any).fetchFile(gitUrl, rev, manifestPath);\n if (manifestText) {\n const manifest = JSON.parse(manifestText);\n const versions = Object.keys(manifest)\n .map((v) => Number(v))\n .filter((v) => !Number.isNaN(v))\n .sort((a, b) => a - b);\n const latestVersion = versions[versions.length - 1];\n const latest = manifest[String(latestVersion)];\n if (latest && latest.packages) {\n packages = latest.packages;\n }\n }\n } catch (e) {}\n\n if (!packages) {\n packages = [\n { name: \"MoveStdlib\", id: \"0x1\" },\n { name: \"Sui\", id: \"0x2\" },\n { name: \"SuiSystem\", id: \"0x3\" },\n { name: \"Bridge\", id: \"0xb\" },\n ];\n }\n\n for (const pkg of packages) {\n if (!pkg || !pkg.name || !pkg.id) continue;\n if (pkg.name === \"DeepBook\") continue;\n const targetPath = `dependencies/${pkg.name}/Move.toml`;\n if (this.dependencyFiles[targetPath]) continue;\n const moveToml = [\n \"[package]\",\n `name = \"${pkg.name}\"`,\n 'version = \"0.0.0\"',\n `published-at = \"${pkg.id}\"`,\n \"\",\n ].join(\"\\n\");\n this.dependencyFiles[targetPath] = moveToml;\n }\n }\n\n private isSuiRepo(gitUrl: string): boolean {\n return gitUrl.includes(\"github.com/MystenLabs/sui\");\n }\n}\n\nexport async function resolve(\n rootMoveTomlContent: string,\n rootSourceFiles: Record<string, string>,\n fetcher: Fetcher\n): Promise<{ files: string; dependencies: string }> {\n const resolver = new Resolver(fetcher);\n return resolver.resolve(rootMoveTomlContent, rootSourceFiles);\n}\n","/** Abstract interface for fetching package content. */\nexport class Fetcher {\n /** Fetch a package. Return map of path -> content. */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetch(_gitUrl: string, _rev: string, _subdir?: string): Promise<Record<string, string>> {\n throw new Error(\"Not implemented\");\n }\n\n /** Fetch a single file from a repository. */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetchFile(_gitUrl: string, _rev: string, _path: string): Promise<string | null> {\n throw new Error(\"Not implemented\");\n }\n}\n\n/** Fetcher that retrieves files from public GitHub repositories via fetch(). */\nexport class GitHubFetcher extends Fetcher {\n private cache: Map<string, string>;\n\n constructor() {\n super();\n this.cache = new Map();\n }\n\n async fetch(gitUrl: string, rev: string, subdir?: string): Promise<Record<string, string>> {\n const { owner, repo } = this.parseGitUrl(gitUrl);\n if (!owner || !repo) {\n throw new Error(`Invalid git URL: ${gitUrl}`);\n }\n\n const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${rev}?recursive=1`;\n let treeData: any;\n try {\n const resp = await fetch(treeUrl);\n if (!resp.ok) {\n if (resp.status === 403 || resp.status === 429) {\n throw new Error(\"GitHub API rate limit exceeded.\");\n }\n throw new Error(`Failed to fetch tree: ${resp.statusText}`);\n }\n treeData = await resp.json();\n } catch (e) {\n return {};\n }\n\n const files: Record<string, string> = {};\n const fetchPromises: Promise<void>[] = [];\n\n for (const item of treeData.tree as any[]) {\n if (item.type !== \"blob\") continue;\n\n let relativePath: string = item.path;\n if (subdir) {\n if (!item.path.startsWith(subdir)) continue;\n relativePath = item.path.slice(subdir.length);\n if (relativePath.startsWith(\"/\")) {\n relativePath = relativePath.slice(1);\n }\n }\n\n if (!relativePath.endsWith(\".move\") && relativePath !== \"Move.toml\") {\n continue;\n }\n\n const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${rev}/${item.path}`;\n const p = this.fetchContent(rawUrl).then((content) => {\n if (content) {\n files[relativePath] = content;\n }\n });\n fetchPromises.push(p);\n }\n\n await Promise.all(fetchPromises);\n return files;\n }\n\n async fetchFile(gitUrl: string, rev: string, path: string): Promise<string | null> {\n const { owner, repo } = this.parseGitUrl(gitUrl);\n if (!owner || !repo) {\n throw new Error(`Invalid git URL: ${gitUrl}`);\n }\n const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${rev}/${path}`;\n return this.fetchContent(rawUrl);\n }\n\n private async fetchContent(url: string): Promise<string | null> {\n if (this.cache.has(url)) {\n return this.cache.get(url) ?? null;\n }\n try {\n const resp = await fetch(url);\n if (!resp.ok) return null;\n const text = await resp.text();\n this.cache.set(url, text);\n return text;\n } catch (e) {\n return null;\n }\n }\n\n private parseGitUrl(url: string): { owner: string | null; repo: string | null } {\n try {\n const urlObj = new URL(url);\n const parts = urlObj.pathname.split(\"/\").filter((p) => p);\n if (parts.length >= 2) {\n let repo = parts[1];\n if (repo.endsWith(\".git\")) {\n repo = repo.slice(0, -4);\n }\n return { owner: parts[0], repo };\n }\n } catch (e) {}\n return { owner: null, repo: null };\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/tomlParser.ts","../src/resolver.ts","../src/fetcher.ts"],"sourcesContent":["type MaybePromise<T> = T | Promise<T>;\n\nexport interface BuildInput {\n /** Virtual file system contents. Keys are paths (e.g. \"Move.toml\", \"sources/Module.move\"). */\n files: Record<string, string>;\n /** Optional dependency files keyed by path. */\n dependencies?: Record<string, string>;\n /** Optional custom URL for the wasm binary. Defaults to bundled wasm next to this module. */\n wasm?: string | URL;\n /** Emit ANSI color codes in diagnostics when available. */\n ansiColor?: boolean;\n}\n\nexport interface BuildSuccess {\n success: true;\n /** Base64-encoded bytecode modules. */\n modules: string[];\n /** Hex-encoded dependency IDs. */\n dependencies: string[];\n /** Hex-encoded Blake2b-256 package digest. */\n digest: string;\n}\n\nexport interface BuildFailure {\n success: false;\n error: string;\n}\n\ntype WasmModule = typeof import(\"./sui_move_wasm.js\");\n\nconst wasmUrl = (() => {\n try {\n // Works in ESM builds; CJS bundle falls back to plain string.\n return new URL(\"./sui_move_wasm_bg.wasm\", import.meta.url);\n } catch {\n return \"./sui_move_wasm_bg.wasm\";\n }\n})();\nlet wasmReady: Promise<WasmModule> | undefined;\n\nasync function loadWasm(customWasm?: string | URL): Promise<WasmModule> {\n if (!wasmReady) {\n wasmReady = import(\"./sui_move_wasm.js\").then(async (mod) => {\n await mod.default(customWasm ?? wasmUrl);\n return mod;\n });\n }\n return wasmReady;\n}\n\nfunction toJson(value: unknown): string {\n return JSON.stringify(value ?? {});\n}\n\nfunction asFailure(err: unknown): BuildFailure {\n const msg =\n err instanceof Error\n ? err.message\n : typeof err === \"string\"\n ? err\n : \"Unknown error\";\n return { success: false, error: msg };\n}\n\nfunction ensureCompileResult(result: unknown): {\n success: () => boolean;\n output: () => string;\n} {\n if (typeof result !== \"object\" || result === null) {\n throw new Error(\"Unexpected compile result shape from wasm\");\n }\n\n const asAny = result as any;\n\n // wasm-bindgen structs expose methods\n if (\n typeof asAny.success === \"function\" &&\n typeof asAny.output === \"function\"\n ) {\n return asAny as { success: () => boolean; output: () => string };\n }\n\n // Some builds may expose plain fields; wrap them into functions.\n if (typeof asAny.success === \"boolean\" && typeof asAny.output === \"string\") {\n return {\n success: () => asAny.success as boolean,\n output: () => asAny.output as string,\n };\n }\n\n throw new Error(\"Unexpected compile result shape from wasm\");\n}\n\nfunction parseCompileResult(output: string): BuildSuccess | BuildFailure {\n const toHex = (bytes: number[]): string =>\n bytes.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n try {\n const parsed = JSON.parse(output) as {\n modules?: string[];\n dependencies?: string[];\n digest?: number[] | string;\n };\n if (!parsed.modules || !parsed.dependencies || !parsed.digest) {\n throw new Error(\"missing fields in compiler output\");\n }\n const digestHex =\n typeof parsed.digest === \"string\" ? parsed.digest : toHex(parsed.digest);\n return {\n success: true,\n modules: parsed.modules,\n dependencies: parsed.dependencies,\n digest: digestHex,\n };\n } catch (error) {\n return asFailure(error);\n }\n}\n\n/** Initialize the wasm module (idempotent). Provide a custom wasm URL if hosting separately. */\nexport async function initMoveCompiler(options?: {\n wasm?: string | URL;\n}): Promise<void> {\n await loadWasm(options?.wasm);\n}\n\n/** Compile a Move package in memory using the bundled Move compiler wasm. */\nexport async function buildMovePackage(\n input: BuildInput\n): Promise<BuildSuccess | BuildFailure> {\n try {\n const mod = await loadWasm(input.wasm);\n const raw =\n input.ansiColor && typeof (mod as any).compile_with_color === \"function\"\n ? (mod as any).compile_with_color(\n toJson(input.files),\n toJson(input.dependencies ?? {}),\n true\n )\n : mod.compile(\n toJson(input.files),\n toJson(input.dependencies ?? {})\n );\n const result = ensureCompileResult(raw);\n const ok = result.success();\n const output = result.output();\n\n if (!ok) {\n return asFailure(output);\n }\n return parseCompileResult(output);\n } catch (error) {\n return asFailure(error);\n }\n}\n\n/** Sui Move version baked into the wasm (e.g. from Cargo.lock). */\nexport async function getSuiMoveVersion(options?: {\n wasm?: string | URL;\n}): Promise<string> {\n const mod = await loadWasm(options?.wasm);\n return mod.sui_move_version();\n}\n\n/** Sui repo version baked into the wasm (e.g. from Cargo.lock). */\nexport async function getSuiVersion(options?: {\n wasm?: string | URL;\n}): Promise<string> {\n const mod = await loadWasm(options?.wasm);\n return mod.sui_version();\n}\n\n/** Get the raw wasm bindings (low-level interface). */\nexport async function getWasmBindings(options?: {\n wasm?: string | URL;\n}): Promise<WasmModule> {\n return loadWasm(options?.wasm);\n}\n\n/** Low-level helper to call wasm compile directly with JSON strings. */\nexport async function compileRaw(\n filesJson: string,\n depsJson: string,\n options?: { wasm?: string | URL; ansiColor?: boolean }\n) {\n const mod = await loadWasm(options?.wasm);\n const raw =\n options?.ansiColor && typeof (mod as any).compile_with_color === \"function\"\n ? (mod as any).compile_with_color(filesJson, depsJson, true)\n : mod.compile(filesJson, depsJson);\n const result = ensureCompileResult(raw);\n return {\n success: result.success(),\n output: result.output(),\n };\n}\n\nexport type BuildResult = BuildSuccess | BuildFailure;\n\n// Resolver utilities (optional dependency fetching)\nexport { resolve, Resolver } from \"./resolver.js\";\nexport { GitHubFetcher, Fetcher } from \"./fetcher.js\";\nexport { parseToml } from \"./tomlParser.js\";\n","function stripInlineComment(line: string): string {\n let inQuote = false;\n let quoteChar = \"\";\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if ((ch === '\"' || ch === \"'\") && (!inQuote || ch === quoteChar)) {\n inQuote = !inQuote;\n quoteChar = ch;\n }\n if (!inQuote && ch === \"#\") {\n return line.slice(0, i);\n }\n }\n return line;\n}\n\nfunction parseScalar(value: string): any {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n return trimmed.slice(1, -1);\n }\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n const num = Number(trimmed);\n if (!Number.isNaN(num)) return num;\n return trimmed;\n}\n\nfunction parseInlineTable(value: string): Record<string, any> {\n const result: Record<string, any> = {};\n const inner = value.trim().replace(/^\\{/, \"\").replace(/\\}$/, \"\");\n let current = \"\";\n let inQuote = false;\n let quoteChar = \"\";\n const parts: string[] = [];\n\n for (let i = 0; i < inner.length; i++) {\n const ch = inner[i];\n if ((ch === '\"' || ch === \"'\") && (!inQuote || ch === quoteChar)) {\n inQuote = !inQuote;\n quoteChar = ch;\n }\n if (!inQuote && ch === \",\") {\n parts.push(current);\n current = \"\";\n continue;\n }\n current += ch;\n }\n if (current.trim()) {\n parts.push(current);\n }\n\n for (const part of parts) {\n const eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n const key = part.slice(0, eq).trim();\n const val = part.slice(eq + 1).trim();\n result[key] = parseScalar(val);\n }\n return result;\n}\n\nexport function parseToml(content: string): {\n package: Record<string, any>;\n dependencies: Record<string, any>;\n addresses: Record<string, any>;\n} {\n const result = {\n package: {},\n dependencies: {},\n addresses: {},\n } as {\n package: Record<string, any>;\n dependencies: Record<string, any>;\n addresses: Record<string, any>;\n };\n let section: string | null = null;\n const lines = content.split(/\\r?\\n/);\n\n for (const rawLine of lines) {\n const line = stripInlineComment(rawLine).trim();\n if (!line) continue;\n const sectionMatch = line.match(/^\\[([^\\]]+)\\]$/);\n if (sectionMatch) {\n section = sectionMatch[1].trim();\n continue;\n }\n const eq = line.indexOf(\"=\");\n if (eq === -1 || !section) continue;\n\n const key = line.slice(0, eq).trim();\n const value = line.slice(eq + 1).trim();\n\n if (section === \"package\") {\n result.package[key.replace(/-/g, \"_\")] = parseScalar(value);\n } else if (section === \"dependencies\") {\n if (value.startsWith(\"{\")) {\n result.dependencies[key] = parseInlineTable(value);\n } else {\n result.dependencies[key] = parseScalar(value);\n }\n } else if (section === \"addresses\") {\n result.addresses[key] = parseScalar(value);\n }\n }\n\n return result;\n}\n","import { parseToml } from \"./tomlParser.js\";\nimport type { Fetcher } from \"./fetcher.js\";\n\nexport class Resolver {\n private fetcher: Fetcher;\n private globalAddresses: Record<string, string>;\n private visited: Set<string>;\n private dependencyFiles: Record<string, string>;\n private systemDepsLoaded: Set<string>;\n\n constructor(fetcher: Fetcher) {\n this.fetcher = fetcher;\n this.globalAddresses = {};\n this.visited = new Set();\n this.dependencyFiles = {};\n this.systemDepsLoaded = new Set();\n }\n\n async resolve(\n rootMoveToml: string,\n rootFiles: Record<string, string>\n ): Promise<{ files: string; dependencies: string }> {\n const parsedToml = parseToml(rootMoveToml);\n\n if (parsedToml.addresses) {\n this.mergeAddresses(parsedToml.addresses);\n }\n\n if (parsedToml.dependencies) {\n await this.resolveDeps(parsedToml.dependencies);\n await this.injectSystemDepsFromRoot(parsedToml.dependencies);\n }\n\n const finalMoveToml = this.reconstructMoveToml(parsedToml, this.globalAddresses);\n const finalFiles = { ...rootFiles, \"Move.toml\": finalMoveToml };\n\n return {\n files: JSON.stringify(finalFiles),\n dependencies: JSON.stringify(this.dependencyFiles),\n };\n }\n\n private mergeAddresses(addresses: Record<string, string>) {\n for (const [name, val] of Object.entries(addresses)) {\n this.globalAddresses[name] = this.normalizeAddress(val);\n }\n }\n\n private normalizeAddress(addr: string) {\n if (!addr) return addr;\n let clean = addr;\n if (clean.startsWith(\"0x\")) clean = clean.slice(2);\n if (/^[0-9a-fA-F]+$/.test(clean)) {\n return \"0x\" + clean.padStart(64, \"0\");\n }\n return addr;\n }\n\n private async resolveDeps(\n depsObj: Record<string, any>,\n parentContext: { git?: string; rev?: string; subdir?: string } | null = null\n ) {\n for (const [name, depInfo] of Object.entries(depsObj)) {\n let gitUrl: string | undefined;\n let rev: string | undefined;\n let subdir: string | undefined;\n\n if ((depInfo as any).git) {\n gitUrl = (depInfo as any).git;\n rev = (depInfo as any).rev;\n subdir = (depInfo as any).subdir;\n } else if ((depInfo as any).local) {\n if (!parentContext) continue;\n gitUrl = parentContext.git;\n rev = parentContext.rev;\n subdir = this.resolvePath(parentContext.subdir || \"\", (depInfo as any).local);\n } else {\n continue;\n }\n\n const cacheKey = `${gitUrl}|${rev}|${subdir || \"\"}`;\n if (this.visited.has(cacheKey)) continue;\n this.visited.add(cacheKey);\n\n const files = await this.fetcher.fetch(gitUrl!, rev!, subdir);\n\n let pkgMoveToml: string | null = null;\n for (const [path, content] of Object.entries(files)) {\n if (path.endsWith(\"Move.toml\")) {\n pkgMoveToml = content;\n break;\n }\n }\n\n if (pkgMoveToml) {\n const parsed = parseToml(pkgMoveToml);\n if (parsed.addresses) {\n this.mergeAddresses(parsed.addresses);\n }\n if (parsed.dependencies) {\n await this.resolveDeps(parsed.dependencies, { git: gitUrl, rev, subdir });\n }\n }\n\n for (const [path, content] of Object.entries(files)) {\n if (path.endsWith(\".move\") || path.endsWith(\"Move.toml\")) {\n const targetPath = `dependencies/${name}/${path}`;\n this.dependencyFiles[targetPath] = content;\n }\n }\n }\n }\n\n private resolvePath(base: string, relative: string): string {\n const stack = base.split(\"/\").filter((p) => p && p !== \".\");\n const parts = relative.split(\"/\").filter((p) => p && p !== \".\");\n for (const part of parts) {\n if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return stack.join(\"/\");\n }\n\n private reconstructMoveToml(originalParsed: any, addresses: Record<string, string>) {\n let newToml = `[package]\\nname = \"${originalParsed.package.name}\"\\nversion = \"${originalParsed.package.version}\"\\n`;\n if (originalParsed.package.edition) {\n newToml += `edition = \"${originalParsed.package.edition}\"\\n`;\n }\n\n newToml += `\\n[dependencies]\\n`;\n if (originalParsed.dependencies) {\n for (const [name, info] of Object.entries(originalParsed.dependencies)) {\n newToml += `${name} = { git = \"${(info as any).git}\", rev = \"${(info as any).rev}\" }\\n`;\n }\n }\n\n newToml += `\\n[addresses]\\n`;\n for (const [addrName, addrVal] of Object.entries(addresses)) {\n newToml += `${addrName} = \"${addrVal}\"\\n`;\n }\n return newToml;\n }\n\n private async injectSystemDepsFromRoot(depsObj: Record<string, any>) {\n for (const depInfo of Object.values(depsObj)) {\n if (!depInfo || !(depInfo as any).git || !(depInfo as any).rev) continue;\n if (!this.isSuiRepo((depInfo as any).git)) continue;\n await this.addImplicitSystemDepsForRepo((depInfo as any).git, (depInfo as any).rev);\n return;\n }\n }\n\n private async addImplicitSystemDepsForRepo(gitUrl: string, rev: string) {\n if (!this.isSuiRepo(gitUrl)) return;\n const cacheKey = `${gitUrl}|${rev}`;\n if (this.systemDepsLoaded.has(cacheKey)) return;\n this.systemDepsLoaded.add(cacheKey);\n\n const manifestPath = \"crates/sui-framework-snapshot/manifest.json\";\n if (!(this.fetcher as any).fetchFile) return;\n\n let packages: { name: string; id: string }[] | null = null;\n try {\n const manifestText = await (this.fetcher as any).fetchFile(gitUrl, rev, manifestPath);\n if (manifestText) {\n const manifest = JSON.parse(manifestText);\n const versions = Object.keys(manifest)\n .map((v) => Number(v))\n .filter((v) => !Number.isNaN(v))\n .sort((a, b) => a - b);\n const latestVersion = versions[versions.length - 1];\n const latest = manifest[String(latestVersion)];\n if (latest && latest.packages) {\n packages = latest.packages;\n }\n }\n } catch (e) {}\n\n if (!packages) {\n packages = [\n { name: \"MoveStdlib\", id: \"0x1\" },\n { name: \"Sui\", id: \"0x2\" },\n { name: \"SuiSystem\", id: \"0x3\" },\n { name: \"Bridge\", id: \"0xb\" },\n ];\n }\n\n for (const pkg of packages) {\n if (!pkg || !pkg.name || !pkg.id) continue;\n if (pkg.name === \"DeepBook\") continue;\n const targetPath = `dependencies/${pkg.name}/Move.toml`;\n if (this.dependencyFiles[targetPath]) continue;\n const moveToml = [\n \"[package]\",\n `name = \"${pkg.name}\"`,\n 'version = \"0.0.0\"',\n `published-at = \"${pkg.id}\"`,\n \"\",\n ].join(\"\\n\");\n this.dependencyFiles[targetPath] = moveToml;\n }\n }\n\n private isSuiRepo(gitUrl: string): boolean {\n return gitUrl.includes(\"github.com/MystenLabs/sui\");\n }\n}\n\nexport async function resolve(\n rootMoveTomlContent: string,\n rootSourceFiles: Record<string, string>,\n fetcher: Fetcher\n): Promise<{ files: string; dependencies: string }> {\n const resolver = new Resolver(fetcher);\n return resolver.resolve(rootMoveTomlContent, rootSourceFiles);\n}\n","/** Abstract interface for fetching package content. */\nexport class Fetcher {\n /** Fetch a package. Return map of path -> content. */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetch(_gitUrl: string, _rev: string, _subdir?: string): Promise<Record<string, string>> {\n throw new Error(\"Not implemented\");\n }\n\n /** Fetch a single file from a repository. */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetchFile(_gitUrl: string, _rev: string, _path: string): Promise<string | null> {\n throw new Error(\"Not implemented\");\n }\n}\n\n/** Fetcher that retrieves files from public GitHub repositories via fetch(). */\nexport class GitHubFetcher extends Fetcher {\n private cache: Map<string, string>;\n\n constructor() {\n super();\n this.cache = new Map();\n }\n\n async fetch(gitUrl: string, rev: string, subdir?: string): Promise<Record<string, string>> {\n const { owner, repo } = this.parseGitUrl(gitUrl);\n if (!owner || !repo) {\n throw new Error(`Invalid git URL: ${gitUrl}`);\n }\n\n const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${rev}?recursive=1`;\n let treeData: any;\n try {\n const resp = await fetch(treeUrl);\n if (!resp.ok) {\n if (resp.status === 403 || resp.status === 429) {\n throw new Error(\"GitHub API rate limit exceeded.\");\n }\n throw new Error(`Failed to fetch tree: ${resp.statusText}`);\n }\n treeData = await resp.json();\n } catch (e) {\n return {};\n }\n\n const files: Record<string, string> = {};\n const fetchPromises: Promise<void>[] = [];\n\n for (const item of treeData.tree as any[]) {\n if (item.type !== \"blob\") continue;\n\n let relativePath: string = item.path;\n if (subdir) {\n if (!item.path.startsWith(subdir)) continue;\n relativePath = item.path.slice(subdir.length);\n if (relativePath.startsWith(\"/\")) {\n relativePath = relativePath.slice(1);\n }\n }\n\n if (!relativePath.endsWith(\".move\") && relativePath !== \"Move.toml\") {\n continue;\n }\n\n const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${rev}/${item.path}`;\n const p = this.fetchContent(rawUrl).then((content) => {\n if (content) {\n files[relativePath] = content;\n }\n });\n fetchPromises.push(p);\n }\n\n await Promise.all(fetchPromises);\n return files;\n }\n\n async fetchFile(gitUrl: string, rev: string, path: string): Promise<string | null> {\n const { owner, repo } = this.parseGitUrl(gitUrl);\n if (!owner || !repo) {\n throw new Error(`Invalid git URL: ${gitUrl}`);\n }\n const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${rev}/${path}`;\n return this.fetchContent(rawUrl);\n }\n\n private async fetchContent(url: string): Promise<string | null> {\n if (this.cache.has(url)) {\n return this.cache.get(url) ?? null;\n }\n try {\n const resp = await fetch(url);\n if (!resp.ok) return null;\n const text = await resp.text();\n this.cache.set(url, text);\n return text;\n } catch (e) {\n return null;\n }\n }\n\n private parseGitUrl(url: string): { owner: string | null; repo: string | null } {\n try {\n const urlObj = new URL(url);\n const parts = urlObj.pathname.split(\"/\").filter((p) => p);\n if (parts.length >= 2) {\n let repo = parts[1];\n if (repo.endsWith(\".git\")) {\n repo = repo.slice(0, -4);\n }\n return { owner: parts[0], repo };\n }\n } catch (e) {}\n return { owner: null, repo: null };\n }\n}\n"],"mappings":"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","names":[]}
package/dist/index.d.cts CHANGED
@@ -55,6 +55,8 @@ interface BuildInput {
55
55
  dependencies?: Record<string, string>;
56
56
  /** Optional custom URL for the wasm binary. Defaults to bundled wasm next to this module. */
57
57
  wasm?: string | URL;
58
+ /** Emit ANSI color codes in diagnostics when available. */
59
+ ansiColor?: boolean;
58
60
  }
59
61
  interface BuildSuccess {
60
62
  success: true;
@@ -91,6 +93,7 @@ declare function getWasmBindings(options?: {
91
93
  /** Low-level helper to call wasm compile directly with JSON strings. */
92
94
  declare function compileRaw(filesJson: string, depsJson: string, options?: {
93
95
  wasm?: string | URL;
96
+ ansiColor?: boolean;
94
97
  }): Promise<{
95
98
  success: boolean;
96
99
  output: string;
package/dist/index.d.ts CHANGED
@@ -55,6 +55,8 @@ interface BuildInput {
55
55
  dependencies?: Record<string, string>;
56
56
  /** Optional custom URL for the wasm binary. Defaults to bundled wasm next to this module. */
57
57
  wasm?: string | URL;
58
+ /** Emit ANSI color codes in diagnostics when available. */
59
+ ansiColor?: boolean;
58
60
  }
59
61
  interface BuildSuccess {
60
62
  success: true;
@@ -91,6 +93,7 @@ declare function getWasmBindings(options?: {
91
93
  /** Low-level helper to call wasm compile directly with JSON strings. */
92
94
  declare function compileRaw(filesJson: string, depsJson: string, options?: {
93
95
  wasm?: string | URL;
96
+ ansiColor?: boolean;
94
97
  }): Promise<{
95
98
  success: boolean;
96
99
  output: string;
package/dist/index.js CHANGED
@@ -444,7 +444,11 @@ async function initMoveCompiler(options) {
444
444
  async function buildMovePackage(input) {
445
445
  try {
446
446
  const mod = await loadWasm(input.wasm);
447
- const raw = mod.compile(
447
+ const raw = input.ansiColor && typeof mod.compile_with_color === "function" ? mod.compile_with_color(
448
+ toJson(input.files),
449
+ toJson(input.dependencies ?? {}),
450
+ true
451
+ ) : mod.compile(
448
452
  toJson(input.files),
449
453
  toJson(input.dependencies ?? {})
450
454
  );
@@ -472,7 +476,8 @@ async function getWasmBindings(options) {
472
476
  }
473
477
  async function compileRaw(filesJson, depsJson, options) {
474
478
  const mod = await loadWasm(options?.wasm);
475
- const result = ensureCompileResult(mod.compile(filesJson, depsJson));
479
+ const raw = options?.ansiColor && typeof mod.compile_with_color === "function" ? mod.compile_with_color(filesJson, depsJson, true) : mod.compile(filesJson, depsJson);
480
+ const result = ensureCompileResult(raw);
476
481
  return {
477
482
  success: result.success(),
478
483
  output: result.output()
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tomlParser.ts","../src/resolver.ts","../src/fetcher.ts","../src/index.ts"],"sourcesContent":["function stripInlineComment(line: string): string {\n let inQuote = false;\n let quoteChar = \"\";\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if ((ch === '\"' || ch === \"'\") && (!inQuote || ch === quoteChar)) {\n inQuote = !inQuote;\n quoteChar = ch;\n }\n if (!inQuote && ch === \"#\") {\n return line.slice(0, i);\n }\n }\n return line;\n}\n\nfunction parseScalar(value: string): any {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n return trimmed.slice(1, -1);\n }\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n const num = Number(trimmed);\n if (!Number.isNaN(num)) return num;\n return trimmed;\n}\n\nfunction parseInlineTable(value: string): Record<string, any> {\n const result: Record<string, any> = {};\n const inner = value.trim().replace(/^\\{/, \"\").replace(/\\}$/, \"\");\n let current = \"\";\n let inQuote = false;\n let quoteChar = \"\";\n const parts: string[] = [];\n\n for (let i = 0; i < inner.length; i++) {\n const ch = inner[i];\n if ((ch === '\"' || ch === \"'\") && (!inQuote || ch === quoteChar)) {\n inQuote = !inQuote;\n quoteChar = ch;\n }\n if (!inQuote && ch === \",\") {\n parts.push(current);\n current = \"\";\n continue;\n }\n current += ch;\n }\n if (current.trim()) {\n parts.push(current);\n }\n\n for (const part of parts) {\n const eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n const key = part.slice(0, eq).trim();\n const val = part.slice(eq + 1).trim();\n result[key] = parseScalar(val);\n }\n return result;\n}\n\nexport function parseToml(content: string): {\n package: Record<string, any>;\n dependencies: Record<string, any>;\n addresses: Record<string, any>;\n} {\n const result = {\n package: {},\n dependencies: {},\n addresses: {},\n } as {\n package: Record<string, any>;\n dependencies: Record<string, any>;\n addresses: Record<string, any>;\n };\n let section: string | null = null;\n const lines = content.split(/\\r?\\n/);\n\n for (const rawLine of lines) {\n const line = stripInlineComment(rawLine).trim();\n if (!line) continue;\n const sectionMatch = line.match(/^\\[([^\\]]+)\\]$/);\n if (sectionMatch) {\n section = sectionMatch[1].trim();\n continue;\n }\n const eq = line.indexOf(\"=\");\n if (eq === -1 || !section) continue;\n\n const key = line.slice(0, eq).trim();\n const value = line.slice(eq + 1).trim();\n\n if (section === \"package\") {\n result.package[key.replace(/-/g, \"_\")] = parseScalar(value);\n } else if (section === \"dependencies\") {\n if (value.startsWith(\"{\")) {\n result.dependencies[key] = parseInlineTable(value);\n } else {\n result.dependencies[key] = parseScalar(value);\n }\n } else if (section === \"addresses\") {\n result.addresses[key] = parseScalar(value);\n }\n }\n\n return result;\n}\n","import { parseToml } from \"./tomlParser.js\";\nimport type { Fetcher } from \"./fetcher.js\";\n\nexport class Resolver {\n private fetcher: Fetcher;\n private globalAddresses: Record<string, string>;\n private visited: Set<string>;\n private dependencyFiles: Record<string, string>;\n private systemDepsLoaded: Set<string>;\n\n constructor(fetcher: Fetcher) {\n this.fetcher = fetcher;\n this.globalAddresses = {};\n this.visited = new Set();\n this.dependencyFiles = {};\n this.systemDepsLoaded = new Set();\n }\n\n async resolve(\n rootMoveToml: string,\n rootFiles: Record<string, string>\n ): Promise<{ files: string; dependencies: string }> {\n const parsedToml = parseToml(rootMoveToml);\n\n if (parsedToml.addresses) {\n this.mergeAddresses(parsedToml.addresses);\n }\n\n if (parsedToml.dependencies) {\n await this.resolveDeps(parsedToml.dependencies);\n await this.injectSystemDepsFromRoot(parsedToml.dependencies);\n }\n\n const finalMoveToml = this.reconstructMoveToml(parsedToml, this.globalAddresses);\n const finalFiles = { ...rootFiles, \"Move.toml\": finalMoveToml };\n\n return {\n files: JSON.stringify(finalFiles),\n dependencies: JSON.stringify(this.dependencyFiles),\n };\n }\n\n private mergeAddresses(addresses: Record<string, string>) {\n for (const [name, val] of Object.entries(addresses)) {\n this.globalAddresses[name] = this.normalizeAddress(val);\n }\n }\n\n private normalizeAddress(addr: string) {\n if (!addr) return addr;\n let clean = addr;\n if (clean.startsWith(\"0x\")) clean = clean.slice(2);\n if (/^[0-9a-fA-F]+$/.test(clean)) {\n return \"0x\" + clean.padStart(64, \"0\");\n }\n return addr;\n }\n\n private async resolveDeps(\n depsObj: Record<string, any>,\n parentContext: { git?: string; rev?: string; subdir?: string } | null = null\n ) {\n for (const [name, depInfo] of Object.entries(depsObj)) {\n let gitUrl: string | undefined;\n let rev: string | undefined;\n let subdir: string | undefined;\n\n if ((depInfo as any).git) {\n gitUrl = (depInfo as any).git;\n rev = (depInfo as any).rev;\n subdir = (depInfo as any).subdir;\n } else if ((depInfo as any).local) {\n if (!parentContext) continue;\n gitUrl = parentContext.git;\n rev = parentContext.rev;\n subdir = this.resolvePath(parentContext.subdir || \"\", (depInfo as any).local);\n } else {\n continue;\n }\n\n const cacheKey = `${gitUrl}|${rev}|${subdir || \"\"}`;\n if (this.visited.has(cacheKey)) continue;\n this.visited.add(cacheKey);\n\n const files = await this.fetcher.fetch(gitUrl!, rev!, subdir);\n\n let pkgMoveToml: string | null = null;\n for (const [path, content] of Object.entries(files)) {\n if (path.endsWith(\"Move.toml\")) {\n pkgMoveToml = content;\n break;\n }\n }\n\n if (pkgMoveToml) {\n const parsed = parseToml(pkgMoveToml);\n if (parsed.addresses) {\n this.mergeAddresses(parsed.addresses);\n }\n if (parsed.dependencies) {\n await this.resolveDeps(parsed.dependencies, { git: gitUrl, rev, subdir });\n }\n }\n\n for (const [path, content] of Object.entries(files)) {\n if (path.endsWith(\".move\") || path.endsWith(\"Move.toml\")) {\n const targetPath = `dependencies/${name}/${path}`;\n this.dependencyFiles[targetPath] = content;\n }\n }\n }\n }\n\n private resolvePath(base: string, relative: string): string {\n const stack = base.split(\"/\").filter((p) => p && p !== \".\");\n const parts = relative.split(\"/\").filter((p) => p && p !== \".\");\n for (const part of parts) {\n if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return stack.join(\"/\");\n }\n\n private reconstructMoveToml(originalParsed: any, addresses: Record<string, string>) {\n let newToml = `[package]\\nname = \"${originalParsed.package.name}\"\\nversion = \"${originalParsed.package.version}\"\\n`;\n if (originalParsed.package.edition) {\n newToml += `edition = \"${originalParsed.package.edition}\"\\n`;\n }\n\n newToml += `\\n[dependencies]\\n`;\n if (originalParsed.dependencies) {\n for (const [name, info] of Object.entries(originalParsed.dependencies)) {\n newToml += `${name} = { git = \"${(info as any).git}\", rev = \"${(info as any).rev}\" }\\n`;\n }\n }\n\n newToml += `\\n[addresses]\\n`;\n for (const [addrName, addrVal] of Object.entries(addresses)) {\n newToml += `${addrName} = \"${addrVal}\"\\n`;\n }\n return newToml;\n }\n\n private async injectSystemDepsFromRoot(depsObj: Record<string, any>) {\n for (const depInfo of Object.values(depsObj)) {\n if (!depInfo || !(depInfo as any).git || !(depInfo as any).rev) continue;\n if (!this.isSuiRepo((depInfo as any).git)) continue;\n await this.addImplicitSystemDepsForRepo((depInfo as any).git, (depInfo as any).rev);\n return;\n }\n }\n\n private async addImplicitSystemDepsForRepo(gitUrl: string, rev: string) {\n if (!this.isSuiRepo(gitUrl)) return;\n const cacheKey = `${gitUrl}|${rev}`;\n if (this.systemDepsLoaded.has(cacheKey)) return;\n this.systemDepsLoaded.add(cacheKey);\n\n const manifestPath = \"crates/sui-framework-snapshot/manifest.json\";\n if (!(this.fetcher as any).fetchFile) return;\n\n let packages: { name: string; id: string }[] | null = null;\n try {\n const manifestText = await (this.fetcher as any).fetchFile(gitUrl, rev, manifestPath);\n if (manifestText) {\n const manifest = JSON.parse(manifestText);\n const versions = Object.keys(manifest)\n .map((v) => Number(v))\n .filter((v) => !Number.isNaN(v))\n .sort((a, b) => a - b);\n const latestVersion = versions[versions.length - 1];\n const latest = manifest[String(latestVersion)];\n if (latest && latest.packages) {\n packages = latest.packages;\n }\n }\n } catch (e) {}\n\n if (!packages) {\n packages = [\n { name: \"MoveStdlib\", id: \"0x1\" },\n { name: \"Sui\", id: \"0x2\" },\n { name: \"SuiSystem\", id: \"0x3\" },\n { name: \"Bridge\", id: \"0xb\" },\n ];\n }\n\n for (const pkg of packages) {\n if (!pkg || !pkg.name || !pkg.id) continue;\n if (pkg.name === \"DeepBook\") continue;\n const targetPath = `dependencies/${pkg.name}/Move.toml`;\n if (this.dependencyFiles[targetPath]) continue;\n const moveToml = [\n \"[package]\",\n `name = \"${pkg.name}\"`,\n 'version = \"0.0.0\"',\n `published-at = \"${pkg.id}\"`,\n \"\",\n ].join(\"\\n\");\n this.dependencyFiles[targetPath] = moveToml;\n }\n }\n\n private isSuiRepo(gitUrl: string): boolean {\n return gitUrl.includes(\"github.com/MystenLabs/sui\");\n }\n}\n\nexport async function resolve(\n rootMoveTomlContent: string,\n rootSourceFiles: Record<string, string>,\n fetcher: Fetcher\n): Promise<{ files: string; dependencies: string }> {\n const resolver = new Resolver(fetcher);\n return resolver.resolve(rootMoveTomlContent, rootSourceFiles);\n}\n","/** Abstract interface for fetching package content. */\nexport class Fetcher {\n /** Fetch a package. Return map of path -> content. */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetch(_gitUrl: string, _rev: string, _subdir?: string): Promise<Record<string, string>> {\n throw new Error(\"Not implemented\");\n }\n\n /** Fetch a single file from a repository. */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetchFile(_gitUrl: string, _rev: string, _path: string): Promise<string | null> {\n throw new Error(\"Not implemented\");\n }\n}\n\n/** Fetcher that retrieves files from public GitHub repositories via fetch(). */\nexport class GitHubFetcher extends Fetcher {\n private cache: Map<string, string>;\n\n constructor() {\n super();\n this.cache = new Map();\n }\n\n async fetch(gitUrl: string, rev: string, subdir?: string): Promise<Record<string, string>> {\n const { owner, repo } = this.parseGitUrl(gitUrl);\n if (!owner || !repo) {\n throw new Error(`Invalid git URL: ${gitUrl}`);\n }\n\n const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${rev}?recursive=1`;\n let treeData: any;\n try {\n const resp = await fetch(treeUrl);\n if (!resp.ok) {\n if (resp.status === 403 || resp.status === 429) {\n throw new Error(\"GitHub API rate limit exceeded.\");\n }\n throw new Error(`Failed to fetch tree: ${resp.statusText}`);\n }\n treeData = await resp.json();\n } catch (e) {\n return {};\n }\n\n const files: Record<string, string> = {};\n const fetchPromises: Promise<void>[] = [];\n\n for (const item of treeData.tree as any[]) {\n if (item.type !== \"blob\") continue;\n\n let relativePath: string = item.path;\n if (subdir) {\n if (!item.path.startsWith(subdir)) continue;\n relativePath = item.path.slice(subdir.length);\n if (relativePath.startsWith(\"/\")) {\n relativePath = relativePath.slice(1);\n }\n }\n\n if (!relativePath.endsWith(\".move\") && relativePath !== \"Move.toml\") {\n continue;\n }\n\n const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${rev}/${item.path}`;\n const p = this.fetchContent(rawUrl).then((content) => {\n if (content) {\n files[relativePath] = content;\n }\n });\n fetchPromises.push(p);\n }\n\n await Promise.all(fetchPromises);\n return files;\n }\n\n async fetchFile(gitUrl: string, rev: string, path: string): Promise<string | null> {\n const { owner, repo } = this.parseGitUrl(gitUrl);\n if (!owner || !repo) {\n throw new Error(`Invalid git URL: ${gitUrl}`);\n }\n const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${rev}/${path}`;\n return this.fetchContent(rawUrl);\n }\n\n private async fetchContent(url: string): Promise<string | null> {\n if (this.cache.has(url)) {\n return this.cache.get(url) ?? null;\n }\n try {\n const resp = await fetch(url);\n if (!resp.ok) return null;\n const text = await resp.text();\n this.cache.set(url, text);\n return text;\n } catch (e) {\n return null;\n }\n }\n\n private parseGitUrl(url: string): { owner: string | null; repo: string | null } {\n try {\n const urlObj = new URL(url);\n const parts = urlObj.pathname.split(\"/\").filter((p) => p);\n if (parts.length >= 2) {\n let repo = parts[1];\n if (repo.endsWith(\".git\")) {\n repo = repo.slice(0, -4);\n }\n return { owner: parts[0], repo };\n }\n } catch (e) {}\n return { owner: null, repo: null };\n }\n}\n","type MaybePromise<T> = T | Promise<T>;\n\nexport interface BuildInput {\n /** Virtual file system contents. Keys are paths (e.g. \"Move.toml\", \"sources/Module.move\"). */\n files: Record<string, string>;\n /** Optional dependency files keyed by path. */\n dependencies?: Record<string, string>;\n /** Optional custom URL for the wasm binary. Defaults to bundled wasm next to this module. */\n wasm?: string | URL;\n}\n\nexport interface BuildSuccess {\n success: true;\n /** Base64-encoded bytecode modules. */\n modules: string[];\n /** Hex-encoded dependency IDs. */\n dependencies: string[];\n /** Hex-encoded Blake2b-256 package digest. */\n digest: string;\n}\n\nexport interface BuildFailure {\n success: false;\n error: string;\n}\n\ntype WasmModule = typeof import(\"./sui_move_wasm.js\");\n\nconst wasmUrl = (() => {\n try {\n // Works in ESM builds; CJS bundle falls back to plain string.\n return new URL(\"./sui_move_wasm_bg.wasm\", import.meta.url);\n } catch {\n return \"./sui_move_wasm_bg.wasm\";\n }\n})();\nlet wasmReady: Promise<WasmModule> | undefined;\n\nasync function loadWasm(customWasm?: string | URL): Promise<WasmModule> {\n if (!wasmReady) {\n wasmReady = import(\"./sui_move_wasm.js\").then(async (mod) => {\n await mod.default(customWasm ?? wasmUrl);\n return mod;\n });\n }\n return wasmReady;\n}\n\nfunction toJson(value: unknown): string {\n return JSON.stringify(value ?? {});\n}\n\nfunction asFailure(err: unknown): BuildFailure {\n const msg =\n err instanceof Error\n ? err.message\n : typeof err === \"string\"\n ? err\n : \"Unknown error\";\n return { success: false, error: msg };\n}\n\nfunction ensureCompileResult(result: unknown): {\n success: () => boolean;\n output: () => string;\n} {\n if (typeof result !== \"object\" || result === null) {\n throw new Error(\"Unexpected compile result shape from wasm\");\n }\n\n const asAny = result as any;\n\n // wasm-bindgen structs expose methods\n if (\n typeof asAny.success === \"function\" &&\n typeof asAny.output === \"function\"\n ) {\n return asAny as { success: () => boolean; output: () => string };\n }\n\n // Some builds may expose plain fields; wrap them into functions.\n if (typeof asAny.success === \"boolean\" && typeof asAny.output === \"string\") {\n return {\n success: () => asAny.success as boolean,\n output: () => asAny.output as string,\n };\n }\n\n throw new Error(\"Unexpected compile result shape from wasm\");\n}\n\nfunction parseCompileResult(output: string): BuildSuccess | BuildFailure {\n const toHex = (bytes: number[]): string =>\n bytes.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n try {\n const parsed = JSON.parse(output) as {\n modules?: string[];\n dependencies?: string[];\n digest?: number[] | string;\n };\n if (!parsed.modules || !parsed.dependencies || !parsed.digest) {\n throw new Error(\"missing fields in compiler output\");\n }\n const digestHex =\n typeof parsed.digest === \"string\" ? parsed.digest : toHex(parsed.digest);\n return {\n success: true,\n modules: parsed.modules,\n dependencies: parsed.dependencies,\n digest: digestHex,\n };\n } catch (error) {\n return asFailure(error);\n }\n}\n\n/** Initialize the wasm module (idempotent). Provide a custom wasm URL if hosting separately. */\nexport async function initMoveCompiler(options?: {\n wasm?: string | URL;\n}): Promise<void> {\n await loadWasm(options?.wasm);\n}\n\n/** Compile a Move package in memory using the bundled Move compiler wasm. */\nexport async function buildMovePackage(\n input: BuildInput\n): Promise<BuildSuccess | BuildFailure> {\n try {\n const mod = await loadWasm(input.wasm);\n const raw = mod.compile(\n toJson(input.files),\n toJson(input.dependencies ?? {})\n );\n const result = ensureCompileResult(raw);\n const ok = result.success();\n const output = result.output();\n\n if (!ok) {\n return asFailure(output);\n }\n return parseCompileResult(output);\n } catch (error) {\n return asFailure(error);\n }\n}\n\n/** Sui Move version baked into the wasm (e.g. from Cargo.lock). */\nexport async function getSuiMoveVersion(options?: {\n wasm?: string | URL;\n}): Promise<string> {\n const mod = await loadWasm(options?.wasm);\n return mod.sui_move_version();\n}\n\n/** Sui repo version baked into the wasm (e.g. from Cargo.lock). */\nexport async function getSuiVersion(options?: {\n wasm?: string | URL;\n}): Promise<string> {\n const mod = await loadWasm(options?.wasm);\n return mod.sui_version();\n}\n\n/** Get the raw wasm bindings (low-level interface). */\nexport async function getWasmBindings(options?: {\n wasm?: string | URL;\n}): Promise<WasmModule> {\n return loadWasm(options?.wasm);\n}\n\n/** Low-level helper to call wasm compile directly with JSON strings. */\nexport async function compileRaw(\n filesJson: string,\n depsJson: string,\n options?: { wasm?: string | URL }\n) {\n const mod = await loadWasm(options?.wasm);\n const result = ensureCompileResult(mod.compile(filesJson, depsJson));\n return {\n success: result.success(),\n output: result.output(),\n };\n}\n\nexport type BuildResult = BuildSuccess | BuildFailure;\n\n// Resolver utilities (optional dependency fetching)\nexport { resolve, Resolver } from \"./resolver.js\";\nexport { GitHubFetcher, Fetcher } from \"./fetcher.js\";\nexport { parseToml } from \"./tomlParser.js\";\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/tomlParser.ts","../src/resolver.ts","../src/fetcher.ts","../src/index.ts"],"sourcesContent":["function stripInlineComment(line: string): string {\n let inQuote = false;\n let quoteChar = \"\";\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if ((ch === '\"' || ch === \"'\") && (!inQuote || ch === quoteChar)) {\n inQuote = !inQuote;\n quoteChar = ch;\n }\n if (!inQuote && ch === \"#\") {\n return line.slice(0, i);\n }\n }\n return line;\n}\n\nfunction parseScalar(value: string): any {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n return trimmed.slice(1, -1);\n }\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n const num = Number(trimmed);\n if (!Number.isNaN(num)) return num;\n return trimmed;\n}\n\nfunction parseInlineTable(value: string): Record<string, any> {\n const result: Record<string, any> = {};\n const inner = value.trim().replace(/^\\{/, \"\").replace(/\\}$/, \"\");\n let current = \"\";\n let inQuote = false;\n let quoteChar = \"\";\n const parts: string[] = [];\n\n for (let i = 0; i < inner.length; i++) {\n const ch = inner[i];\n if ((ch === '\"' || ch === \"'\") && (!inQuote || ch === quoteChar)) {\n inQuote = !inQuote;\n quoteChar = ch;\n }\n if (!inQuote && ch === \",\") {\n parts.push(current);\n current = \"\";\n continue;\n }\n current += ch;\n }\n if (current.trim()) {\n parts.push(current);\n }\n\n for (const part of parts) {\n const eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n const key = part.slice(0, eq).trim();\n const val = part.slice(eq + 1).trim();\n result[key] = parseScalar(val);\n }\n return result;\n}\n\nexport function parseToml(content: string): {\n package: Record<string, any>;\n dependencies: Record<string, any>;\n addresses: Record<string, any>;\n} {\n const result = {\n package: {},\n dependencies: {},\n addresses: {},\n } as {\n package: Record<string, any>;\n dependencies: Record<string, any>;\n addresses: Record<string, any>;\n };\n let section: string | null = null;\n const lines = content.split(/\\r?\\n/);\n\n for (const rawLine of lines) {\n const line = stripInlineComment(rawLine).trim();\n if (!line) continue;\n const sectionMatch = line.match(/^\\[([^\\]]+)\\]$/);\n if (sectionMatch) {\n section = sectionMatch[1].trim();\n continue;\n }\n const eq = line.indexOf(\"=\");\n if (eq === -1 || !section) continue;\n\n const key = line.slice(0, eq).trim();\n const value = line.slice(eq + 1).trim();\n\n if (section === \"package\") {\n result.package[key.replace(/-/g, \"_\")] = parseScalar(value);\n } else if (section === \"dependencies\") {\n if (value.startsWith(\"{\")) {\n result.dependencies[key] = parseInlineTable(value);\n } else {\n result.dependencies[key] = parseScalar(value);\n }\n } else if (section === \"addresses\") {\n result.addresses[key] = parseScalar(value);\n }\n }\n\n return result;\n}\n","import { parseToml } from \"./tomlParser.js\";\nimport type { Fetcher } from \"./fetcher.js\";\n\nexport class Resolver {\n private fetcher: Fetcher;\n private globalAddresses: Record<string, string>;\n private visited: Set<string>;\n private dependencyFiles: Record<string, string>;\n private systemDepsLoaded: Set<string>;\n\n constructor(fetcher: Fetcher) {\n this.fetcher = fetcher;\n this.globalAddresses = {};\n this.visited = new Set();\n this.dependencyFiles = {};\n this.systemDepsLoaded = new Set();\n }\n\n async resolve(\n rootMoveToml: string,\n rootFiles: Record<string, string>\n ): Promise<{ files: string; dependencies: string }> {\n const parsedToml = parseToml(rootMoveToml);\n\n if (parsedToml.addresses) {\n this.mergeAddresses(parsedToml.addresses);\n }\n\n if (parsedToml.dependencies) {\n await this.resolveDeps(parsedToml.dependencies);\n await this.injectSystemDepsFromRoot(parsedToml.dependencies);\n }\n\n const finalMoveToml = this.reconstructMoveToml(parsedToml, this.globalAddresses);\n const finalFiles = { ...rootFiles, \"Move.toml\": finalMoveToml };\n\n return {\n files: JSON.stringify(finalFiles),\n dependencies: JSON.stringify(this.dependencyFiles),\n };\n }\n\n private mergeAddresses(addresses: Record<string, string>) {\n for (const [name, val] of Object.entries(addresses)) {\n this.globalAddresses[name] = this.normalizeAddress(val);\n }\n }\n\n private normalizeAddress(addr: string) {\n if (!addr) return addr;\n let clean = addr;\n if (clean.startsWith(\"0x\")) clean = clean.slice(2);\n if (/^[0-9a-fA-F]+$/.test(clean)) {\n return \"0x\" + clean.padStart(64, \"0\");\n }\n return addr;\n }\n\n private async resolveDeps(\n depsObj: Record<string, any>,\n parentContext: { git?: string; rev?: string; subdir?: string } | null = null\n ) {\n for (const [name, depInfo] of Object.entries(depsObj)) {\n let gitUrl: string | undefined;\n let rev: string | undefined;\n let subdir: string | undefined;\n\n if ((depInfo as any).git) {\n gitUrl = (depInfo as any).git;\n rev = (depInfo as any).rev;\n subdir = (depInfo as any).subdir;\n } else if ((depInfo as any).local) {\n if (!parentContext) continue;\n gitUrl = parentContext.git;\n rev = parentContext.rev;\n subdir = this.resolvePath(parentContext.subdir || \"\", (depInfo as any).local);\n } else {\n continue;\n }\n\n const cacheKey = `${gitUrl}|${rev}|${subdir || \"\"}`;\n if (this.visited.has(cacheKey)) continue;\n this.visited.add(cacheKey);\n\n const files = await this.fetcher.fetch(gitUrl!, rev!, subdir);\n\n let pkgMoveToml: string | null = null;\n for (const [path, content] of Object.entries(files)) {\n if (path.endsWith(\"Move.toml\")) {\n pkgMoveToml = content;\n break;\n }\n }\n\n if (pkgMoveToml) {\n const parsed = parseToml(pkgMoveToml);\n if (parsed.addresses) {\n this.mergeAddresses(parsed.addresses);\n }\n if (parsed.dependencies) {\n await this.resolveDeps(parsed.dependencies, { git: gitUrl, rev, subdir });\n }\n }\n\n for (const [path, content] of Object.entries(files)) {\n if (path.endsWith(\".move\") || path.endsWith(\"Move.toml\")) {\n const targetPath = `dependencies/${name}/${path}`;\n this.dependencyFiles[targetPath] = content;\n }\n }\n }\n }\n\n private resolvePath(base: string, relative: string): string {\n const stack = base.split(\"/\").filter((p) => p && p !== \".\");\n const parts = relative.split(\"/\").filter((p) => p && p !== \".\");\n for (const part of parts) {\n if (part === \"..\") {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return stack.join(\"/\");\n }\n\n private reconstructMoveToml(originalParsed: any, addresses: Record<string, string>) {\n let newToml = `[package]\\nname = \"${originalParsed.package.name}\"\\nversion = \"${originalParsed.package.version}\"\\n`;\n if (originalParsed.package.edition) {\n newToml += `edition = \"${originalParsed.package.edition}\"\\n`;\n }\n\n newToml += `\\n[dependencies]\\n`;\n if (originalParsed.dependencies) {\n for (const [name, info] of Object.entries(originalParsed.dependencies)) {\n newToml += `${name} = { git = \"${(info as any).git}\", rev = \"${(info as any).rev}\" }\\n`;\n }\n }\n\n newToml += `\\n[addresses]\\n`;\n for (const [addrName, addrVal] of Object.entries(addresses)) {\n newToml += `${addrName} = \"${addrVal}\"\\n`;\n }\n return newToml;\n }\n\n private async injectSystemDepsFromRoot(depsObj: Record<string, any>) {\n for (const depInfo of Object.values(depsObj)) {\n if (!depInfo || !(depInfo as any).git || !(depInfo as any).rev) continue;\n if (!this.isSuiRepo((depInfo as any).git)) continue;\n await this.addImplicitSystemDepsForRepo((depInfo as any).git, (depInfo as any).rev);\n return;\n }\n }\n\n private async addImplicitSystemDepsForRepo(gitUrl: string, rev: string) {\n if (!this.isSuiRepo(gitUrl)) return;\n const cacheKey = `${gitUrl}|${rev}`;\n if (this.systemDepsLoaded.has(cacheKey)) return;\n this.systemDepsLoaded.add(cacheKey);\n\n const manifestPath = \"crates/sui-framework-snapshot/manifest.json\";\n if (!(this.fetcher as any).fetchFile) return;\n\n let packages: { name: string; id: string }[] | null = null;\n try {\n const manifestText = await (this.fetcher as any).fetchFile(gitUrl, rev, manifestPath);\n if (manifestText) {\n const manifest = JSON.parse(manifestText);\n const versions = Object.keys(manifest)\n .map((v) => Number(v))\n .filter((v) => !Number.isNaN(v))\n .sort((a, b) => a - b);\n const latestVersion = versions[versions.length - 1];\n const latest = manifest[String(latestVersion)];\n if (latest && latest.packages) {\n packages = latest.packages;\n }\n }\n } catch (e) {}\n\n if (!packages) {\n packages = [\n { name: \"MoveStdlib\", id: \"0x1\" },\n { name: \"Sui\", id: \"0x2\" },\n { name: \"SuiSystem\", id: \"0x3\" },\n { name: \"Bridge\", id: \"0xb\" },\n ];\n }\n\n for (const pkg of packages) {\n if (!pkg || !pkg.name || !pkg.id) continue;\n if (pkg.name === \"DeepBook\") continue;\n const targetPath = `dependencies/${pkg.name}/Move.toml`;\n if (this.dependencyFiles[targetPath]) continue;\n const moveToml = [\n \"[package]\",\n `name = \"${pkg.name}\"`,\n 'version = \"0.0.0\"',\n `published-at = \"${pkg.id}\"`,\n \"\",\n ].join(\"\\n\");\n this.dependencyFiles[targetPath] = moveToml;\n }\n }\n\n private isSuiRepo(gitUrl: string): boolean {\n return gitUrl.includes(\"github.com/MystenLabs/sui\");\n }\n}\n\nexport async function resolve(\n rootMoveTomlContent: string,\n rootSourceFiles: Record<string, string>,\n fetcher: Fetcher\n): Promise<{ files: string; dependencies: string }> {\n const resolver = new Resolver(fetcher);\n return resolver.resolve(rootMoveTomlContent, rootSourceFiles);\n}\n","/** Abstract interface for fetching package content. */\nexport class Fetcher {\n /** Fetch a package. Return map of path -> content. */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetch(_gitUrl: string, _rev: string, _subdir?: string): Promise<Record<string, string>> {\n throw new Error(\"Not implemented\");\n }\n\n /** Fetch a single file from a repository. */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetchFile(_gitUrl: string, _rev: string, _path: string): Promise<string | null> {\n throw new Error(\"Not implemented\");\n }\n}\n\n/** Fetcher that retrieves files from public GitHub repositories via fetch(). */\nexport class GitHubFetcher extends Fetcher {\n private cache: Map<string, string>;\n\n constructor() {\n super();\n this.cache = new Map();\n }\n\n async fetch(gitUrl: string, rev: string, subdir?: string): Promise<Record<string, string>> {\n const { owner, repo } = this.parseGitUrl(gitUrl);\n if (!owner || !repo) {\n throw new Error(`Invalid git URL: ${gitUrl}`);\n }\n\n const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${rev}?recursive=1`;\n let treeData: any;\n try {\n const resp = await fetch(treeUrl);\n if (!resp.ok) {\n if (resp.status === 403 || resp.status === 429) {\n throw new Error(\"GitHub API rate limit exceeded.\");\n }\n throw new Error(`Failed to fetch tree: ${resp.statusText}`);\n }\n treeData = await resp.json();\n } catch (e) {\n return {};\n }\n\n const files: Record<string, string> = {};\n const fetchPromises: Promise<void>[] = [];\n\n for (const item of treeData.tree as any[]) {\n if (item.type !== \"blob\") continue;\n\n let relativePath: string = item.path;\n if (subdir) {\n if (!item.path.startsWith(subdir)) continue;\n relativePath = item.path.slice(subdir.length);\n if (relativePath.startsWith(\"/\")) {\n relativePath = relativePath.slice(1);\n }\n }\n\n if (!relativePath.endsWith(\".move\") && relativePath !== \"Move.toml\") {\n continue;\n }\n\n const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${rev}/${item.path}`;\n const p = this.fetchContent(rawUrl).then((content) => {\n if (content) {\n files[relativePath] = content;\n }\n });\n fetchPromises.push(p);\n }\n\n await Promise.all(fetchPromises);\n return files;\n }\n\n async fetchFile(gitUrl: string, rev: string, path: string): Promise<string | null> {\n const { owner, repo } = this.parseGitUrl(gitUrl);\n if (!owner || !repo) {\n throw new Error(`Invalid git URL: ${gitUrl}`);\n }\n const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${rev}/${path}`;\n return this.fetchContent(rawUrl);\n }\n\n private async fetchContent(url: string): Promise<string | null> {\n if (this.cache.has(url)) {\n return this.cache.get(url) ?? null;\n }\n try {\n const resp = await fetch(url);\n if (!resp.ok) return null;\n const text = await resp.text();\n this.cache.set(url, text);\n return text;\n } catch (e) {\n return null;\n }\n }\n\n private parseGitUrl(url: string): { owner: string | null; repo: string | null } {\n try {\n const urlObj = new URL(url);\n const parts = urlObj.pathname.split(\"/\").filter((p) => p);\n if (parts.length >= 2) {\n let repo = parts[1];\n if (repo.endsWith(\".git\")) {\n repo = repo.slice(0, -4);\n }\n return { owner: parts[0], repo };\n }\n } catch (e) {}\n return { owner: null, repo: null };\n }\n}\n","type MaybePromise<T> = T | Promise<T>;\n\nexport interface BuildInput {\n /** Virtual file system contents. Keys are paths (e.g. \"Move.toml\", \"sources/Module.move\"). */\n files: Record<string, string>;\n /** Optional dependency files keyed by path. */\n dependencies?: Record<string, string>;\n /** Optional custom URL for the wasm binary. Defaults to bundled wasm next to this module. */\n wasm?: string | URL;\n /** Emit ANSI color codes in diagnostics when available. */\n ansiColor?: boolean;\n}\n\nexport interface BuildSuccess {\n success: true;\n /** Base64-encoded bytecode modules. */\n modules: string[];\n /** Hex-encoded dependency IDs. */\n dependencies: string[];\n /** Hex-encoded Blake2b-256 package digest. */\n digest: string;\n}\n\nexport interface BuildFailure {\n success: false;\n error: string;\n}\n\ntype WasmModule = typeof import(\"./sui_move_wasm.js\");\n\nconst wasmUrl = (() => {\n try {\n // Works in ESM builds; CJS bundle falls back to plain string.\n return new URL(\"./sui_move_wasm_bg.wasm\", import.meta.url);\n } catch {\n return \"./sui_move_wasm_bg.wasm\";\n }\n})();\nlet wasmReady: Promise<WasmModule> | undefined;\n\nasync function loadWasm(customWasm?: string | URL): Promise<WasmModule> {\n if (!wasmReady) {\n wasmReady = import(\"./sui_move_wasm.js\").then(async (mod) => {\n await mod.default(customWasm ?? wasmUrl);\n return mod;\n });\n }\n return wasmReady;\n}\n\nfunction toJson(value: unknown): string {\n return JSON.stringify(value ?? {});\n}\n\nfunction asFailure(err: unknown): BuildFailure {\n const msg =\n err instanceof Error\n ? err.message\n : typeof err === \"string\"\n ? err\n : \"Unknown error\";\n return { success: false, error: msg };\n}\n\nfunction ensureCompileResult(result: unknown): {\n success: () => boolean;\n output: () => string;\n} {\n if (typeof result !== \"object\" || result === null) {\n throw new Error(\"Unexpected compile result shape from wasm\");\n }\n\n const asAny = result as any;\n\n // wasm-bindgen structs expose methods\n if (\n typeof asAny.success === \"function\" &&\n typeof asAny.output === \"function\"\n ) {\n return asAny as { success: () => boolean; output: () => string };\n }\n\n // Some builds may expose plain fields; wrap them into functions.\n if (typeof asAny.success === \"boolean\" && typeof asAny.output === \"string\") {\n return {\n success: () => asAny.success as boolean,\n output: () => asAny.output as string,\n };\n }\n\n throw new Error(\"Unexpected compile result shape from wasm\");\n}\n\nfunction parseCompileResult(output: string): BuildSuccess | BuildFailure {\n const toHex = (bytes: number[]): string =>\n bytes.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n try {\n const parsed = JSON.parse(output) as {\n modules?: string[];\n dependencies?: string[];\n digest?: number[] | string;\n };\n if (!parsed.modules || !parsed.dependencies || !parsed.digest) {\n throw new Error(\"missing fields in compiler output\");\n }\n const digestHex =\n typeof parsed.digest === \"string\" ? parsed.digest : toHex(parsed.digest);\n return {\n success: true,\n modules: parsed.modules,\n dependencies: parsed.dependencies,\n digest: digestHex,\n };\n } catch (error) {\n return asFailure(error);\n }\n}\n\n/** Initialize the wasm module (idempotent). Provide a custom wasm URL if hosting separately. */\nexport async function initMoveCompiler(options?: {\n wasm?: string | URL;\n}): Promise<void> {\n await loadWasm(options?.wasm);\n}\n\n/** Compile a Move package in memory using the bundled Move compiler wasm. */\nexport async function buildMovePackage(\n input: BuildInput\n): Promise<BuildSuccess | BuildFailure> {\n try {\n const mod = await loadWasm(input.wasm);\n const raw =\n input.ansiColor && typeof (mod as any).compile_with_color === \"function\"\n ? (mod as any).compile_with_color(\n toJson(input.files),\n toJson(input.dependencies ?? {}),\n true\n )\n : mod.compile(\n toJson(input.files),\n toJson(input.dependencies ?? {})\n );\n const result = ensureCompileResult(raw);\n const ok = result.success();\n const output = result.output();\n\n if (!ok) {\n return asFailure(output);\n }\n return parseCompileResult(output);\n } catch (error) {\n return asFailure(error);\n }\n}\n\n/** Sui Move version baked into the wasm (e.g. from Cargo.lock). */\nexport async function getSuiMoveVersion(options?: {\n wasm?: string | URL;\n}): Promise<string> {\n const mod = await loadWasm(options?.wasm);\n return mod.sui_move_version();\n}\n\n/** Sui repo version baked into the wasm (e.g. from Cargo.lock). */\nexport async function getSuiVersion(options?: {\n wasm?: string | URL;\n}): Promise<string> {\n const mod = await loadWasm(options?.wasm);\n return mod.sui_version();\n}\n\n/** Get the raw wasm bindings (low-level interface). */\nexport async function getWasmBindings(options?: {\n wasm?: string | URL;\n}): Promise<WasmModule> {\n return loadWasm(options?.wasm);\n}\n\n/** Low-level helper to call wasm compile directly with JSON strings. */\nexport async function compileRaw(\n filesJson: string,\n depsJson: string,\n options?: { wasm?: string | URL; ansiColor?: boolean }\n) {\n const mod = await loadWasm(options?.wasm);\n const raw =\n options?.ansiColor && typeof (mod as any).compile_with_color === \"function\"\n ? (mod as any).compile_with_color(filesJson, depsJson, true)\n : mod.compile(filesJson, depsJson);\n const result = ensureCompileResult(raw);\n return {\n success: result.success(),\n output: result.output(),\n };\n}\n\nexport type BuildResult = BuildSuccess | BuildFailure;\n\n// Resolver utilities (optional dependency fetching)\nexport { resolve, Resolver } from \"./resolver.js\";\nexport { GitHubFetcher, Fetcher } from \"./fetcher.js\";\nexport { parseToml } from \"./tomlParser.js\";\n"],"mappings":"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","names":[]}
@@ -11,6 +11,8 @@ export class MoveCompilerResult {
11
11
 
12
12
  export function compile(files_json: string, dependencies_json: string): MoveCompilerResult;
13
13
 
14
+ export function compile_with_color(files_json: string, dependencies_json: string, ansi_color: boolean): MoveCompilerResult;
15
+
14
16
  export function sui_move_version(): string;
15
17
 
16
18
  export function sui_version(): string;
@@ -24,6 +26,7 @@ export interface InitOutput {
24
26
  readonly movecompilerresult_output: (a: number) => [number, number];
25
27
  readonly sui_move_version: () => [number, number];
26
28
  readonly compile: (a: number, b: number, c: number, d: number) => number;
29
+ readonly compile_with_color: (a: number, b: number, c: number, d: number, e: number) => number;
27
30
  readonly sui_version: () => [number, number];
28
31
  readonly __wbindgen_free: (a: number, b: number, c: number) => void;
29
32
  readonly __wbindgen_malloc: (a: number, b: number) => number;
@@ -148,6 +148,21 @@ export function compile(files_json, dependencies_json) {
148
148
  return MoveCompilerResult.__wrap(ret);
149
149
  }
150
150
 
151
+ /**
152
+ * @param {string} files_json
153
+ * @param {string} dependencies_json
154
+ * @param {boolean} ansi_color
155
+ * @returns {MoveCompilerResult}
156
+ */
157
+ export function compile_with_color(files_json, dependencies_json, ansi_color) {
158
+ const ptr0 = passStringToWasm0(files_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
159
+ const len0 = WASM_VECTOR_LEN;
160
+ const ptr1 = passStringToWasm0(dependencies_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
161
+ const len1 = WASM_VECTOR_LEN;
162
+ const ret = wasm.compile_with_color(ptr0, len0, ptr1, len1, ansi_color);
163
+ return MoveCompilerResult.__wrap(ret);
164
+ }
165
+
151
166
  /**
152
167
  * @returns {string}
153
168
  */
Binary file
@@ -6,6 +6,7 @@ export const movecompilerresult_success: (a: number) => number;
6
6
  export const movecompilerresult_output: (a: number) => [number, number];
7
7
  export const sui_move_version: () => [number, number];
8
8
  export const compile: (a: number, b: number, c: number, d: number) => number;
9
+ export const compile_with_color: (a: number, b: number, c: number, d: number, e: number) => number;
9
10
  export const sui_version: () => [number, number];
10
11
  export const __wbindgen_free: (a: number, b: number, c: number) => void;
11
12
  export const __wbindgen_malloc: (a: number, b: number) => number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zktx.io/sui-move-builder",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Build Move packages in web or Node.js with dependency fetching and dump outputs.",
5
5
  "license": "MIT",
6
6
  "author": "",