@bepack/cli 0.1.0-beta.6 → 0.1.0-beta.7
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 +89 -224
- package/README.zh-CN.md +95 -223
- package/dist/cli.js +11 -11
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{pathToFileURL as e}from"node:url";import t from"node:path";import{constants as n,promises as r}from"node:fs";import{platform as i}from"node:os";import"rolldown/plugins";import{access as a,mkdir as o,readFile as s}from"node:fs/promises";import{spawn as c}from"node:child_process";var l=Object.create,u=Object.defineProperty,d=Object.getOwnPropertyDescriptor,f=Object.getOwnPropertyNames,p=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty,h=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),g=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=f(t),a=0,o=i.length,s;a<o;a++)s=i[a],!m.call(e,s)&&s!==n&&u(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=d(t,s))||r.enumerable});return e},_=(e,t,n)=>(n=e==null?{}:l(p(e)),g(t||!e||!e.__esModule||!m.call(e,`default`)?u(n,`default`,{value:e,enumerable:!0}):n,e));const v={root:`.`,configured:{root:!1,packOutDir:!1},name:`minecraft-addon`,version:`1.0.0`,description:``,replace:{values:{},builtins:{VERSION:!1,NAME:!1,UUID:!1,DESCRIPTION:!1}},target:`latest`,plugins:[],install:{registry:`https://registry.npmjs.org/`,saveTo:`dependencies`,packageManager:`auto`,runPackageManager:!0,updatePackageJson:!0,updateManifest:!0,dependencyCatalog:{},dependencyResolvers:[]},build:{copy:!1,timing:!1},dev:{copy:!1},copy:{defaultTarget:``,targets:{}},pack:{name:`{name}-{version}`,outDir:`dist`},hooks:{}},y={dev:!0,build:!1,file:`node_modules/.cache/bepack/tsconfig.tsbuildinfo`},b={keepLooseFiles:!1,keepLoose:[],exclude:[],minifyJson:!0,packOptimizationVersion:`0.1.0`,allowUnsupportedTarget:!1},ee={entry:`src/main.ts`,define:{},tsconfig:`tsconfig.json`,typecheck:!0,typecheckArgs:[],preserveModules:!0,external:[/^@minecraft\/server.*/],useNpx:!1,minify:!1,cache:y,scriptOutputDir:`scripts`};function x(e){return e}const te=[`bepack.config.ts`,`bepack.config.mjs`,`bepack.config.js`];var S=class extends Error{code;details;suggestions;constructor(e,t,n={}){super(t),this.name=`BePackError`,this.code=e,this.details=n.details,this.suggestions=n.suggestions}};const ne=[`world`,`global`,`any`];function C(e){let t=[];return e.packs.bp&&t.push({type:`bp`,root:e.packs.bp.root,uuid:e.packs.bp.uuid,...e.packs.bp.moduleUuid===void 0?{}:{moduleUuid:e.packs.bp.moduleUuid},name:e.packs.bp.name,include:e.packs.bp.include}),e.packs.rp&&t.push({type:`rp`,root:e.packs.rp.root,uuid:e.packs.rp.uuid,moduleUuid:e.packs.rp.moduleUuid,name:e.packs.rp.name,include:e.packs.rp.include}),t}function w(e,n){return t.isAbsolute(n)?n:t.join(e,n)}function T(e){return e.replace(/\\/g,`/`)}function re(e,t){return w(e,t.root)}function ie(e,t,n){return n===`bp`?t.packs.bp?w(e,t.packs.bp.root):void 0:t.packs.rp?w(e,t.packs.rp.root):void 0}function ae(e,t){let n=ie(re(e,t),t,`bp`);if(!n)throw Error(`packs.bp is not configured`);return n}function oe(e,t){let n=ie(re(e,t),t,`rp`);if(!n)throw Error(`packs.rp is not configured`);return n}function se(e,n){let r=t.relative(e,n);return r===``||!r.startsWith(`..${t.sep}`)&&r!==`..`&&!t.isAbsolute(r)}function ce(e,n,r){if(!n||n===`.`)throw new S(`CONFIG_INVALID`,`compile.scriptOutputDir must be a non-empty relative path strictly inside the BP root. Got: "${n}". This directory will be emptied during build.`);let i=n.replace(/\\/g,`/`);if(t.posix.isAbsolute(i)||t.win32.isAbsolute(i))throw new S(`CONFIG_INVALID`,`compile.scriptOutputDir must be a relative path, not absolute. Got: "${n}". This directory will be emptied during build.`);let a=t.posix.normalize(i);if(a.split(`/`).includes(`..`))throw new S(`CONFIG_INVALID`,`compile.scriptOutputDir must not contain ".." (path escape). Got: "${n}" resolves outside the BP root. This directory will be emptied during build.`);let o=t.resolve(e,a),s=t.relative(e,o);if(!s||s.startsWith(`..`)||t.isAbsolute(s))throw new S(`CONFIG_INVALID`,`compile.scriptOutputDir must be a directory strictly inside the BP root. Value: "${n}", resolved: "${o}". This directory will be emptied during build and must not be the BP root or a path outside it.`);if(r&&se(o,r))throw new S(`CONFIG_INVALID`,`compile.scriptOutputDir "${n}" dangerously overlaps with the source entry directory. The output directory will be emptied during build and would delete source files.`);return T(s)}function le(e,n){if(n.packs.bp)return t.join(ae(e,n),`manifest.json`)}function ue(e,n){if(n.packs.rp)return t.join(oe(e,n),`manifest.json`)}i();function de(e){return{values:e?.values??{},builtins:{VERSION:e?.builtins?.VERSION??!1,NAME:e?.builtins?.NAME??!1,UUID:e?.builtins?.UUID??!1,DESCRIPTION:e?.builtins?.DESCRIPTION??!1}}}function fe(e){let t={...e??{}};for(let[e,n]of Object.entries(t))try{Function(`return (${n});`)}catch{throw new S(`CONFIG_INVALID`,`packs.bp.compile.define["${e}"] is not a valid JavaScript expression: ${n}. Define values must be expression strings, e.g. JSON.stringify("server") or "true".`,{details:{defineKey:e,defineValue:n}})}return t}const E=`tsc --noEmit`;function D(e){let t=[],n=``,r,i=!1;for(let a=0;a<e.length;a+=1){let o=e[a];if(r){o===r?r=void 0:o===`\\`&&e[a+1]===r?(a+=1,n+=r):n+=o;continue}if(o===`"`||o===`'`){r=o,i=!0;continue}if(o===`\\`&&(e[a+1]===`"`||e[a+1]===`'`)){a+=1,n+=e[a],i=!0;continue}if(/\s/.test(o)){i&&=(t.push(n),n=``,!1);continue}n+=o,i=!0}if(r)throw new S(`CONFIG_INVALID`,`Unterminated ${r===`"`?`double`:`single`} quote in typecheck command: ${e}`);return i&&t.push(n),t}function pe(e,t=[],n={}){let r=typeof e==`string`?e.trim():``;if(r===``){let e=[...D(E)],r=e.shift(),i=[...me(e,n),...t];return n.useNpx?{command:`npx`,args:[r,...i],label:`npx tsc --noEmit`,isDefault:!0}:{command:r,args:i,label:E,isDefault:!0}}let i=D(r),a=i[0];if(!a)throw new S(`CONFIG_INVALID`,`packs.bp.compile.typecheck.command must be a non-empty command line, got: ${JSON.stringify(e)}`);return{command:a,args:[...i.slice(1),...t],label:r,isDefault:!1}}function me(e,t){let n=[...e];return t.tsconfigPath&&n.push(`--project`,t.tsconfigPath),t.incremental&&t.tsBuildInfoFile&&n.push(`--incremental`,`--tsBuildInfoFile`,t.tsBuildInfoFile),n}function he(e){return[e.command,...e.args].map(e=>/\s/.test(e)?JSON.stringify(e):e).join(` `)}function ge(e,t){if(e===void 0||typeof e==`boolean`)return{typecheck:e??t.typecheck,...t.typecheckCommand===void 0?{}:{typecheckCommand:t.typecheckCommand},typecheckArgs:t.typecheckArgs??[]};if(typeof e!=`object`||!e||Array.isArray(e))throw new S(`CONFIG_INVALID`,`packs.bp.compile.typecheck must be a boolean or an object { enabled?, command?, args? }, got: ${O(e)}.`);ye(e);let{enabled:n,command:r,args:i}=e;if(n!==void 0&&typeof n!=`boolean`)throw new S(`CONFIG_INVALID`,`packs.bp.compile.typecheck.enabled must be a boolean, got: ${O(n)}.`);if(r!==void 0&&typeof r!=`string`)throw new S(`CONFIG_INVALID`,`packs.bp.compile.typecheck.command must be a string, got: ${O(r)}.`);if(typeof r==`string`&&r.trim()===``)throw new S(`CONFIG_INVALID`,`packs.bp.compile.typecheck.command must be a non-empty command line, got: ${O(r)}.`);let a=_e(i,`packs.bp.compile.typecheck.args`);return{typecheck:n??t.typecheck,...r===void 0?t.typecheckCommand===void 0?{}:{typecheckCommand:t.typecheckCommand}:{typecheckCommand:r},typecheckArgs:a??t.typecheckArgs??[]}}function _e(e,t){if(e!==void 0){if(!Array.isArray(e))throw new S(`CONFIG_INVALID`,`${t} must be an array of strings, got: ${O(e)}.`);return e.map(e=>{if(typeof e!=`string`)throw new S(`CONFIG_INVALID`,`${t} entries must be strings, got: ${O(e)}.`);return e})}}function ve(e,t){if(e!==void 0){if(typeof e!=`string`||e.trim()===``)throw new S(`CONFIG_INVALID`,`${t} must be a non-empty command line string, got: ${O(e)}.`);return e.trim()}}function ye(e){let t=e;if(t.typechecker!==void 0)throw new S(`CONFIG_INVALID`,`packs.bp.compile.typecheck.typechecker was replaced by packs.bp.compile.typecheck.command: write the full command line instead, e.g. { command: "bun check" }, got: ${O(t.typechecker)}.`)}function O(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e==`object`?`object`:typeof e==`string`?JSON.stringify(e):String(e)}function be(e){let t=/^(\d+)\.(\d+)\.(\d+)$/.exec(e);if(!t)throw new S(`VERSION_INVALID`,`Manifest version requires x.y.z.`,{details:{version:e}});return[Number(t[1]),Number(t[2]),Number(t[3])]}function xe(e){return/^\d+\.\d+\.\d+(?:[-.][0-9A-Za-z.-]+)?$/.test(e)}function k(e,t){let n=e.split(/[^0-9A-Za-z]+/),r=t.split(/[^0-9A-Za-z]+/),i=Math.max(n.length,r.length);for(let e=0;e<i;e+=1){let t=n[e]??``,i=r[e]??``,a=/^\d+$/.test(t)?Number(t):NaN,o=/^\d+$/.test(i)?Number(i):NaN,s=Number.isNaN(a)||Number.isNaN(o)?t.localeCompare(i):a-o;if(s!==0)return s}return 0}function Se(e){return e===`latest`||k(e,`1.21.120`)>=0}function Ce(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(e.trim());if(!t)return;let n=/(?:^|[.-])(\d+)\.(\d+)\.(\d+)(?:[.-]|$)/.exec(t[4]??``);return{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),...n?{minecraftTarget:[Number(n[1]),Number(n[2]),Number(n[3])]}:{}}}function we(e,t){for(let n of[`major`,`minor`,`patch`])if(e[n]!==t[n])return e[n]-t[n];return 0}function A(e,t){let n=Ce(e);return n?t.split(`||`).some(e=>{let t=/(?:\^|~|>=|<=|>|<|=)?\s*(v?\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)/.exec(e.trim()),r=t?Ce(t[1]):void 0;return!r||n.major!==r.major||we(n,r)<0?!1:r.minecraftTarget?n.minecraftTarget?k(n.minecraftTarget.join(`.`),r.minecraftTarget.join(`.`))>=0:!1:!0}):!1}const Te=A;function Ee(e){if(e===`stable`||e===`beta`||e===`preview`)throw new S(`DEPENDENCY_VERSION_INVALID`,`${e} must be resolved from npm registry before writing package.json.`,{details:{specifier:e}});if(xe(e))return e;throw new S(`DEPENDENCY_VERSION_INVALID`,`Unsupported dependency version: ${e}`,{details:{specifier:e}})}function De(e){return e.filter(e=>/^\d+\.\d+\.\d+$/.test(e)).sort(k)}function Oe(e){return e.filter(e=>/(?:^|[-.])beta(?:[-.]|$)/i.test(e)).sort(k)}var j=class{npm;logger;constructor(e,t){this.npm=e,this.logger=t}latestStable(e,t){let n=this.npm.distTag(t,`latest`);if(n&&/^\d+\.\d+\.\d+$/.test(n))return this.logger?.verbose(`Resolved ${e}@stable -> ${n}`),n;let r=De(this.npm.versions(t)).at(-1);if(!r)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest stable version for ${e}.`,{details:{package:e}});return this.logger?.verbose(`Resolved ${e}@stable -> ${r}`),r}latestBeta(e,t){let n=this.npm.distTag(t,`beta`);if(n)return this.logger?.verbose(`Resolved ${e}@beta -> ${n}`),n;let r=Oe(this.npm.versions(t)).at(-1);if(!r)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest beta version for ${e}.`,{details:{package:e}});return this.logger?.verbose(`Resolved ${e}@beta -> ${r}`),r}betaForTarget(e,t,n){let r=t.replace(/\./g,`\\.`),i=RegExp(`beta[-.]${r}-stable`),a=this.npm.versions(n).filter(e=>i.test(e)).sort(k).at(-1);if(!a)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve ${e}@beta for target ${t}.`,{details:{package:e,specifier:`beta`,target:t},suggestions:[`Use target: "latest"`,`Specify an exact version`,`Update BePack`,`Manually edit package.json and manifest.json`]});return this.logger?.verbose(`Resolved ${e}@beta for target ${t} -> ${a}`),a}inferStableFromBeta(e,t,n,r){let i=/^(\d+)\.(\d+)\.(\d+)-beta[.-]/.exec(n);if(!i)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot infer stable version from ${e}@${n}.`,{details:{package:e,beta:n,target:t}});let a=Number(i[1]),o=Number(i[2])-1,s=`${a}.${o}.${Number(i[3])}`;if(o<0||!r.versions?.[s])throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot confirm inferred stable version ${s} for ${e}.`,{details:{package:e,target:t,beta:n,inferredStable:s}});return s}};function ke(e,t){return t===`latest`||Se(t)?`beta`:/^(\d+\.\d+\.\d+-beta)/i.exec(e)?.[1]??e}function Ae(e,t,n){let r=Oe(t).filter(e=>/^\d+\.\d+\.\d+-beta\.\d+\.\d+\.\d+/.test(e)).filter(e=>!/(?:rc|beta)\.\d+\.\d+\.\d+-preview\.\d+$/i.test(e)).at(-1);if(!r)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest beta version for ${e}.`,{details:{package:e}});return n?.verbose(`Resolved ${e}@beta -> ${r}`),r}function je(e){return e.filter(e=>/(?:rc|beta)\.\d+\.\d+\.\d+-preview\.\d+$/i.test(e)).sort(k)}function Me(e,t,n){let r=je(t).at(-1);if(!r)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest preview version for ${e}.`,{details:{package:e}});return n?.verbose(`Resolved ${e}@preview -> ${r}`),r}function Ne(e,t,n,r){let i=n.replace(/\./g,`\\.`),a=RegExp(`(?:rc|beta)\\.${i}-preview\\.\\d+$`),o=t.filter(e=>a.test(e)).sort(k).at(-1);if(!o)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve ${e}@preview for target ${n}.`,{details:{package:e,specifier:`preview`,target:n},suggestions:[`Use target: "latest"`,`Specify an exact version`]});return r?.verbose(`Resolved ${e}@preview for target ${n} -> ${o}`),o}const M={name:`minecraft-script-api`,resolver:`minecraft-script-api`,match:e=>e.specifier===`stable`||e.specifier===`beta`||e.specifier===`preview`,async resolve(e){let t=await e.npm.metadata(e.packageName),n=new j(e.npm,e.logger);if(e.specifier===`stable`){e.logger?.verbose(`Resolving ${e.packageName}@stable for target ${e.target}`);let r=e.target===`latest`?n.latestStable(e.packageName,t):n.inferStableFromBeta(e.packageName,e.target,n.betaForTarget(e.packageName,e.target,t),t);return{packageVersion:r,manifestVersion:r}}if(e.specifier===`beta`){e.logger?.verbose(`Resolving ${e.packageName}@beta for target ${e.target}`);let r=e.target===`latest`?Ae(e.packageName,e.npm.versions(t),e.logger):n.betaForTarget(e.packageName,e.target,t);return{packageVersion:r,manifestVersion:ke(r,e.target)}}e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`);let r=e.target===`latest`?Me(e.packageName,e.npm.versions(t),e.logger):Ne(e.packageName,e.npm.versions(t),e.target,e.logger);return{packageVersion:r,manifestVersion:r}}},N={name:`minecraft-script-api-bp`,resolver:`minecraft-script-api-bp`,match:e=>e.specifier===`beta`||e.specifier===`preview`,async resolve(e){let t=await e.npm.metadata(e.packageName),n=new j(e.npm,e.logger);if(e.specifier===`beta`){e.logger?.verbose(`Resolving ${e.packageName}@beta for target ${e.target}`);let r=e.target===`latest`?Ae(e.packageName,e.npm.versions(t),e.logger):n.betaForTarget(e.packageName,e.target,t);return{packageVersion:r,manifestVersion:ke(r,e.target)}}e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`);let r=e.target===`latest`?Me(e.packageName,e.npm.versions(t),e.logger):Ne(e.packageName,e.npm.versions(t),e.target,e.logger);return{packageVersion:r,manifestVersion:r}}},Pe=/^\d+\.\d+\.\d+$/,Fe=/^\d+\.\d+\.\d+-preview\.\d+$/,P={name:`minecraft-vanilla-data`,resolver:`minecraft-vanilla-data`,match:e=>e.specifier===`stable`||e.specifier===`preview`,async resolve(e){let t=await e.npm.metadata(e.packageName);return e.specifier===`stable`?Ie(e,t):Le(e,t)}};function Ie(e,t){if(e.logger?.verbose(`Resolving ${e.packageName}@stable for target ${e.target}`),e.target===`latest`){let n=e.npm.distTag(t,`latest`);if(n&&Pe.test(n))return e.logger?.verbose(`Resolved ${e.packageName}@stable -> ${n}`),{packageVersion:n};let r=e.npm.versions(t).filter(e=>Pe.test(e)).sort(k).at(-1);if(!r)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest stable version for ${e.packageName}.`,{details:{package:e.packageName}});return e.logger?.verbose(`Resolved ${e.packageName}@stable -> ${r}`),{packageVersion:r}}if(t.versions?.[e.target])return e.logger?.verbose(`Resolved ${e.packageName}@stable for target ${e.target} -> ${e.target}`),{packageVersion:e.target};throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve ${e.packageName}@stable for target ${e.target}. The target version does not exist in the registry.`,{details:{package:e.packageName,specifier:`stable`,target:e.target},suggestions:[`Use target: "latest"`,`Specify an exact version`]})}function Le(e,t){if(e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`),e.target===`latest`){let n=e.npm.versions(t).filter(e=>Fe.test(e)).sort(k).at(-1);if(!n)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest preview version for ${e.packageName}.`,{details:{package:e.packageName}});return e.logger?.verbose(`Resolved ${e.packageName}@preview -> ${n}`),{packageVersion:n}}let n=e.target.replace(/\./g,`\\.`),r=RegExp(`^${n}-preview\\.\\d+$`),i=e.npm.versions(t).filter(e=>r.test(e)).sort(k).at(-1);if(!i)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve ${e.packageName}@preview for target ${e.target}. No matching preview version found.`,{details:{package:e.packageName,specifier:`preview`,target:e.target},suggestions:[`Use target: "latest"`,`Specify an exact preview version`]});return e.logger?.verbose(`Resolved ${e.packageName}@preview for target ${e.target} -> ${i}`),{packageVersion:i}}const F={"@minecraft/common":{resolver:M,manifest:!0},"@minecraft/server":{resolver:M,manifest:!0},"@minecraft/server-ui":{resolver:M,manifest:!0},"@minecraft/server-net":{resolver:N,manifest:!0},"@minecraft/server-admin":{resolver:N,manifest:!0},"@minecraft/server-gametest":{resolver:N,manifest:!0},"@minecraft/debug-utilities":{resolver:N,manifest:!0},"@minecraft/diagnostics":{resolver:N,manifest:!0},"@minecraft/server-graphics":{resolver:N,manifest:!0},"@minecraft/server-editor":{resolver:N,manifest:!0},"@minecraft/vanilla-data":{resolver:P,manifest:!1}},Re={name:`exact-version`,match:e=>xe(e.specifier),resolve(e){return e.logger?.verbose(`Using exact ${e.packageName}@${e.specifier}`),{packageVersion:Ee(e.specifier),manifestVersion:e.specifier}}},ze=[M,N,P,Re];var I=class e{resolvers;pluginNames=/* @__PURE__ */ new Map;constructor(e,t=[]){this.resolvers=e;for(let e of t)for(let t of e.install?.dependencyResolvers??[])this.pluginNames.set(t,e.name)}static fromConfig(t,n=[]){return new e([...t,...ze],n)}resolverMatchesCatalog(e,t){let n=e.entry.resolver;if(!n)return!0;let r=typeof n==`string`?n:n.name;return t.resolver===void 0||t.resolver===r}find(e){let t;for(let n of this.resolvers)if(this.resolverMatchesCatalog(e,n))try{if(n.match(e)){t=n;break}}catch(e){let t=this.pluginNames.get(n);throw t?new S(`PLUGIN_FAILED`,`Plugin ${t} resolver ${n.name} match failed: ${e instanceof Error?e.message:String(e)}`):e}if(!t)throw new S(`DEPENDENCY_VERSION_INVALID`,`${e.packageName} dependency version is invalid: ${e.specifier}`,{details:{package:e.packageName,specifier:e.specifier,resolver:e.entry.resolver}});return e.logger?.verbose(`Resolving ${e.packageName}@${e.specifier} with ${t.name}`),t}async resolve(e){let t=this.find(e);try{return await t.resolve(e)}catch(e){let n=this.pluginNames.get(t);throw n?new S(`PLUGIN_FAILED`,`Plugin ${n} resolver ${t.name} failed: ${e instanceof Error?e.message:String(e)}`):e}}};const L=`sapi-pro`,R=[`@minecraft/server`,`@minecraft/server-ui`];function z(e){return/(?:beta|preview|alpha|rc)/i.test(e)}function Be(e){return z(e)?`beta`:`stable`}function Ve(e){let t=/^(\d+)\.(\d+)\./.exec(e);return!!t&&(Number(t[1])>0||Number(t[2])>=4)}function He(e){return{...e.dependencies??{},...e.peerDependencies??{}}}async function Ue(e,t,n,r){let i=e.config.packs.bp?.dependencies??{},a={...F,...e.config.install.dependencyCatalog},o=I.fromConfig(e.config.install.dependencyResolvers.filter(e=>e!==Ge),e.config.plugins);for(let[s,c]of Object.entries(t)){if(!s.startsWith(`@minecraft/`))continue;let t=i[s],l=a[s];if(!t||!l)return r.add(s),!1;let u;if(n.has(s)?u=n.get(s):(u=await o.resolve({packageName:s,specifier:t,target:e.target,entry:l,config:e.config,npm:e.npm,...e.logger?{logger:e.logger}:{}}),n.set(s,u)),!u||R.includes(s)&&z(c)!==z(u.packageVersion)||!A(u.packageVersion,c))return!1}return!0}function We(e,t){if(t!==`stable`&&t!==`beta`){let n=e[t];return n?[[t,n]]:[]}return Object.entries(e).filter(([e,n])=>{if(!Ve(e))return!1;let r=He(n);return Object.keys(r).length===0?!1:t===`stable`?/-stable(?:\.\d+)?$/i.test(e):/^\d+\.\d+\.\d+$/.test(e)}).sort(([e],[t])=>k(e,t)).reverse()}const Ge={name:`sapi-pro`,resolver:`sapi-pro`,match:e=>e.specifier===`stable`||e.specifier===`beta`||/^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(e.specifier),async resolve(e){let t=await e.npm.metadata(L),n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Set;for(let[i,a]of We(t.versions??{},e.specifier))if(await Ue(e,He(a),n,r))return/^0\.3\./.test(i)&&e.logger?.warn(`sapi-pro@${i} uses legacy metadata; compatibility is best-effort only.`),{packageVersion:i,manifestVersion:null};throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot find a compatible ${L}@${e.specifier} for target ${e.target}.${r.size>0?` Missing explicit dependencies: ${[...r].join(`, `)}.`:``}`,{details:{package:L,specifier:e.specifier,target:e.target},suggestions:[`Explicitly declare the @minecraft packages required by sapi-pro.`,`Use a compatible target or specify an exact sapi-pro version.`]})}};function Ke(){return{name:`sapi-pro`,apiVersion:1,description:`Resolve sapi-pro versions compatible with BePack Script API dependencies.`,configResolved:({config:e})=>{let t=e.packs.bp?.dependencies??{},n=t[L];if(!n)return;let r=R.filter(e=>!t[e]);if(r.length>0)throw Error(`sapi-pro requires explicit dependencies: ${r.join(`, `)}.`);if(n===`stable`||n===`beta`)for(let e of R){let r=t[e];if(Be(r)!==n)throw Error(`sapi-pro ${n} requires ${e} to use ${n}, received ${r}.`)}},install:{dependencyCatalog:{[L]:{resolver:`sapi-pro`,manifest:!1}},dependencyResolvers:[Ge]}}}const qe={"sapi-pro":Ke};function B(e){return e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0)):{}}function V(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e==`function`?`function`:typeof e==`object`?`object`:typeof e==`string`?JSON.stringify(e):String(e)}function Je(e,t){let n={};(e.packs?.bp||t.packs?.bp)&&(n.bp={...e.packs?.bp??{},...B(t.packs?.bp)}),(e.packs?.rp||t.packs?.rp)&&(n.rp={...e.packs?.rp??{},...B(t.packs?.rp)});let r={...e.copy?.targets??{},...B(t.copy?.targets)},i=B(t);return{...e,...i,...t.plugins!==void 0||e.plugins!==void 0?{plugins:t.plugins??e.plugins}:{},packs:n,install:{...e.install,...B(t.install)},build:{...e.build,...B(t.build)},dev:{...e.dev,...B(t.dev)},copy:{...e.copy,...B(t.copy),targets:r},pack:{...e.pack,...B(t.pack)},hooks:{...e.hooks,...B(t.hooks)}}}function Ye(e){let t=(e??[]).map(e=>{if(typeof e!=`string`)return e;let t=qe[e];if(!t)throw new S(`CONFIG_INVALID`,`Unknown built-in plugin: ${e}.`);return t()}),n=/* @__PURE__ */ new Set;for(let e of t){if(!e?.name||e.name.trim()===``)throw new S(`CONFIG_INVALID`,`Every plugin must have a non-empty name.`);if(n.has(e.name))throw new S(`CONFIG_INVALID`,`Plugin name is duplicated: ${e.name}.`);if(e.apiVersion!==void 0&&e.apiVersion!==1)throw new S(`CONFIG_INVALID`,`Plugin ${e.name} requires unsupported BePack plugin API version ${e.apiVersion}.`);if(e.priority!==void 0&&!Number.isFinite(e.priority))throw new S(`CONFIG_INVALID`,`Plugin ${e.name} priority must be a finite number.`);n.add(e.name)}return t.sort((e,t)=>(t.priority??0)-(e.priority??0))}function Xe(e,t){let n=/* @__PURE__ */ new Set;for(let r of[...e.map(e=>e.hooks),t])for(let e of Object.keys(r??{}))n.add(e);return Object.fromEntries([...n].map(n=>{let r=[...e.map(e=>({plugin:e,hook:e.hooks?.[n]})).filter(e=>e.hook!==void 0),...t?.[n]?[{hook:t[n]}]:[]];return[n,async(...e)=>{let t;for(let i of r)try{t=await i.hook(...e)}catch(e){let t=`plugin`in i?i.plugin:void 0;throw t?new S(`PLUGIN_FAILED`,`Plugin ${t.name} ${String(n)} hook failed: ${e instanceof Error?e.message:String(e)}`):e}return t}]}))}function Ze(e,t){let n={},r=/* @__PURE__ */ new Map,i=[];for(let t of e)for(let[e,a]of Object.entries(t.install?.dependencyCatalog??{})){let o=r.get(e);if(o){i.push(`dependency catalog ${e}: plugin ${o} takes precedence over plugin ${t.name}`);continue}n[e]=a,r.set(e,t.name)}for(let[e,a]of Object.entries(t)){let t=r.get(e);t&&i.push(`dependency catalog ${e}: project config overrides plugin ${t}`),n[e]=a}return{catalog:n,diagnostics:i}}function Qe(e,n,r){let i=ee,a=e?.scriptOutputDir??i.scriptOutputDir,o=t.resolve(r,e?.entry??i.entry),s=ce(n,a,t.dirname(o)),c=ve(e?.typecheckCommand,`packs.bp.compile.typecheckCommand`)??i.typecheckCommand,l=_e(e?.typecheckArgs,`packs.bp.compile.typecheckArgs`),u=ge(e?.typecheck,{typecheck:i.typecheck,...c===void 0?{}:{typecheckCommand:c},...l===void 0?{}:{typecheckArgs:l}});return{entry:e?.entry??i.entry,define:fe(e?.define),tsconfig:e?.tsconfig??i.tsconfig,typecheck:u.typecheck,typecheckArgs:u.typecheckArgs,...u.typecheckCommand===void 0?{}:{typecheckCommand:u.typecheckCommand},preserveModules:e?.preserveModules??i.preserveModules,external:e?.external??i.external,useNpx:e?.useNpx??i.useNpx,minify:e?.minify??i.minify,cache:p(e?.cache),scriptOutputDir:s,...e?.rolldown===void 0?{}:{rolldown:d(e.rolldown)},...e?.rolldownConfig===void 0?{}:{rolldownConfig:f(e.rolldownConfig)}};function d(e){if(typeof e==`function`||e&&typeof e==`object`&&!Array.isArray(e))return e;throw new S(`CONFIG_INVALID`,`packs.bp.compile.rolldown must be a rolldown options object or a function (options, context) => options, got: ${V(e)}.`)}function f(e){if(typeof e!=`string`||e.trim()===``)throw new S(`CONFIG_INVALID`,`packs.bp.compile.rolldownConfig must be a non-empty path string, got: ${V(e)}.`);return e}function p(e){let t=y;return{dev:e?.dev??t.dev,build:e?.build??t.build,file:e?.file??t.file}}}function $e(e){if(e===void 0||e===!1)return;let t=e===!0?{}:e;if(typeof t!=`object`||!t||Array.isArray(t))throw new S(`CONFIG_INVALID`,`pack.optimize must be a boolean or an options object, got: ${V(e)}.`);let n=t.packOptimizationVersion;if(n!==void 0&&(typeof n!=`string`||n.trim()===``))throw new S(`CONFIG_INVALID`,`pack.optimize.packOptimizationVersion must be a non-empty string, got: ${V(n)}.`);return{keepLooseFiles:t.keepLooseFiles??b.keepLooseFiles,keepLoose:t.keepLoose!==!1&&(t.keepLoose??[]).map(et),exclude:(t.exclude??[]).map(et),minifyJson:t.minifyJson??b.minifyJson,packOptimizationVersion:n??b.packOptimizationVersion,allowUnsupportedTarget:t.allowUnsupportedTarget??b.allowUnsupportedTarget}}function et(e){let n=String(e).replace(/\\/g,`/`).replace(/^\.\//,``).replace(/\/+$/,``);if(!n||n.includes(`/`)||n.includes(`..`)||t.posix.isAbsolute(n))throw new S(`CONFIG_INVALID`,`pack.optimize.exclude entries must be top-level folder names (no path separators, no ".."), got: ${V(e)}.`);return n}function tt(e){let t=e?.merge??`preserve`;if(t!==`preserve`&&t!==`clean`)throw new S(`CONFIG_INVALID`,`manifest.merge must be "preserve" or "clean", got: ${String(e?.merge)}.`);let n=e?.minEngineVersion;if(n!==void 0&&!/^\d+\.\d+\.\d+$/.test(n))throw new S(`CONFIG_INVALID`,`manifest.minEngineVersion must be a SemVer string like "1.21.0", got: ${n}.`);return{merge:t,...n===void 0?{}:{minEngineVersion:n},extraDependencies:e?.extraDependencies??[],extraModules:e?.extraModules??[],extraHeader:e?.extraHeader??{}}}function nt(e,n={},r=process.cwd()){let i=Je(e,n),a=Ye(i.plugins),o=i.target??v.target;if(o===`stable`||o===`beta`)throw new S(`TARGET_INVALID`,`target must be a Minecraft game version or latest, not a Script API channel.`,{details:{target:o}});let s=!!i.packs?.bp,c=!!i.packs?.rp;if(!s&&!c)throw new S(`CONFIG_INVALID`,`At least one pack (packs.bp or packs.rp) is required.`);if(!i.name||i.name.trim()===``)throw new S(`CONFIG_INVALID`,`name is required.`);let l=i.name,u=i.version??v.version,d=i.description,f=i.packs,p=f.bp?.compile,m=f.bp,h=f.rp;if(m){if(!m.uuid)throw new S(`CONFIG_INVALID`,`packs.bp.uuid is required.`);if(m.compile&&!m.moduleUuid)throw new S(`CONFIG_INVALID`,`packs.bp.moduleUuid is required when packs.bp.compile is configured.`);if(m.root===void 0)throw new S(`CONFIG_INVALID`,`packs.bp.root is required. Set the behavior pack directory in bepack.config.ts.`);if(p?.define){let e=Object.keys(i.replace?.values??{}),t=Object.keys(p.define),n=e.filter(e=>t.includes(e));if(n.length>0)throw new S(`CONFIG_INVALID`,`Config conflict: ${n.map(e=>`"${e}"`).join(`, `)} is configured in both replace.values and packs.bp.compile.define. Use only one mechanism per key.`,{details:{overlap:n}})}}let g=t.resolve(r,i.root??`.`),_=m?t.resolve(g,m.root):void 0;if(h){if(!h.uuid||!h.moduleUuid)throw new S(`CONFIG_INVALID`,`packs.rp.uuid and packs.rp.moduleUuid are required.`);if(h.root===void 0)throw new S(`CONFIG_INVALID`,`packs.rp.root is required when packs.rp is configured.`);if(h.packScope!==void 0&&!ne.includes(h.packScope))throw new S(`CONFIG_INVALID`,`packs.rp.packScope must be one of ${ne.map(e=>`"${e}"`).join(`, `)}.`,{details:{packScope:h.packScope}})}let y=m?.description??d,b=h?.description??d,{catalog:ee,diagnostics:x}=Ze(a,i.install?.dependencyCatalog??{}),te=a.flatMap(e=>e.install?.dependencyResolvers??[]),C=$e(i.pack?.optimize),w=$e(i.copy?.optimize);return{root:i.root??v.root,configured:{root:i.root!==void 0,packOutDir:i.pack?.outDir!==void 0},name:l,version:u,...d===void 0?{}:{description:d},replace:de(i.replace),target:o,plugins:a,...x.length>0?{pluginDiagnostics:x}:{},...i.manifestFormat===void 0?{}:{manifestFormat:i.manifestFormat},packs:{...m?{bp:{root:m.root,uuid:m.uuid,...m.moduleUuid===void 0?{}:{moduleUuid:m.moduleUuid},name:m.name??l,...y===void 0?{}:{description:y},...p&&_?{compile:Qe(p,_,g)}:{},manifest:tt(m.manifest),dependencies:m.dependencies??{},...m.achievement===void 0?{}:{achievement:m.achievement},include:m.include??[]}}:{},...h?{rp:{root:h.root,uuid:h.uuid,moduleUuid:h.moduleUuid,name:h.name??l,...b===void 0?{}:{description:b},manifest:tt(h.manifest),...h.pbr===void 0?{}:{pbr:h.pbr},...h.packScope===void 0?{}:{packScope:h.packScope},include:h.include??[]}}:{}},install:{registry:i.install?.registry??v.install.registry,saveTo:i.install?.saveTo??v.install.saveTo,packageManager:i.install?.packageManager??v.install.packageManager,runPackageManager:i.install?.runPackageManager??v.install.runPackageManager,updatePackageJson:i.install?.updatePackageJson??v.install.updatePackageJson,updateManifest:i.install?.updateManifest??v.install.updateManifest,dependencyCatalog:ee,dependencyResolvers:[...te,...i.install?.dependencyResolvers??[]]},build:{copy:i.build?.copy??v.build.copy,timing:i.build?.timing??v.build.timing},dev:{copy:i.dev?.copy??v.dev.copy,...i.dev?.watch?{watch:i.dev.watch}:{}},copy:{defaultTarget:i.copy?.defaultTarget??v.copy.defaultTarget,...i.copy?.name?{name:i.copy.name}:{},...i.copy?.include?{include:i.copy.include}:{},targets:i.copy?.targets??{},...w?{optimize:w}:{}},pack:{name:i.pack?.name??v.pack.name,outDir:i.pack?.outDir??v.pack.outDir,...C?{optimize:C}:{}},hooks:Xe(a,i.hooks)}}async function rt(e,n){if(n){let t=w(e,n);return await r.access(t).catch(()=>{throw new S(`CONFIG_NOT_FOUND`,`Config not found: ${n}`,{details:{configPath:n}})}),t}for(let n of te){let i=t.join(e,n);try{return await r.access(i),i}catch{}}throw new S(`CONFIG_NOT_FOUND`,`No bepack.config.ts, bepack.config.mjs, or bepack.config.js found.`,{details:{cwd:e}})}async function it(t){try{if(t.endsWith(`.ts`))try{return await import(`${e(t).href}?t=${Date.now()}`)}catch{let e=at(await r.readFile(t,`utf8`));return await import(`data:text/javascript;base64,${Buffer.from(e,`utf8`).toString(`base64`)}`)}return await import(`${e(t).href}?t=${Date.now()}`)}catch(e){throw new S(`CONFIG_INVALID`,`Failed to load config: ${e instanceof Error?e.message:String(e)}`,{details:{file:t},suggestions:[`Use bepack.config.mjs/js for complex config logic.`,`Keep bepack.config.ts free of TypeScript-only runtime syntax.`]})}}function at(e){return e.replace(/^\s*import\s+type\s+[^;]+;\s*$/gm,``).replace(/\s+satisfies\s+[A-Za-z_$][\w$<>,\s.[\]|&{}]*/g,``).replace(/\((\s*[A-Za-z_$][\w$]*)\s*:\s*[^)=]+?\)\s*=>/g,`($1) =>`)}async function ot(e,t){for(let n of e.plugins??[])if(n.configResolved)try{await n.configResolved({cwd:t,config:e})}catch(e){throw new S(`PLUGIN_FAILED`,`Plugin ${n.name} configResolved hook failed: ${e instanceof Error?e.message:String(e)}`)}}async function st(e){let n=t.resolve(e.cwd),r=await rt(n,e.configPath),i=await it(r);if(i.default===void 0)throw new S(`CONFIG_INVALID`,`Config must use default export.`,{details:{file:r}});let a=nt(i.default,e.overrides,n);return await ot(a,n),{config:a,path:r,cwd:n}}var ct=/* @__PURE__ */ _((/* @__PURE__ */ h(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c})))(),1);function H(e){return{...F,...e.install.dependencyCatalog}}function lt(e,t){let n=e[t];if(!n)throw new S(`UNSUPPORTED_DEPENDENCY`,`${t} is not a managed dependency. Add it to install.dependencyCatalog or remove it from packs.bp.dependencies.`,{details:{package:t}});return n}function ut(e){return`${JSON.stringify(e,null,4)}\n`}async function dt(e){try{return await r.access(e),!0}catch{return!1}}async function ft(e){await r.mkdir(e,{recursive:!0})}async function pt(e,n){await ft(t.dirname(e)),await r.writeFile(e,ut(n),`utf8`)}function mt(e){return Array.isArray(e)&&e.length===3&&typeof e[0]==`number`&&typeof e[1]==`number`&&typeof e[2]==`number`}function ht(e){return typeof e==`string`&&/^\d+\.\d+\.\d+$/.test(e)}function U(e){return e===3?ht:mt}function W(e,t){return e===3?`${t} must be SemVer string like "x.y.z" (format 3)`:`${t} must be [number, number, number] (format 2)`}const gt=[e=>e.format_version===void 0?`format_version is required`:null,e=>e.header?null:`header is required`,e=>e.header&&!e.header.name?`header.name is required`:null,e=>e.header&&!e.header.uuid?`header.uuid is required`:null,e=>e.header?U(e.format_version)(e.header.version)?null:W(e.format_version,`header.version`):null,e=>e.header?U(e.format_version)(e.header.min_engine_version)?null:W(e.format_version,`header.min_engine_version`):null,e=>e.modules!==void 0&&!Array.isArray(e.modules)?`modules must be an array`:null,(e,t)=>{if(!Array.isArray(e.modules))return null;let n=e.modules.some(e=>e?.type===`resources`),r=[];return t===`rp`&&!n&&r.push(`RP manifest must have a resources module`),r.length>0?r:null},e=>{if(!Array.isArray(e.modules))return null;let t=U(e.format_version),n=[];for(let r=0;r<e.modules.length;r++){let i=e.modules[r];i&&i.version!==void 0&&i.version!==null&&!t(i.version)&&n.push(`modules[${r}] (uuid: ${i.uuid??`unknown`}): ${W(e.format_version,`version`)}`)}return n.length>0?n:null},e=>e.dependencies!==void 0&&!Array.isArray(e.dependencies)?`dependencies must be an array`:null,e=>{if(!Array.isArray(e.dependencies))return null;let t=U(e.format_version),n=[];for(let r=0;r<e.dependencies.length;r++){let i=e.dependencies[r];if(!i){n.push(`dependencies[${r}] is invalid`);continue}`uuid`in i&&i.uuid&&!t(i.version)&&n.push(`dependencies[${r}] (uuid: ${i.uuid}): ${W(e.format_version,`version`)}`),`module_name`in i&&i.module_name&&typeof i.version!=`string`&&n.push(`dependencies[${r}] (module_name: ${i.module_name}): version must be a string`)}return n.length>0?n:null},e=>e.capabilities===void 0?null:Array.isArray(e.capabilities)?e.capabilities.every(e=>typeof e==`string`)?null:`capabilities must be an array of strings`:`capabilities must be an array`,e=>e.metadata!==void 0&&(typeof e.metadata!=`object`||e.metadata===null)?`metadata must be an object`:null];function _t(e,t){let n=[];for(let r of gt){let i=r(e,t);i!==null&&(Array.isArray(i)?n.push(...i):n.push(i))}if(n.length>0)throw new S(`MANIFEST_INVALID`,`Manifest validation failed: ${n.join(`; `)}`)}function G(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:{...e}}function K(e){return Array.isArray(e)?e:[]}function vt(e){if(!(e&&Object.keys(e).length===0))return e}var q=class{static async read(e){if(!await dt(e))return;let t=await r.readFile(e,`utf8`);try{return G(JSON.parse(t))}catch{throw new S(`MANIFEST_INVALID`,`Invalid JSON in manifest: ${e}`)}}static async write(e,t,n){_t(t,n),await pt(e,t)}};const yt=[1,21,0],bt=[1,0,0];var xt=class{config;version;versionStr;depManager;constructor(e,t){this.config=e,this.version=be(e.version),this.versionStr=e.version,this.depManager=t}buildBp(e){let t=this.requireBp(),n=G(e);this.depManager.validateBpDependencies();let r=this.getWriteFormatVersion(n),i=t.manifest.merge===`clean`?this.buildCleanBp(t,r):this.buildPreserveBp(n,t,r);return this.applyAchievementMetadata(i,t),i}buildRp(e){let t=this.requireRp(),n=G(e),r=this.getWriteFormatVersion(n),i=t.manifest.merge===`clean`?this.buildCleanRp(t,r):this.buildPreserveRp(n,t,r);return this.applyPbrCapability(i,t),i}buildPreserveBp(e,t,n){return{...e,format_version:n,header:this.buildBpHeader(e,t,n),...t.moduleUuid?{modules:this.replaceManagedBpModules(e.modules,t,n)}:e.modules?{modules:e.modules}:{},dependencies:this.depManager.replaceBpDependencies(e.dependencies,this.config.packs.rp?.uuid,n)}}buildPreserveRp(e,t,n){return{...e,format_version:n,header:this.buildRpHeader(e,t,n),modules:this.replaceManagedRpModules(e.modules,t,n),dependencies:this.depManager.replaceRpDependencies(e.dependencies,this.config.packs.bp?.uuid,n)}}buildCleanBp(e,t){return{format_version:t,header:this.buildBpHeaderClean(e,t),...e.moduleUuid?{modules:this.buildCleanBpModules(e,t)}:{},dependencies:this.depManager.buildBpDependenciesClean(t,this.config.packs.rp?.uuid,e.manifest.extraDependencies)}}buildCleanRp(e,t){return{format_version:t,header:this.buildRpHeaderClean(e,t),modules:this.buildCleanRpModules(e,t),dependencies:this.depManager.buildRpDependenciesClean(t,this.config.packs.bp?.uuid,e.manifest.extraDependencies)}}buildBpHeaderClean(e,t){return{...e.manifest.extraHeader,name:e.name,...e.description===void 0?{}:{description:e.description},uuid:e.uuid,version:this.getVersionFor(t),min_engine_version:e.manifest.minEngineVersion===void 0?this.defaultMinEngineVersion(t):this.configMinEngineVersion(e.manifest.minEngineVersion,t)}}buildRpHeaderClean(e,t){return{...e.manifest.extraHeader,name:e.name,...e.description===void 0?{}:{description:e.description},uuid:e.uuid,...e.packScope===void 0?{}:{pack_scope:e.packScope},version:this.getVersionFor(t),min_engine_version:e.manifest.minEngineVersion===void 0?this.defaultMinEngineVersion(t):this.configMinEngineVersion(e.manifest.minEngineVersion,t)}}buildCleanBpModules(e,t){return[...e.moduleUuid?[this.createScriptModule(e,t)]:[],...e.manifest.extraModules]}buildCleanRpModules(e,t){return[this.createResourcesModule(e,t),...e.manifest.extraModules]}buildBpHeader(e,t,n){return{...e.header??{},name:t.name,...t.description===void 0?{}:{description:t.description},uuid:t.uuid,version:this.getVersionFor(n),min_engine_version:this.normalizeMinEngineVersion(e.header?.min_engine_version,n,t.manifest.minEngineVersion)}}buildRpHeader(e,t,n){return{...e.header??{},name:t.name,...t.description===void 0?{}:{description:t.description},uuid:t.uuid,...t.packScope===void 0?{}:{pack_scope:t.packScope},version:this.getVersionFor(n),min_engine_version:this.normalizeMinEngineVersion(e.header?.min_engine_version,n,t.manifest.minEngineVersion)}}getScriptEntry(){let e=this.config.packs.bp?.compile;return e?`${e.scriptOutputDir}/${t.basename(e.entry,t.extname(e.entry))}.js`:`scripts/main.js`}isManagedBpModule(e,t){if(e.type!==`script`||e.language!==`javascript`)return!1;let n=this.getScriptEntry();return e.uuid===t.moduleUuid||e.entry===n}isManagedRpModule(e,t){return e.type===`resources`&&e.uuid===t.moduleUuid}createScriptModule(e,t){return{type:`script`,language:`javascript`,uuid:e.moduleUuid,version:this.getModuleVersion(t),entry:this.getScriptEntry()}}createResourcesModule(e,t){return{type:`resources`,uuid:e.moduleUuid,version:this.getModuleVersion(t)}}replaceManagedBpModules(e,t,n){return[...K(e).filter(e=>!this.isManagedBpModule(e,t)),this.createScriptModule(t,n)]}replaceManagedRpModules(e,t,n){return[...K(e).filter(e=>!this.isManagedRpModule(e,t)),this.createResourcesModule(t,n)]}applyAchievementMetadata(e,t){if(t.achievement===!0)e.metadata={...e.metadata??{},product_type:`addon`};else if(t.achievement===!1&&e.metadata){let t={...e.metadata};delete t.product_type;let n=vt(t);n?e.metadata=n:delete e.metadata}}applyPbrCapability(e,t){if(t.pbr===!0){let t=K(e.capabilities);e.capabilities=t.includes(`pbr`)?t:[...t,`pbr`]}else if(t.pbr===!1){let t=K(e.capabilities).filter(e=>e!==`pbr`);t.length>0?e.capabilities=t:delete e.capabilities}}getVersionFor(e){return e===3?this.versionStr:this.version}getModuleVersion(e){return e===3?`1.0.0`:bt}getWriteFormatVersion(e){return this.config.manifestFormat===void 0?e.format_version??2:this.config.manifestFormat}normalizeMinEngineVersion(e,t,n){if(n!==void 0)return this.configMinEngineVersion(n,t);if(e==null)return this.defaultMinEngineVersion(t);if(Array.isArray(e))return t===3?e.join(`.`):e;if(typeof e==`string`){if(t===2){let t=this.stringToVersionTuple(e);if(t)return t}return e}return this.defaultMinEngineVersion(t)}configMinEngineVersion(e,t){return t===3?e:this.stringToVersionTuple(e)??this.defaultMinEngineVersion(t)}defaultMinEngineVersion(e){return e===3?`1.21.0`:yt}stringToVersionTuple(e){let t=e.split(`.`).map(Number);if(t.length===3&&t.every(e=>!Number.isNaN(e)))return t}requireBp(){if(!this.config.packs.bp)throw new S(`CONFIG_INVALID`,`packs.bp is required to build the BP manifest.`);return this.config.packs.bp}requireRp(){if(!this.config.packs.rp)throw new S(`CONFIG_INVALID`,`packs.rp is required to build the RP manifest.`);return this.config.packs.rp}},St=class e{config;catalog;installVersions;manifestVersions;version;versionStr;dependencyDiagnostics=[];constructor(e,t,n={}){this.config=e,this.catalog=t,this.installVersions=n.install??{},this.manifestVersions=n.manifest??{},this.version=be(e.version),this.versionStr=e.version}static isAllowedSpecifier(e){return e===`stable`||e===`beta`||e===`preview`||/^\d+\.\d+\.\d+(?:[-.][0-9A-Za-z.-]+)?$/.test(e)}static resolveVersion(t){return e.resolveVersionDetail(t).version}static resolveVersionDetail(e){let{specifier:t,target:n,resolvedVersion:r,manifestVersion:i}=e;if(t===`stable`){if(r)return{version:r,source:`install`};if(i)return{version:i,source:`manifest`};throw new S(`DEPENDENCY_REQUIRES_INSTALL`,"Run `bepack install` to resolve stable manifest dependencies.",{details:{specifier:t,target:n}})}if(t===`beta`){if(Se(n))return{version:`beta`,source:`config`};if(r)return{version:r,source:`install`};if(i)return{version:i,source:`manifest`};throw new S(`DEPENDENCY_REQUIRES_INSTALL`,`Run \`bepack install\` to resolve manifest dependencies for target ${n}.`,{details:{target:n}})}if(t===`preview`){if(r)return{version:r,source:`install`};if(i)return{version:i,source:`manifest`};throw new S(`DEPENDENCY_REQUIRES_INSTALL`,`Run \`bepack install\` to resolve preview manifest dependencies for target ${n}.`,{details:{specifier:t,target:n}})}return{version:t,source:`config`}}static isAchievementCompatible(e){return e!==`beta`&&e!==`preview`}validateBpDependencies(){if(this.config.packs.bp){for(let[t,n]of Object.entries(this.config.packs.bp.dependencies)){if(!this.catalog[t]){let e=Object.keys(this.catalog),n=e.length>0?[`Managed packages: ${e.join(`, `)}.`,`Add a missing package to install.dependencyCatalog, or remove it from packs.bp.dependencies.`]:[`No managed packages are available. Extend install.dependencyCatalog to add one.`];throw new S(`UNSUPPORTED_DEPENDENCY`,`${t} is not a managed dependency.`,{details:{package:t},suggestions:n})}if(!e.isAllowedSpecifier(n))throw new S(`DEPENDENCY_VERSION_INVALID`,`${t} dependency version is invalid: ${n}`,{details:{package:t,specifier:n}})}if(this.config.packs.bp.achievement){for(let[t,n]of Object.entries(this.config.packs.bp.dependencies))if(!e.isAchievementCompatible(n))throw new S(`ACHIEVEMENT_REQUIRES_STABLE_API`,`${t}: achievement requires stable Script API dependencies (${n} is not allowed).`)}}}isManagedBpDependency(e){return!!(`module_name`in e&&typeof e.module_name==`string`&&this.catalog[e.module_name]?.manifest||`uuid`in e&&typeof e.uuid==`string`&&this.config.packs.rp?.uuid===e.uuid)}isManagedRpDependency(e,t){return t!==void 0&&`uuid`in e&&typeof e.uuid==`string`&&e.uuid===t}buildManagedDependencies(){if(this.dependencyDiagnostics.length=0,!this.config.packs.bp)return[];let t=[];for(let[n,r]of Object.entries(this.config.packs.bp.dependencies)){if(!this.catalog[n]?.manifest)continue;let i=e.resolveVersionDetail({specifier:r,target:this.config.target,resolvedVersion:this.installVersions[n],manifestVersion:this.manifestVersions[n]});t.push({module_name:n,version:i.version}),this.dependencyDiagnostics.push({name:n,specifier:r,version:i.version,source:i.source})}return t}getDependencyDiagnostics(){return this.dependencyDiagnostics}getFormatAwareVersion(e){return(e??this.config.manifestFormat??2)===3?this.versionStr:this.version}replaceBpDependencies(e,t,n){let r=K(e).filter(e=>!this.isManagedBpDependency(e)),i=this.buildManagedDependencies();return t&&i.push({uuid:t,version:this.getFormatAwareVersion(n)}),[...r,...i]}replaceRpDependencies(e,t,n){let r=K(e).filter(e=>!this.isManagedRpDependency(e,t));return t?[...r,{uuid:t,version:this.getFormatAwareVersion(n)}]:r}buildBpDependenciesClean(e,t,n){let r=this.buildManagedDependencies();return t&&r.push({uuid:t,version:this.getFormatAwareVersion(e)}),[...r,...n]}buildRpDependenciesClean(e,t,n){let r=[];return t&&r.push({uuid:t,version:this.getFormatAwareVersion(e)}),[...r,...n]}};const J=ct.default.createColors(process.env.NO_COLOR===void 0&&process.env.FORCE_COLOR!==`0`);async function Ct(e){let n=H(e.config),r=e.config.packs.bp?le(e.cwd,e.config):void 0,i=r?await q.read(r):void 0,a=Tt(i,n),o=new St(e.config,n,{...e.resolvedDeps?{install:e.resolvedDeps}:{},manifest:a}),s=new xt(e.config,o),c={};if(e.config.packs.bp){let n=i!==void 0;e.config.manifestFormat===2&&i?.format_version===3&&(e.logger?.warn??console.warn)(`Warning: config manifestFormat is 2, but existing manifest uses format_version 3. format_version 2 does not support string versions; any string versions in the existing manifest will be preserved as-is.`);let l=s.buildBp(i),u=o.getDependencyDiagnostics().map(e=>({module_name:e.name,specifier:e.specifier,version:e.version,source:e.source,...a[e.name]===void 0?{}:{previous:a[e.name]}}));e.dryRun||await q.write(r,l,`bp`),wt(u,e.logger),c.bpManifest={path:T(t.relative(e.cwd,r)),updated:!0,existed:n,dependencies:u}}if(e.config.packs.rp){let n=ue(e.cwd,e.config),r=await q.read(n),i=r!==void 0,a=s.buildRp(r);e.dryRun||await q.write(n,a,`rp`),c.rpManifest={path:T(t.relative(e.cwd,n)),updated:!0,existed:i}}return c}function wt(e,t){if(t)for(let n of e){let e=J.cyan(n.module_name);n.previous!==void 0&&n.previous!==n.version?t.info(`manifest ${e}: ${n.previous} ${J.dim(`->`)} ${n.version} (specifier ${JSON.stringify(n.specifier)}, ${n.source})`):n.source===`manifest`?t.info(`manifest ${e} ${n.version} ${J.dim(`kept from manifest`)} (specifier ${JSON.stringify(n.specifier)}) — run \`bepack install\` to refresh`):t.verbose(`manifest ${e} ${n.version} (specifier ${JSON.stringify(n.specifier)}, ${n.source})`)}}function Tt(e,t){let n={};for(let r of e?.dependencies??[])`module_name`in r&&typeof r.module_name==`string`&&typeof r.version==`string`&&t[r.module_name]?.manifest&&r.version!==`stable`&&(n[r.module_name]=r.version);return n}function Et(e,t){e?.install?e.install(t):e?.info(`[Install] ${t}`)}var Dt=class{registry;logger;cache=/* @__PURE__ */ new Map;constructor(e,t){this.registry=e,this.logger=t}async metadata(e){let t=this.packageUrl(e),n=this.cache.get(t);if(n)return this.logger?.verbose(`Using cached metadata for ${e}`),n;Et(this.logger,`fetching ${e} metadata from ${this.registry}`);let r=await fetch(t);if(!r.ok)throw new S(`SAPI_VERSION_NOT_FOUND`,`Cannot fetch ${e} versions from registry.`,{details:{package:e,registry:this.registry,status:r.status}});let i=await r.json();return this.cache.set(t,i),this.logger?.verbose(`Fetched ${e} metadata (${Object.keys(i.versions??{}).length} versions)`),i}versions(e){return Object.keys(e.versions??{})}async versionsOf(e){return this.versions(await this.metadata(e))}distTag(e,t){let n=e[`dist-tags`]?.[t];return n&&e.versions?.[n]?n:void 0}packageUrl(e){return`${this.registry.replace(/\/$/,``)}/${encodeURIComponent(e).replace(/^%40/,`@`)}`}};function Ot(e){return t=>{e?.install?e.install(t):e?.info(`[Install] ${t}`)}}var kt=class{config;logger;npm;catalog;pkgResolver;log;constructor(e,t){this.config=e,this.logger=t,this.npm=new Dt(e.install.registry,t),this.catalog=H(e),this.pkgResolver=new j(this.npm,t),this.log=Ot(t)}async resolveAll(){let e={},t=this.config.packs.bp?.dependencies;if(!t||Object.keys(t).length===0)return this.log(`no BP dependencies to resolve`),e;this.log(`resolving dependencies for target ${this.config.target}`);for(let[n,r]of Object.entries(t)){let t=lt(this.catalog,n),i=await this.resolveOne(n,r,t),a=t.manifest??!1;e[n]={specifier:r,packageVersion:i.packageVersion,manifestVersion:a?i.manifestVersion??i.packageVersion:null,manifest:a,external:a,resolver:typeof t.resolver==`string`?t.resolver:t.resolver.name},this.log(`${n}: ${r} -> package ${e[n].packageVersion}, manifest ${e[n].manifestVersion}`)}return this.logger?.verbose(`Dependency resolution complete`),e}async resolveOne(e,t,n){let r={packageName:e,specifier:t,target:this.config.target,entry:n,config:this.config};await this.runDependencyHooks(`beforeResolveDependency`,r);let i=await I.fromConfig(this.config.install.dependencyResolvers,this.config.plugins??[]).resolve({packageName:e,specifier:t,target:this.config.target,entry:n,config:this.config,npm:this.npm,...this.logger?{logger:this.logger}:{}});return await this.runDependencyHooks(`afterResolveDependency`,{...r,result:i}),i}async runDependencyHooks(e,t){for(let n of this.config.plugins??[]){let r=n.install?.hooks?.[e];if(r)try{await r(t)}catch(t){throw new S(`PLUGIN_FAILED`,`Plugin ${n.name} ${e} hook failed: ${t instanceof Error?t.message:String(t)}`)}}}};async function At(e,t){return new kt(e,t).resolveAll()}const jt=`<profile>`;function Y(e,t,n){throw new S(`PROFILE_INVALID`,`${e}: ${t}`,{...n===void 0?{}:{details:n},suggestions:[`Check that the file was produced by a V8 profiler and is valid JSON.`]})}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(e,t,n){return(typeof e!=`number`||!Number.isFinite(e))&&Y(n,`${t} must be a finite number`),e}function Q(e,t,n){let r=Z(e,t,n);return Number.isInteger(r)||Y(n,`${t} must be an integer`),r}function Mt(e,t,n,r){let i=e[t];if(i!==void 0)return Z(i,`${n}.${t}`,r)}function Nt(e,t,n,r){let i=e[t];if(i!==void 0)return Q(i,`${n}.${t}`,r)}function Pt(e,t,n){X(e)||Y(n,`${t} must be an object`);let r=e.functionName??``;typeof r!=`string`&&Y(n,`${t}.functionName must be a string`);let i=e.url??``;typeof i!=`string`&&Y(n,`${t}.url must be a string`);let a=e.scriptId,o;a===void 0?o=`0`:typeof a==`number`&&Number.isFinite(a)?o=String(a):typeof a==`string`?o=a:Y(n,`${t}.scriptId must be a string`);let s=e.lineNumber??-1;(typeof s!=`number`||!Number.isFinite(s))&&Y(n,`${t}.lineNumber must be a finite number`);let c=e.columnNumber??-1;return(typeof c!=`number`||!Number.isFinite(c))&&Y(n,`${t}.columnNumber must be a finite number`),{functionName:r,scriptId:o,url:i,lineNumber:s,columnNumber:c}}function Ft(e,t,n){let r=`nodes[${t}]`;X(e)||Y(n,`${r} must be an object`);let i=Q(e.id,`${r}.id`,n),a=Pt(e.callFrame,`${r}.callFrame`,n),o=Nt(e,`hitCount`,r,n),s=Nt(e,`locationId`,r,n),c;return e.children!==void 0&&(Array.isArray(e.children)||Y(n,`${r}.children must be an array`),c=e.children.map((e,t)=>Q(e,`${r}.children[${t}]`,n))),{id:i,callFrame:a,...o===void 0?{}:{hitCount:o},...c===void 0?{}:{children:c},...s===void 0?{}:{locationId:s}}}function It(e,t=jt){X(e)||Y(t,`profile root must be a JSON object`),Array.isArray(e.nodes)||Y(t,`missing nodes array`),Array.isArray(e.samples)||Y(t,`missing samples array`),Array.isArray(e.timeDeltas)||Y(t,`missing timeDeltas array`);let n=e.nodes.map((e,n)=>Ft(e,n,t)),r=/* @__PURE__ */ new Set;for(let e of n)r.has(e.id)&&Y(t,`duplicate node id ${e.id}`),r.add(e.id);for(let e of n)for(let n of e.children??[])r.has(n)||Y(t,`node ${e.id} references unknown child node ${n}`);e.timeDeltas.length!==e.samples.length&&Y(t,`samples and timeDeltas must have the same length (${e.samples.length} != ${e.timeDeltas.length})`);let i=e.samples.map((e,n)=>{let i=Q(e,`samples[${n}]`,t);return r.has(i)||Y(t,`samples[${n}] references unknown node ${i}`),i}),a=e.timeDeltas.map((e,n)=>{let r=Z(e,`timeDeltas[${n}]`,t);return r<0&&Y(t,`timeDeltas[${n}] must not be negative`),r}),o=Mt(e,`startTime`,`profile`,t),s=Mt(e,`endTime`,`profile`,t);return{nodes:n,samples:i,timeDeltas:a,...o===void 0?{}:{startTime:o},...s===void 0?{}:{endTime:s}}}function Lt(e,t,n){let r=[],i=/* @__PURE__ */ new Set,a=e.id;for(;a!==void 0&&!i.has(a);){i.add(a);let e=n.get(a);if(!e)break;r.push(e),a=t.get(a)}return r}function Rt(e){let t=e[0],n=e[e.length-1];if(!t||!n)throw Error(`cannot create a burst from an empty sample run`);let r=e.reduce((e,t)=>e+t.deltaMs,0);return{startMs:t.timeMs,endMs:n.timeMs,spanMs:n.timeMs-t.timeMs,busyMs:r,samples:e.length,run:e}}function zt(e,t){let n=[],r=[];for(let i of e){if(i.active){r.push(i);continue}r.length>0&&r.length>=t&&n.push(Rt(r)),r=[]}return r.length>0&&r.length>=t&&n.push(Rt(r)),n}function Bt(e,t,n){let r=It(e,t),i=n.gapMs??5,a=n.minSamples??20,o=new Map(r.nodes.map(e=>[e.id,e])),s=/* @__PURE__ */ new Map;for(let e of r.nodes)for(let t of e.children??[])s.set(t,e.id);let c=i*1e3,l=0,u=[];for(let e=0;e<r.samples.length;e++){let t=r.timeDeltas[e]??0;l+=t;let n=o.get(r.samples[e]??-1);n&&u.push({index:e,timeMs:l/1e3,deltaMs:t/1e3,active:t<=c,node:n,stack:Lt(n,s,o)})}let d=u.filter(e=>e.active),f=u.filter(e=>!e.active);return{file:t,raw:r,samples:u,activeSamples:d,gapSamples:f,busyMs:d.reduce((e,t)=>e+t.deltaMs,0),idleMs:f.reduce((e,t)=>e+t.deltaMs,0),durationMs:l/1e3,gapMs:i,minSamples:a,bursts:zt(u,a)}}function Vt(e,t={}){return Bt(e,jt,t)}async function Ht(e,t={}){let n;try{n=await s(e,`utf8`)}catch(t){throw new S(`PROFILE_READ_FAILED`,`Cannot read profile ${e}: ${t instanceof Error?t.message:String(t)}`,{details:{file:e},suggestions:[`Check the path and that the file is readable.`]})}let r;try{r=JSON.parse(n)}catch(t){Y(e,`not valid JSON: ${t instanceof Error?t.message:String(t)}`)}return Bt(r,e,t)}const Ut=10485760;async function Wt(e,n={}){let r=Zt(n.command),i=n.tsconfigPath??`tsconfig.json`,a=t.resolve(e,i),s=await dt(a),l=pe(n.command,n.args??[],r?{tsconfigPath:a,incremental:!!n.incremental,useNpx:!!n.useNpx,...n.tsBuildInfoFile?{tsBuildInfoFile:n.tsBuildInfoFile}:{}}:{});if(!s){if(r)throw new S(`TYPECHECK_FAILED`,`TypeScript config not found: ${i}. Create it or run build with --skip-typecheck.`,{details:{path:i,command:l.label}});n.warn?.(`TypeScript config not found: ${i} — running \`${l.label}\` anyway.`)}n.incremental&&n.tsBuildInfoFile&&r&&await o(t.dirname(n.tsBuildInfoFile),{recursive:!0});let u=he(l),d=await Yt(l.command,e);if(!d)throw new S(`TYPECHECK_FAILED`,`Cannot find ${l.command}.`,{details:{command:u,label:l.label},suggestions:$(l)});let f=process.platform===`win32`&&/\.(cmd|bat)$/i.test(d),p=f?Gt(d,l.args):d,m=f?[]:l.args,h;try{h=c(p,m,{cwd:e,windowsHide:!0,shell:f,stdio:[`ignore`,`pipe`,`pipe`]})}catch(e){throw new S(`TYPECHECK_FAILED`,`Cannot start ${u}.`,{details:{command:u,label:l.label,cause:e instanceof Error?e.message:String(e)},suggestions:$(l)})}return await new Promise((e,t)=>{let r=``,i=``,a=0,o=e=>{let t=Buffer.isBuffer(e)?e:Buffer.from(String(e)),n=Ut-a;return n<=0?``:t.length<=n?(a+=t.length,t.toString(`utf8`)):(a=Ut,t.subarray(0,n).toString(`utf8`))};h.stdout?.on(`data`,e=>{r+=o(e),n.quiet||process.stdout.write(e)}),h.stderr?.on(`data`,e=>{i+=o(e),n.quiet||process.stderr.write(e)}),h.on(`error`,e=>{t(new S(`TYPECHECK_FAILED`,`Cannot start ${u}.`,{details:{command:u,label:l.label,cause:e.message},suggestions:$(l)}))}),h.on(`close`,n=>{if(n===0){e();return}let a=[r.trim(),i.trim()].filter(Boolean).join(`
|
|
2
|
-
`),o=
|
|
1
|
+
import{pathToFileURL as e}from"node:url";import t from"node:path";import{constants as n,promises as r,readFileSync as i}from"node:fs";import{platform as a}from"node:os";import"rolldown/plugins";import{access as o,mkdir as s,readFile as c}from"node:fs/promises";import{spawn as l}from"node:child_process";var u=Object.create,d=Object.defineProperty,f=Object.getOwnPropertyDescriptor,p=Object.getOwnPropertyNames,m=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty,g=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),_=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=p(t),a=0,o=i.length,s;a<o;a++)s=i[a],!h.call(e,s)&&s!==n&&d(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=f(t,s))||r.enumerable});return e},v=(e,t,n)=>(n=e==null?{}:u(m(e)),_(t||!e||!e.__esModule||!h.call(e,`default`)?d(n,`default`,{value:e,enumerable:!0}):n,e));const y={root:`.`,configured:{root:!1,packOutDir:!1},name:`minecraft-addon`,version:`1.0.0`,description:``,replace:{values:{},builtins:{VERSION:!1,NAME:!1,UUID:!1,DESCRIPTION:!1}},target:`latest`,plugins:[],install:{registry:`https://registry.npmjs.org/`,saveTo:`dependencies`,packageManager:`auto`,runPackageManager:!0,updatePackageJson:!0,updateManifest:!0,dependencyCatalog:{},dependencyResolvers:[]},build:{copy:!1,timing:!1},dev:{copy:!1},copy:{defaultTarget:``,targets:{}},pack:{name:`{name}-{version}`,outDir:`dist`},hooks:{}},b={dev:!0,build:!1,file:`node_modules/.cache/bepack/tsconfig.tsbuildinfo`},x={keepLooseFiles:!1,keepLoose:[],exclude:[],minifyJson:!0,packOptimizationVersion:`0.1.0`,allowUnsupportedTarget:!1},S={entry:`src/main.ts`,define:{},tsconfig:`tsconfig.json`,typecheck:!0,typecheckArgs:[],preserveModules:!0,external:[/^@minecraft\/server.*/],useNpx:!1,minify:!1,cache:b,scriptOutputDir:`scripts`};function ee(e){return e}const C=[`bepack.config.ts`,`bepack.config.mjs`,`bepack.config.js`];var w=class extends Error{code;details;suggestions;constructor(e,t,n={}){super(t),this.name=`BePackError`,this.code=e,this.details=n.details,this.suggestions=n.suggestions}};const te=[`world`,`global`,`any`];function T(e){let t=[];return e.packs.bp&&t.push({type:`bp`,root:e.packs.bp.root,uuid:e.packs.bp.uuid,...e.packs.bp.moduleUuid===void 0?{}:{moduleUuid:e.packs.bp.moduleUuid},name:e.packs.bp.name,include:e.packs.bp.include}),e.packs.rp&&t.push({type:`rp`,root:e.packs.rp.root,uuid:e.packs.rp.uuid,moduleUuid:e.packs.rp.moduleUuid,name:e.packs.rp.name,include:e.packs.rp.include}),t}function E(e,n){return t.isAbsolute(n)?n:t.join(e,n)}function D(e){return e.replace(/\\/g,`/`)}function ne(e,t){return E(e,t.root)}function re(e,t,n){return n===`bp`?t.packs.bp?E(e,t.packs.bp.root):void 0:t.packs.rp?E(e,t.packs.rp.root):void 0}function ie(e,t){let n=re(ne(e,t),t,`bp`);if(!n)throw Error(`packs.bp is not configured`);return n}function ae(e,t){let n=re(ne(e,t),t,`rp`);if(!n)throw Error(`packs.rp is not configured`);return n}function oe(e,n){let r=t.relative(e,n);return r===``||!r.startsWith(`..${t.sep}`)&&r!==`..`&&!t.isAbsolute(r)}function se(e,n,r){if(!n||n===`.`)throw new w(`CONFIG_INVALID`,`compile.scriptOutputDir must be a non-empty relative path strictly inside the BP root. Got: "${n}". This directory will be emptied during build.`);let i=n.replace(/\\/g,`/`);if(t.posix.isAbsolute(i)||t.win32.isAbsolute(i))throw new w(`CONFIG_INVALID`,`compile.scriptOutputDir must be a relative path, not absolute. Got: "${n}". This directory will be emptied during build.`);let a=t.posix.normalize(i);if(a.split(`/`).includes(`..`))throw new w(`CONFIG_INVALID`,`compile.scriptOutputDir must not contain ".." (path escape). Got: "${n}" resolves outside the BP root. This directory will be emptied during build.`);let o=t.resolve(e,a),s=t.relative(e,o);if(!s||s.startsWith(`..`)||t.isAbsolute(s))throw new w(`CONFIG_INVALID`,`compile.scriptOutputDir must be a directory strictly inside the BP root. Value: "${n}", resolved: "${o}". This directory will be emptied during build and must not be the BP root or a path outside it.`);if(r&&oe(o,r))throw new w(`CONFIG_INVALID`,`compile.scriptOutputDir "${n}" dangerously overlaps with the source entry directory. The output directory will be emptied during build and would delete source files.`);return D(s)}function ce(e,n){if(n.packs.bp)return t.join(ie(e,n),`manifest.json`)}function le(e,n){if(n.packs.rp)return t.join(ae(e,n),`manifest.json`)}a();function ue(e){return{values:e?.values??{},builtins:{VERSION:e?.builtins?.VERSION??!1,NAME:e?.builtins?.NAME??!1,UUID:e?.builtins?.UUID??!1,DESCRIPTION:e?.builtins?.DESCRIPTION??!1}}}function de(e){let t={...e??{}};for(let[e,n]of Object.entries(t))try{Function(`return (${n});`)}catch{throw new w(`CONFIG_INVALID`,`packs.bp.compile.define["${e}"] is not a valid JavaScript expression: ${n}. Define values must be expression strings, e.g. JSON.stringify("server") or "true".`,{details:{defineKey:e,defineValue:n}})}return t}const O=`tsc --noEmit`;function k(e){let t=[],n=``,r,i=!1;for(let a=0;a<e.length;a+=1){let o=e[a];if(r){o===r?r=void 0:o===`\\`&&e[a+1]===r?(a+=1,n+=r):n+=o;continue}if(o===`"`||o===`'`){r=o,i=!0;continue}if(o===`\\`&&(e[a+1]===`"`||e[a+1]===`'`)){a+=1,n+=e[a],i=!0;continue}if(/\s/.test(o)){i&&=(t.push(n),n=``,!1);continue}n+=o,i=!0}if(r)throw new w(`CONFIG_INVALID`,`Unterminated ${r===`"`?`double`:`single`} quote in typecheck command: ${e}`);return i&&t.push(n),t}function fe(e,t=[],n={}){let r=typeof e==`string`?e.trim():``;if(r===``){let e=[...k(O)],r=e.shift(),i=[...pe(e,n),...t];return n.useNpx?{command:`npx`,args:[r,...i],label:`npx tsc --noEmit`,isDefault:!0}:{command:r,args:i,label:O,isDefault:!0}}let i=k(r),a=i[0];if(!a)throw new w(`CONFIG_INVALID`,`packs.bp.compile.typecheck.command must be a non-empty command line, got: ${JSON.stringify(e)}`);return{command:a,args:[...i.slice(1),...t],label:r,isDefault:!1}}function pe(e,t){let n=[...e];return t.tsconfigPath&&n.push(`--project`,t.tsconfigPath),t.incremental&&t.tsBuildInfoFile&&n.push(`--incremental`,`--tsBuildInfoFile`,t.tsBuildInfoFile),n}function me(e){return[e.command,...e.args].map(e=>/\s/.test(e)?JSON.stringify(e):e).join(` `)}function he(e,t){if(e===void 0||typeof e==`boolean`)return{typecheck:e??t.typecheck,...t.typecheckCommand===void 0?{}:{typecheckCommand:t.typecheckCommand},typecheckArgs:t.typecheckArgs??[]};if(typeof e!=`object`||!e||Array.isArray(e))throw new w(`CONFIG_INVALID`,`packs.bp.compile.typecheck must be a boolean or an object { enabled?, command?, args? }, got: ${A(e)}.`);ve(e);let{enabled:n,command:r,args:i}=e;if(n!==void 0&&typeof n!=`boolean`)throw new w(`CONFIG_INVALID`,`packs.bp.compile.typecheck.enabled must be a boolean, got: ${A(n)}.`);if(r!==void 0&&typeof r!=`string`)throw new w(`CONFIG_INVALID`,`packs.bp.compile.typecheck.command must be a string, got: ${A(r)}.`);if(typeof r==`string`&&r.trim()===``)throw new w(`CONFIG_INVALID`,`packs.bp.compile.typecheck.command must be a non-empty command line, got: ${A(r)}.`);let a=ge(i,`packs.bp.compile.typecheck.args`);return{typecheck:n??t.typecheck,...r===void 0?t.typecheckCommand===void 0?{}:{typecheckCommand:t.typecheckCommand}:{typecheckCommand:r},typecheckArgs:a??t.typecheckArgs??[]}}function ge(e,t){if(e!==void 0){if(!Array.isArray(e))throw new w(`CONFIG_INVALID`,`${t} must be an array of strings, got: ${A(e)}.`);return e.map(e=>{if(typeof e!=`string`)throw new w(`CONFIG_INVALID`,`${t} entries must be strings, got: ${A(e)}.`);return e})}}function _e(e,t){if(e!==void 0){if(typeof e!=`string`||e.trim()===``)throw new w(`CONFIG_INVALID`,`${t} must be a non-empty command line string, got: ${A(e)}.`);return e.trim()}}function ve(e){let t=e;if(t.typechecker!==void 0)throw new w(`CONFIG_INVALID`,`packs.bp.compile.typecheck.typechecker was replaced by packs.bp.compile.typecheck.command: write the full command line instead, e.g. { command: "bun check" }, got: ${A(t.typechecker)}.`)}function A(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e==`object`?`object`:typeof e==`string`?JSON.stringify(e):String(e)}function ye(e){let t=/^(\d+)\.(\d+)\.(\d+)$/.exec(e);if(!t)throw new w(`VERSION_INVALID`,`Manifest version requires x.y.z.`,{details:{version:e}});return[Number(t[1]),Number(t[2]),Number(t[3])]}function be(e){return/^\d+\.\d+\.\d+(?:[-.][0-9A-Za-z.-]+)?$/.test(e)}function j(e,t){let n=e.split(/[^0-9A-Za-z]+/),r=t.split(/[^0-9A-Za-z]+/),i=Math.max(n.length,r.length);for(let e=0;e<i;e+=1){let t=n[e]??``,i=r[e]??``,a=/^\d+$/.test(t)?Number(t):NaN,o=/^\d+$/.test(i)?Number(i):NaN,s=Number.isNaN(a)||Number.isNaN(o)?t.localeCompare(i):a-o;if(s!==0)return s}return 0}function xe(e){return e===`latest`||j(e,`1.21.120`)>=0}function Se(e){let t=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(e.trim());if(!t)return;let n=/(?:^|[.-])(\d+)\.(\d+)\.(\d+)(?:[.-]|$)/.exec(t[4]??``);return{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),...n?{minecraftTarget:[Number(n[1]),Number(n[2]),Number(n[3])]}:{}}}function Ce(e,t){for(let n of[`major`,`minor`,`patch`])if(e[n]!==t[n])return e[n]-t[n];return 0}function M(e,t){let n=Se(e);return n?t.split(`||`).some(e=>{let t=/(?:\^|~|>=|<=|>|<|=)?\s*(v?\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)/.exec(e.trim()),r=t?Se(t[1]):void 0;return!r||n.major!==r.major||Ce(n,r)<0?!1:r.minecraftTarget?n.minecraftTarget?j(n.minecraftTarget.join(`.`),r.minecraftTarget.join(`.`))>=0:!1:!0}):!1}const we=M;function Te(e){if(e===`stable`||e===`beta`||e===`preview`)throw new w(`DEPENDENCY_VERSION_INVALID`,`${e} must be resolved from npm registry before writing package.json.`,{details:{specifier:e}});if(be(e))return e;throw new w(`DEPENDENCY_VERSION_INVALID`,`Unsupported dependency version: ${e}`,{details:{specifier:e}})}function Ee(e){return e.filter(e=>/^\d+\.\d+\.\d+$/.test(e)).sort(j)}function De(e){return e.filter(e=>/(?:^|[-.])beta(?:[-.]|$)/i.test(e)).sort(j)}var N=class{npm;logger;constructor(e,t){this.npm=e,this.logger=t}latestStable(e,t){let n=this.npm.distTag(t,`latest`);if(n&&/^\d+\.\d+\.\d+$/.test(n))return this.logger?.verbose(`Resolved ${e}@stable -> ${n}`),n;let r=Ee(this.npm.versions(t)).at(-1);if(!r)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest stable version for ${e}.`,{details:{package:e}});return this.logger?.verbose(`Resolved ${e}@stable -> ${r}`),r}latestBeta(e,t){let n=this.npm.distTag(t,`beta`);if(n)return this.logger?.verbose(`Resolved ${e}@beta -> ${n}`),n;let r=De(this.npm.versions(t)).at(-1);if(!r)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest beta version for ${e}.`,{details:{package:e}});return this.logger?.verbose(`Resolved ${e}@beta -> ${r}`),r}betaForTarget(e,t,n){let r=t.replace(/\./g,`\\.`),i=RegExp(`beta[-.]${r}-stable`),a=this.npm.versions(n).filter(e=>i.test(e)).sort(j).at(-1);if(!a)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve ${e}@beta for target ${t}.`,{details:{package:e,specifier:`beta`,target:t},suggestions:[`Use target: "latest"`,`Specify an exact version`,`Update BePack`,`Manually edit package.json and manifest.json`]});return this.logger?.verbose(`Resolved ${e}@beta for target ${t} -> ${a}`),a}inferStableFromBeta(e,t,n,r){let i=/^(\d+)\.(\d+)\.(\d+)-beta[.-]/.exec(n);if(!i)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot infer stable version from ${e}@${n}.`,{details:{package:e,beta:n,target:t}});let a=Number(i[1]),o=Number(i[2])-1,s=`${a}.${o}.${Number(i[3])}`;if(o<0||!r.versions?.[s])throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot confirm inferred stable version ${s} for ${e}.`,{details:{package:e,target:t,beta:n,inferredStable:s}});return s}};function Oe(e,t){return t===`latest`||xe(t)?`beta`:/^(\d+\.\d+\.\d+-beta)/i.exec(e)?.[1]??e}function ke(e,t,n){let r=De(t).filter(e=>/^\d+\.\d+\.\d+-beta\.\d+\.\d+\.\d+/.test(e)).filter(e=>!/(?:rc|beta)\.\d+\.\d+\.\d+-preview\.\d+$/i.test(e)).at(-1);if(!r)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest beta version for ${e}.`,{details:{package:e}});return n?.verbose(`Resolved ${e}@beta -> ${r}`),r}function Ae(e){return e.filter(e=>/(?:rc|beta)\.\d+\.\d+\.\d+-preview\.\d+$/i.test(e)).sort(j)}function je(e,t,n){let r=Ae(t).at(-1);if(!r)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest preview version for ${e}.`,{details:{package:e}});return n?.verbose(`Resolved ${e}@preview -> ${r}`),r}function Me(e,t,n,r){let i=n.replace(/\./g,`\\.`),a=RegExp(`(?:rc|beta)\\.${i}-preview\\.\\d+$`),o=t.filter(e=>a.test(e)).sort(j).at(-1);if(!o)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve ${e}@preview for target ${n}.`,{details:{package:e,specifier:`preview`,target:n},suggestions:[`Use target: "latest"`,`Specify an exact version`]});return r?.verbose(`Resolved ${e}@preview for target ${n} -> ${o}`),o}const P={name:`minecraft-script-api`,resolver:`minecraft-script-api`,match:e=>e.specifier===`stable`||e.specifier===`beta`||e.specifier===`preview`,async resolve(e){let t=await e.npm.metadata(e.packageName),n=new N(e.npm,e.logger);if(e.specifier===`stable`){e.logger?.verbose(`Resolving ${e.packageName}@stable for target ${e.target}`);let r=e.target===`latest`?n.latestStable(e.packageName,t):n.inferStableFromBeta(e.packageName,e.target,n.betaForTarget(e.packageName,e.target,t),t);return{packageVersion:r,manifestVersion:r}}if(e.specifier===`beta`){e.logger?.verbose(`Resolving ${e.packageName}@beta for target ${e.target}`);let r=e.target===`latest`?ke(e.packageName,e.npm.versions(t),e.logger):n.betaForTarget(e.packageName,e.target,t);return{packageVersion:r,manifestVersion:Oe(r,e.target)}}e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`);let r=e.target===`latest`?je(e.packageName,e.npm.versions(t),e.logger):Me(e.packageName,e.npm.versions(t),e.target,e.logger);return{packageVersion:r,manifestVersion:r}}},F={name:`minecraft-script-api-bp`,resolver:`minecraft-script-api-bp`,match:e=>e.specifier===`beta`||e.specifier===`preview`,async resolve(e){let t=await e.npm.metadata(e.packageName),n=new N(e.npm,e.logger);if(e.specifier===`beta`){e.logger?.verbose(`Resolving ${e.packageName}@beta for target ${e.target}`);let r=e.target===`latest`?ke(e.packageName,e.npm.versions(t),e.logger):n.betaForTarget(e.packageName,e.target,t);return{packageVersion:r,manifestVersion:Oe(r,e.target)}}e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`);let r=e.target===`latest`?je(e.packageName,e.npm.versions(t),e.logger):Me(e.packageName,e.npm.versions(t),e.target,e.logger);return{packageVersion:r,manifestVersion:r}}},Ne=/^\d+\.\d+\.\d+$/,Pe=/^\d+\.\d+\.\d+-preview\.\d+$/,Fe={name:`minecraft-vanilla-data`,resolver:`minecraft-vanilla-data`,match:e=>e.specifier===`stable`||e.specifier===`preview`,async resolve(e){let t=await e.npm.metadata(e.packageName);return e.specifier===`stable`?Ie(e,t):Le(e,t)}};function Ie(e,t){if(e.logger?.verbose(`Resolving ${e.packageName}@stable for target ${e.target}`),e.target===`latest`){let n=e.npm.distTag(t,`latest`);if(n&&Ne.test(n))return e.logger?.verbose(`Resolved ${e.packageName}@stable -> ${n}`),{packageVersion:n};let r=e.npm.versions(t).filter(e=>Ne.test(e)).sort(j).at(-1);if(!r)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest stable version for ${e.packageName}.`,{details:{package:e.packageName}});return e.logger?.verbose(`Resolved ${e.packageName}@stable -> ${r}`),{packageVersion:r}}if(t.versions?.[e.target])return e.logger?.verbose(`Resolved ${e.packageName}@stable for target ${e.target} -> ${e.target}`),{packageVersion:e.target};throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve ${e.packageName}@stable for target ${e.target}. The target version does not exist in the registry.`,{details:{package:e.packageName,specifier:`stable`,target:e.target},suggestions:[`Use target: "latest"`,`Specify an exact version`]})}function Le(e,t){if(e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`),e.target===`latest`){let n=e.npm.versions(t).filter(e=>Pe.test(e)).sort(j).at(-1);if(!n)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest preview version for ${e.packageName}.`,{details:{package:e.packageName}});return e.logger?.verbose(`Resolved ${e.packageName}@preview -> ${n}`),{packageVersion:n}}let n=e.target.replace(/\./g,`\\.`),r=RegExp(`^${n}-preview\\.\\d+$`),i=e.npm.versions(t).filter(e=>r.test(e)).sort(j).at(-1);if(!i)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve ${e.packageName}@preview for target ${e.target}. No matching preview version found.`,{details:{package:e.packageName,specifier:`preview`,target:e.target},suggestions:[`Use target: "latest"`,`Specify an exact preview version`]});return e.logger?.verbose(`Resolved ${e.packageName}@preview for target ${e.target} -> ${i}`),{packageVersion:i}}const Re={"@minecraft/common":{resolver:P,manifest:!0},"@minecraft/server":{resolver:P,manifest:!0},"@minecraft/server-ui":{resolver:P,manifest:!0},"@minecraft/server-net":{resolver:F,manifest:!0},"@minecraft/server-admin":{resolver:F,manifest:!0},"@minecraft/server-gametest":{resolver:F,manifest:!0},"@minecraft/debug-utilities":{resolver:F,manifest:!0},"@minecraft/diagnostics":{resolver:F,manifest:!0},"@minecraft/server-graphics":{resolver:F,manifest:!0},"@minecraft/server-editor":{resolver:F,manifest:!0},"@minecraft/vanilla-data":{resolver:Fe,manifest:!1}},ze={name:`exact-version`,match:e=>be(e.specifier),resolve(e){return e.logger?.verbose(`Using exact ${e.packageName}@${e.specifier}`),{packageVersion:Te(e.specifier),manifestVersion:e.specifier}}},Be=[P,F,Fe,ze];var Ve=class e{resolvers;pluginNames=/* @__PURE__ */ new Map;constructor(e,t=[]){this.resolvers=e;for(let e of t)for(let t of e.install?.dependencyResolvers??[])this.pluginNames.set(t,e.name)}static fromConfig(t,n=[]){return new e([...t,...Be],n)}resolverMatchesCatalog(e,t){let n=e.entry.resolver;if(!n)return!0;let r=typeof n==`string`?n:n.name;return t.resolver===void 0||t.resolver===r}find(e){let t;for(let n of this.resolvers)if(this.resolverMatchesCatalog(e,n))try{if(n.match(e)){t=n;break}}catch(e){let t=this.pluginNames.get(n);throw t?new w(`PLUGIN_FAILED`,`Plugin ${t} resolver ${n.name} match failed: ${e instanceof Error?e.message:String(e)}`):e}if(!t)throw new w(`DEPENDENCY_VERSION_INVALID`,`${e.packageName} dependency version is invalid: ${e.specifier}`,{details:{package:e.packageName,specifier:e.specifier,resolver:e.entry.resolver}});return e.logger?.verbose(`Resolving ${e.packageName}@${e.specifier} with ${t.name}`),t}async resolve(e){let t=this.find(e);try{return await t.resolve(e)}catch(e){let n=this.pluginNames.get(t);throw n?new w(`PLUGIN_FAILED`,`Plugin ${n} resolver ${t.name} failed: ${e instanceof Error?e.message:String(e)}`):e}}};const I=`sapi-pro`,L=[`@minecraft/server`,`@minecraft/server-ui`];function R(e){return/(?:beta|preview|alpha|rc)/i.test(e)}function He(e){return R(e)?`beta`:`stable`}function Ue(e){let t=/^(\d+)\.(\d+)\./.exec(e);return!!t&&(Number(t[1])>0||Number(t[2])>=4)}function We(e){return{...e.dependencies??{},...e.peerDependencies??{}}}async function Ge(e,t,n,r){let i=e.config.packs.bp?.dependencies??{},a={...Re,...e.config.install.dependencyCatalog},o=Ve.fromConfig(e.config.install.dependencyResolvers.filter(e=>e!==qe),e.config.plugins);for(let[s,c]of Object.entries(t)){if(!s.startsWith(`@minecraft/`))continue;let t=i[s],l=a[s];if(!l)return r.add(s),!1;if(!t){if((l.manifest??!1)===!1)continue;return r.add(s),!1}let u;if(n.has(s)?u=n.get(s):(u=await o.resolve({packageName:s,specifier:t,target:e.target,entry:l,config:e.config,npm:e.npm,...e.logger?{logger:e.logger}:{}}),n.set(s,u)),!u||L.includes(s)&&R(c)!==R(u.packageVersion)||!M(u.packageVersion,c))return!1}return!0}function Ke(e,t){if(t!==`stable`&&t!==`beta`){let n=e[t];return n?[[t,n]]:[]}return Object.entries(e).filter(([e,n])=>{if(!Ue(e))return!1;let r=We(n);return Object.keys(r).length===0?!1:t===`stable`?/-stable(?:\.\d+)?$/i.test(e):/^\d+\.\d+\.\d+$/.test(e)}).sort(([e],[t])=>j(e,t)).reverse()}const qe={name:`sapi-pro`,resolver:`sapi-pro`,match:e=>e.specifier===`stable`||e.specifier===`beta`||/^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(e.specifier),async resolve(e){let t=await e.npm.metadata(I),n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Set;for(let[i,a]of Ke(t.versions??{},e.specifier))if(await Ge(e,We(a),n,r))return/^0\.3\./.test(i)&&e.logger?.warn(`sapi-pro@${i} uses legacy metadata; compatibility is best-effort only.`),{packageVersion:i,manifestVersion:null};throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot find a compatible ${I}@${e.specifier} for target ${e.target}.${r.size>0?` Missing explicit dependencies: ${[...r].join(`, `)}.`:``}`,{details:{package:I,specifier:e.specifier,target:e.target},suggestions:[`Explicitly declare the @minecraft packages required by sapi-pro.`,`Use a compatible target or specify an exact sapi-pro version.`]})}};function Je(){return{name:`sapi-pro`,apiVersion:1,description:`Resolve sapi-pro versions compatible with BePack Script API dependencies.`,configResolved:({config:e})=>{let t=e.packs.bp?.dependencies??{},n=t[I];if(!n)return;let r=L.filter(e=>!t[e]);if(r.length>0)throw Error(`sapi-pro requires explicit dependencies: ${r.join(`, `)}.`);if(n===`stable`||n===`beta`)for(let e of L){let r=t[e];if(He(r)!==n)throw Error(`sapi-pro ${n} requires ${e} to use ${n}, received ${r}.`)}},install:{dependencyCatalog:{[I]:{resolver:`sapi-pro`,manifest:!1}},dependencyResolvers:[qe]}}}const Ye={"sapi-pro":Je};function z(e){return e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0)):{}}function B(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e==`function`?`function`:typeof e==`object`?`object`:typeof e==`string`?JSON.stringify(e):String(e)}function Xe(e,t){let n={};(e.packs?.bp||t.packs?.bp)&&(n.bp={...e.packs?.bp??{},...z(t.packs?.bp)}),(e.packs?.rp||t.packs?.rp)&&(n.rp={...e.packs?.rp??{},...z(t.packs?.rp)});let r={...e.copy?.targets??{},...z(t.copy?.targets)},i=z(t);return{...e,...i,...t.plugins!==void 0||e.plugins!==void 0?{plugins:t.plugins??e.plugins}:{},packs:n,install:{...e.install,...z(t.install)},build:{...e.build,...z(t.build)},dev:{...e.dev,...z(t.dev)},copy:{...e.copy,...z(t.copy),targets:r},pack:{...e.pack,...z(t.pack)},hooks:{...e.hooks,...z(t.hooks)}}}function Ze(e){let t=(e??[]).map(e=>{if(typeof e!=`string`)return e;let t=Ye[e];if(!t)throw new w(`CONFIG_INVALID`,`Unknown built-in plugin: ${e}.`);return t()}),n=/* @__PURE__ */ new Set;for(let e of t){if(!e?.name||e.name.trim()===``)throw new w(`CONFIG_INVALID`,`Every plugin must have a non-empty name.`);if(n.has(e.name))throw new w(`CONFIG_INVALID`,`Plugin name is duplicated: ${e.name}.`);if(e.apiVersion!==void 0&&e.apiVersion!==1)throw new w(`CONFIG_INVALID`,`Plugin ${e.name} requires unsupported BePack plugin API version ${e.apiVersion}.`);if(e.priority!==void 0&&!Number.isFinite(e.priority))throw new w(`CONFIG_INVALID`,`Plugin ${e.name} priority must be a finite number.`);n.add(e.name)}return t.sort((e,t)=>(t.priority??0)-(e.priority??0))}function Qe(e,t){let n=/* @__PURE__ */ new Set;for(let r of[...e.map(e=>e.hooks),t])for(let e of Object.keys(r??{}))n.add(e);return Object.fromEntries([...n].map(n=>{let r=[...e.map(e=>({plugin:e,hook:e.hooks?.[n]})).filter(e=>e.hook!==void 0),...t?.[n]?[{hook:t[n]}]:[]];return[n,async(...e)=>{let t;for(let i of r)try{t=await i.hook(...e)}catch(e){let t=`plugin`in i?i.plugin:void 0;throw t?new w(`PLUGIN_FAILED`,`Plugin ${t.name} ${String(n)} hook failed: ${e instanceof Error?e.message:String(e)}`):e}return t}]}))}function $e(e,t){let n={},r=/* @__PURE__ */ new Map,i=[];for(let t of e)for(let[e,a]of Object.entries(t.install?.dependencyCatalog??{})){let o=r.get(e);if(o){i.push(`dependency catalog ${e}: plugin ${o} takes precedence over plugin ${t.name}`);continue}n[e]=a,r.set(e,t.name)}for(let[e,a]of Object.entries(t)){let t=r.get(e);t&&i.push(`dependency catalog ${e}: project config overrides plugin ${t}`),n[e]=a}return{catalog:n,diagnostics:i}}function et(e,n,r){let i=S,a=e?.scriptOutputDir??i.scriptOutputDir,o=t.resolve(r,e?.entry??i.entry),s=se(n,a,t.dirname(o)),c=_e(e?.typecheckCommand,`packs.bp.compile.typecheckCommand`)??i.typecheckCommand,l=ge(e?.typecheckArgs,`packs.bp.compile.typecheckArgs`),u=he(e?.typecheck,{typecheck:i.typecheck,...c===void 0?{}:{typecheckCommand:c},...l===void 0?{}:{typecheckArgs:l}});return{entry:e?.entry??i.entry,define:de(e?.define),tsconfig:e?.tsconfig??i.tsconfig,typecheck:u.typecheck,typecheckArgs:u.typecheckArgs,...u.typecheckCommand===void 0?{}:{typecheckCommand:u.typecheckCommand},preserveModules:e?.preserveModules??i.preserveModules,external:e?.external??i.external,useNpx:e?.useNpx??i.useNpx,minify:e?.minify??i.minify,cache:p(e?.cache),scriptOutputDir:s,...e?.rolldown===void 0?{}:{rolldown:d(e.rolldown)},...e?.rolldownConfig===void 0?{}:{rolldownConfig:f(e.rolldownConfig)}};function d(e){if(typeof e==`function`||e&&typeof e==`object`&&!Array.isArray(e))return e;throw new w(`CONFIG_INVALID`,`packs.bp.compile.rolldown must be a rolldown options object or a function (options, context) => options, got: ${B(e)}.`)}function f(e){if(typeof e!=`string`||e.trim()===``)throw new w(`CONFIG_INVALID`,`packs.bp.compile.rolldownConfig must be a non-empty path string, got: ${B(e)}.`);return e}function p(e){let t=b;return{dev:e?.dev??t.dev,build:e?.build??t.build,file:e?.file??t.file}}}function tt(e){if(e===void 0||e===!1)return;let t=e===!0?{}:e;if(typeof t!=`object`||!t||Array.isArray(t))throw new w(`CONFIG_INVALID`,`pack.optimize must be a boolean or an options object, got: ${B(e)}.`);let n=t.packOptimizationVersion;if(n!==void 0&&(typeof n!=`string`||n.trim()===``))throw new w(`CONFIG_INVALID`,`pack.optimize.packOptimizationVersion must be a non-empty string, got: ${B(n)}.`);return{keepLooseFiles:t.keepLooseFiles??x.keepLooseFiles,keepLoose:t.keepLoose!==!1&&(t.keepLoose??[]).map(nt),exclude:(t.exclude??[]).map(nt),minifyJson:t.minifyJson??x.minifyJson,packOptimizationVersion:n??x.packOptimizationVersion,allowUnsupportedTarget:t.allowUnsupportedTarget??x.allowUnsupportedTarget}}function nt(e){let n=String(e).replace(/\\/g,`/`).replace(/^\.\//,``).replace(/\/+$/,``);if(!n||n.includes(`/`)||n.includes(`..`)||t.posix.isAbsolute(n))throw new w(`CONFIG_INVALID`,`pack.optimize.exclude entries must be top-level folder names (no path separators, no ".."), got: ${B(e)}.`);return n}function rt(e){let t=e?.merge??`preserve`;if(t!==`preserve`&&t!==`clean`)throw new w(`CONFIG_INVALID`,`manifest.merge must be "preserve" or "clean", got: ${String(e?.merge)}.`);let n=e?.minEngineVersion;if(n!==void 0&&!/^\d+\.\d+\.\d+$/.test(n))throw new w(`CONFIG_INVALID`,`manifest.minEngineVersion must be a SemVer string like "1.21.0", got: ${n}.`);return{merge:t,...n===void 0?{}:{minEngineVersion:n},extraDependencies:e?.extraDependencies??[],extraModules:e?.extraModules??[],extraHeader:e?.extraHeader??{}}}function it(e,n={},r=process.cwd()){let i=Xe(e,n),a=Ze(i.plugins),o=i.target??y.target;if(o===`stable`||o===`beta`)throw new w(`TARGET_INVALID`,`target must be a Minecraft game version or latest, not a Script API channel.`,{details:{target:o}});let s=!!i.packs?.bp,c=!!i.packs?.rp;if(!s&&!c)throw new w(`CONFIG_INVALID`,`At least one pack (packs.bp or packs.rp) is required.`);if(!i.name||i.name.trim()===``)throw new w(`CONFIG_INVALID`,`name is required.`);let l=i.name,u=i.version??y.version,d=i.description,f=i.packs,p=f.bp?.compile,m=f.bp,h=f.rp;if(m){if(!m.uuid)throw new w(`CONFIG_INVALID`,`packs.bp.uuid is required.`);if(m.compile&&!m.moduleUuid)throw new w(`CONFIG_INVALID`,`packs.bp.moduleUuid is required when packs.bp.compile is configured.`);if(m.root===void 0)throw new w(`CONFIG_INVALID`,`packs.bp.root is required. Set the behavior pack directory in bepack.config.ts.`);if(p?.define){let e=Object.keys(i.replace?.values??{}),t=Object.keys(p.define),n=e.filter(e=>t.includes(e));if(n.length>0)throw new w(`CONFIG_INVALID`,`Config conflict: ${n.map(e=>`"${e}"`).join(`, `)} is configured in both replace.values and packs.bp.compile.define. Use only one mechanism per key.`,{details:{overlap:n}})}}let g=t.resolve(r,i.root??`.`),_=m?t.resolve(g,m.root):void 0;if(h){if(!h.uuid||!h.moduleUuid)throw new w(`CONFIG_INVALID`,`packs.rp.uuid and packs.rp.moduleUuid are required.`);if(h.root===void 0)throw new w(`CONFIG_INVALID`,`packs.rp.root is required when packs.rp is configured.`);if(h.packScope!==void 0&&!te.includes(h.packScope))throw new w(`CONFIG_INVALID`,`packs.rp.packScope must be one of ${te.map(e=>`"${e}"`).join(`, `)}.`,{details:{packScope:h.packScope}})}let v=m?.description??d,b=h?.description??d,{catalog:x,diagnostics:S}=$e(a,i.install?.dependencyCatalog??{}),ee=a.flatMap(e=>e.install?.dependencyResolvers??[]),C=tt(i.pack?.optimize),T=tt(i.copy?.optimize);return{root:i.root??y.root,configured:{root:i.root!==void 0,packOutDir:i.pack?.outDir!==void 0},name:l,version:u,...d===void 0?{}:{description:d},replace:ue(i.replace),target:o,plugins:a,...S.length>0?{pluginDiagnostics:S}:{},...i.manifestFormat===void 0?{}:{manifestFormat:i.manifestFormat},packs:{...m?{bp:{root:m.root,uuid:m.uuid,...m.moduleUuid===void 0?{}:{moduleUuid:m.moduleUuid},name:m.name??l,...v===void 0?{}:{description:v},...p&&_?{compile:et(p,_,g)}:{},manifest:rt(m.manifest),dependencies:m.dependencies??{},...m.achievement===void 0?{}:{achievement:m.achievement},include:m.include??[]}}:{},...h?{rp:{root:h.root,uuid:h.uuid,moduleUuid:h.moduleUuid,name:h.name??l,...b===void 0?{}:{description:b},manifest:rt(h.manifest),...h.pbr===void 0?{}:{pbr:h.pbr},...h.packScope===void 0?{}:{packScope:h.packScope},include:h.include??[]}}:{}},install:{registry:i.install?.registry??y.install.registry,saveTo:i.install?.saveTo??y.install.saveTo,packageManager:i.install?.packageManager??y.install.packageManager,runPackageManager:i.install?.runPackageManager??y.install.runPackageManager,updatePackageJson:i.install?.updatePackageJson??y.install.updatePackageJson,updateManifest:i.install?.updateManifest??y.install.updateManifest,dependencyCatalog:x,dependencyResolvers:[...ee,...i.install?.dependencyResolvers??[]]},build:{copy:i.build?.copy??y.build.copy,timing:i.build?.timing??y.build.timing},dev:{copy:i.dev?.copy??y.dev.copy,...i.dev?.watch?{watch:i.dev.watch}:{}},copy:{defaultTarget:i.copy?.defaultTarget??y.copy.defaultTarget,...i.copy?.name?{name:i.copy.name}:{},...i.copy?.include?{include:i.copy.include}:{},targets:i.copy?.targets??{},...T?{optimize:T}:{}},pack:{name:i.pack?.name??y.pack.name,outDir:i.pack?.outDir??y.pack.outDir,...C?{optimize:C}:{}},hooks:Qe(a,i.hooks)}}async function at(e,n){if(n){let t=E(e,n);return await r.access(t).catch(()=>{throw new w(`CONFIG_NOT_FOUND`,`Config not found: ${n}`,{details:{configPath:n}})}),t}for(let n of C){let i=t.join(e,n);try{return await r.access(i),i}catch{}}throw new w(`CONFIG_NOT_FOUND`,`No bepack.config.ts, bepack.config.mjs, or bepack.config.js found.`,{details:{cwd:e}})}async function ot(t){try{if(t.endsWith(`.ts`))try{return await import(`${e(t).href}?t=${Date.now()}`)}catch{let e=st(await r.readFile(t,`utf8`));return await import(`data:text/javascript;base64,${Buffer.from(e,`utf8`).toString(`base64`)}`)}return await import(`${e(t).href}?t=${Date.now()}`)}catch(e){throw new w(`CONFIG_INVALID`,`Failed to load config: ${e instanceof Error?e.message:String(e)}`,{details:{file:t},suggestions:[`Use bepack.config.mjs/js for complex config logic.`,`Keep bepack.config.ts free of TypeScript-only runtime syntax.`]})}}function st(e){return e.replace(/^\s*import\s+type\s+[^;]+;\s*$/gm,``).replace(/\s+satisfies\s+[A-Za-z_$][\w$<>,\s.[\]|&{}]*/g,``).replace(/\((\s*[A-Za-z_$][\w$]*)\s*:\s*[^)=]+?\)\s*=>/g,`($1) =>`)}async function ct(e,t){for(let n of e.plugins??[])if(n.configResolved)try{await n.configResolved({cwd:t,config:e})}catch(e){throw new w(`PLUGIN_FAILED`,`Plugin ${n.name} configResolved hook failed: ${e instanceof Error?e.message:String(e)}`)}}async function lt(e){let n=t.resolve(e.cwd),r=await at(n,e.configPath),i=await ot(r);if(i.default===void 0)throw new w(`CONFIG_INVALID`,`Config must use default export.`,{details:{file:r}});let a=it(i.default,e.overrides,n);return await ct(a,n),{config:a,path:r,cwd:n}}var ut=/* @__PURE__ */ v((/* @__PURE__ */ g(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c})))(),1);function V(e){return{...Re,...e.install.dependencyCatalog}}function dt(e,t){let n=e[t];if(!n)throw new w(`UNSUPPORTED_DEPENDENCY`,`${t} is not a managed dependency. Add it to install.dependencyCatalog or remove it from packs.bp.dependencies.`,{details:{package:t}});return n}function ft(e){return`${JSON.stringify(e,null,4)}\n`}async function pt(e){try{return await r.access(e),!0}catch{return!1}}async function mt(e){await r.mkdir(e,{recursive:!0})}async function ht(e,n){await mt(t.dirname(e)),await r.writeFile(e,ft(n),`utf8`)}function gt(e){return Array.isArray(e)&&e.length===3&&typeof e[0]==`number`&&typeof e[1]==`number`&&typeof e[2]==`number`}function _t(e){return typeof e==`string`&&/^\d+\.\d+\.\d+$/.test(e)}function H(e){return e===3?_t:gt}function U(e,t){return e===3?`${t} must be SemVer string like "x.y.z" (format 3)`:`${t} must be [number, number, number] (format 2)`}const vt=[e=>e.format_version===void 0?`format_version is required`:null,e=>e.header?null:`header is required`,e=>e.header&&!e.header.name?`header.name is required`:null,e=>e.header&&!e.header.uuid?`header.uuid is required`:null,e=>e.header?H(e.format_version)(e.header.version)?null:U(e.format_version,`header.version`):null,e=>e.header?H(e.format_version)(e.header.min_engine_version)?null:U(e.format_version,`header.min_engine_version`):null,e=>e.modules!==void 0&&!Array.isArray(e.modules)?`modules must be an array`:null,(e,t)=>{if(!Array.isArray(e.modules))return null;let n=e.modules.some(e=>e?.type===`resources`),r=[];return t===`rp`&&!n&&r.push(`RP manifest must have a resources module`),r.length>0?r:null},e=>{if(!Array.isArray(e.modules))return null;let t=H(e.format_version),n=[];for(let r=0;r<e.modules.length;r++){let i=e.modules[r];i&&i.version!==void 0&&i.version!==null&&!t(i.version)&&n.push(`modules[${r}] (uuid: ${i.uuid??`unknown`}): ${U(e.format_version,`version`)}`)}return n.length>0?n:null},e=>e.dependencies!==void 0&&!Array.isArray(e.dependencies)?`dependencies must be an array`:null,e=>{if(!Array.isArray(e.dependencies))return null;let t=H(e.format_version),n=[];for(let r=0;r<e.dependencies.length;r++){let i=e.dependencies[r];if(!i){n.push(`dependencies[${r}] is invalid`);continue}`uuid`in i&&i.uuid&&!t(i.version)&&n.push(`dependencies[${r}] (uuid: ${i.uuid}): ${U(e.format_version,`version`)}`),`module_name`in i&&i.module_name&&typeof i.version!=`string`&&n.push(`dependencies[${r}] (module_name: ${i.module_name}): version must be a string`)}return n.length>0?n:null},e=>e.capabilities===void 0?null:Array.isArray(e.capabilities)?e.capabilities.every(e=>typeof e==`string`)?null:`capabilities must be an array of strings`:`capabilities must be an array`,e=>e.metadata!==void 0&&(typeof e.metadata!=`object`||e.metadata===null)?`metadata must be an object`:null];function yt(e,t){let n=[];for(let r of vt){let i=r(e,t);i!==null&&(Array.isArray(i)?n.push(...i):n.push(i))}if(n.length>0)throw new w(`MANIFEST_INVALID`,`Manifest validation failed: ${n.join(`; `)}`)}function W(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:{...e}}function G(e){return Array.isArray(e)?e:[]}function bt(e){if(!(e&&Object.keys(e).length===0))return e}var K=class{static async read(e){if(!await pt(e))return;let t=await r.readFile(e,`utf8`);try{return W(JSON.parse(t))}catch{throw new w(`MANIFEST_INVALID`,`Invalid JSON in manifest: ${e}`)}}static async write(e,t,n){yt(t,n),await ht(e,t)}};const xt=[1,21,0],St=[1,0,0];var Ct=class{config;version;versionStr;depManager;constructor(e,t){this.config=e,this.version=ye(e.version),this.versionStr=e.version,this.depManager=t}buildBp(e){let t=this.requireBp(),n=W(e);this.depManager.validateBpDependencies();let r=this.getWriteFormatVersion(n),i=t.manifest.merge===`clean`?this.buildCleanBp(t,r):this.buildPreserveBp(n,t,r);return this.applyAchievementMetadata(i,t),i}buildRp(e){let t=this.requireRp(),n=W(e),r=this.getWriteFormatVersion(n),i=t.manifest.merge===`clean`?this.buildCleanRp(t,r):this.buildPreserveRp(n,t,r);return this.applyPbrCapability(i,t),i}buildPreserveBp(e,t,n){return{...e,format_version:n,header:this.buildBpHeader(e,t,n),...t.moduleUuid?{modules:this.replaceManagedBpModules(e.modules,t,n)}:e.modules?{modules:e.modules}:{},dependencies:this.depManager.replaceBpDependencies(e.dependencies,this.config.packs.rp?.uuid,n)}}buildPreserveRp(e,t,n){return{...e,format_version:n,header:this.buildRpHeader(e,t,n),modules:this.replaceManagedRpModules(e.modules,t,n),dependencies:this.depManager.replaceRpDependencies(e.dependencies,this.config.packs.bp?.uuid,n)}}buildCleanBp(e,t){return{format_version:t,header:this.buildBpHeaderClean(e,t),...e.moduleUuid?{modules:this.buildCleanBpModules(e,t)}:{},dependencies:this.depManager.buildBpDependenciesClean(t,this.config.packs.rp?.uuid,e.manifest.extraDependencies)}}buildCleanRp(e,t){return{format_version:t,header:this.buildRpHeaderClean(e,t),modules:this.buildCleanRpModules(e,t),dependencies:this.depManager.buildRpDependenciesClean(t,this.config.packs.bp?.uuid,e.manifest.extraDependencies)}}buildBpHeaderClean(e,t){return{...e.manifest.extraHeader,name:e.name,...e.description===void 0?{}:{description:e.description},uuid:e.uuid,version:this.getVersionFor(t),min_engine_version:e.manifest.minEngineVersion===void 0?this.defaultMinEngineVersion(t):this.configMinEngineVersion(e.manifest.minEngineVersion,t)}}buildRpHeaderClean(e,t){return{...e.manifest.extraHeader,name:e.name,...e.description===void 0?{}:{description:e.description},uuid:e.uuid,...e.packScope===void 0?{}:{pack_scope:e.packScope},version:this.getVersionFor(t),min_engine_version:e.manifest.minEngineVersion===void 0?this.defaultMinEngineVersion(t):this.configMinEngineVersion(e.manifest.minEngineVersion,t)}}buildCleanBpModules(e,t){return[...e.moduleUuid?[this.createScriptModule(e,t)]:[],...e.manifest.extraModules]}buildCleanRpModules(e,t){return[this.createResourcesModule(e,t),...e.manifest.extraModules]}buildBpHeader(e,t,n){return{...e.header??{},name:t.name,...t.description===void 0?{}:{description:t.description},uuid:t.uuid,version:this.getVersionFor(n),min_engine_version:this.normalizeMinEngineVersion(e.header?.min_engine_version,n,t.manifest.minEngineVersion)}}buildRpHeader(e,t,n){return{...e.header??{},name:t.name,...t.description===void 0?{}:{description:t.description},uuid:t.uuid,...t.packScope===void 0?{}:{pack_scope:t.packScope},version:this.getVersionFor(n),min_engine_version:this.normalizeMinEngineVersion(e.header?.min_engine_version,n,t.manifest.minEngineVersion)}}getScriptEntry(){let e=this.config.packs.bp?.compile;return e?`${e.scriptOutputDir}/${t.basename(e.entry,t.extname(e.entry))}.js`:`scripts/main.js`}isManagedBpModule(e,t){if(e.type!==`script`||e.language!==`javascript`)return!1;let n=this.getScriptEntry();return e.uuid===t.moduleUuid||e.entry===n}isManagedRpModule(e,t){return e.type===`resources`&&e.uuid===t.moduleUuid}createScriptModule(e,t){return{type:`script`,language:`javascript`,uuid:e.moduleUuid,version:this.getModuleVersion(t),entry:this.getScriptEntry()}}createResourcesModule(e,t){return{type:`resources`,uuid:e.moduleUuid,version:this.getModuleVersion(t)}}replaceManagedBpModules(e,t,n){return[...G(e).filter(e=>!this.isManagedBpModule(e,t)),this.createScriptModule(t,n)]}replaceManagedRpModules(e,t,n){return[...G(e).filter(e=>!this.isManagedRpModule(e,t)),this.createResourcesModule(t,n)]}applyAchievementMetadata(e,t){if(t.achievement===!0)e.metadata={...e.metadata??{},product_type:`addon`};else if(t.achievement===!1&&e.metadata){let t={...e.metadata};delete t.product_type;let n=bt(t);n?e.metadata=n:delete e.metadata}}applyPbrCapability(e,t){if(t.pbr===!0){let t=G(e.capabilities);e.capabilities=t.includes(`pbr`)?t:[...t,`pbr`]}else if(t.pbr===!1){let t=G(e.capabilities).filter(e=>e!==`pbr`);t.length>0?e.capabilities=t:delete e.capabilities}}getVersionFor(e){return e===3?this.versionStr:this.version}getModuleVersion(e){return e===3?`1.0.0`:St}getWriteFormatVersion(e){return this.config.manifestFormat===void 0?e.format_version??2:this.config.manifestFormat}normalizeMinEngineVersion(e,t,n){if(n!==void 0)return this.configMinEngineVersion(n,t);if(e==null)return this.defaultMinEngineVersion(t);if(Array.isArray(e))return t===3?e.join(`.`):e;if(typeof e==`string`){if(t===2){let t=this.stringToVersionTuple(e);if(t)return t}return e}return this.defaultMinEngineVersion(t)}configMinEngineVersion(e,t){return t===3?e:this.stringToVersionTuple(e)??this.defaultMinEngineVersion(t)}defaultMinEngineVersion(e){return e===3?`1.21.0`:xt}stringToVersionTuple(e){let t=e.split(`.`).map(Number);if(t.length===3&&t.every(e=>!Number.isNaN(e)))return t}requireBp(){if(!this.config.packs.bp)throw new w(`CONFIG_INVALID`,`packs.bp is required to build the BP manifest.`);return this.config.packs.bp}requireRp(){if(!this.config.packs.rp)throw new w(`CONFIG_INVALID`,`packs.rp is required to build the RP manifest.`);return this.config.packs.rp}},wt=class e{config;catalog;installVersions;manifestVersions;version;versionStr;dependencyDiagnostics=[];constructor(e,t,n={}){this.config=e,this.catalog=t,this.installVersions=n.install??{},this.manifestVersions=n.manifest??{},this.version=ye(e.version),this.versionStr=e.version}static isAllowedSpecifier(e){return e===`stable`||e===`beta`||e===`preview`||/^\d+\.\d+\.\d+(?:[-.][0-9A-Za-z.-]+)?$/.test(e)}static resolveVersion(t){return e.resolveVersionDetail(t).version}static resolveVersionDetail(e){let{specifier:t,target:n,resolvedVersion:r,manifestVersion:i}=e;if(t===`stable`){if(r)return{version:r,source:`install`};if(i)return{version:i,source:`manifest`};throw new w(`DEPENDENCY_REQUIRES_INSTALL`,"Run `bepack install` to resolve stable manifest dependencies.",{details:{specifier:t,target:n}})}if(t===`beta`){if(xe(n))return{version:`beta`,source:`config`};if(r)return{version:r,source:`install`};if(i)return{version:i,source:`manifest`};throw new w(`DEPENDENCY_REQUIRES_INSTALL`,`Run \`bepack install\` to resolve manifest dependencies for target ${n}.`,{details:{target:n}})}if(t===`preview`){if(r)return{version:r,source:`install`};if(i)return{version:i,source:`manifest`};throw new w(`DEPENDENCY_REQUIRES_INSTALL`,`Run \`bepack install\` to resolve preview manifest dependencies for target ${n}.`,{details:{specifier:t,target:n}})}return{version:t,source:`config`}}static isAchievementCompatible(e){return e!==`beta`&&e!==`preview`}validateBpDependencies(){if(this.config.packs.bp){for(let[t,n]of Object.entries(this.config.packs.bp.dependencies)){if(!this.catalog[t]){let e=Object.keys(this.catalog),n=e.length>0?[`Managed packages: ${e.join(`, `)}.`,`Add a missing package to install.dependencyCatalog, or remove it from packs.bp.dependencies.`]:[`No managed packages are available. Extend install.dependencyCatalog to add one.`];throw new w(`UNSUPPORTED_DEPENDENCY`,`${t} is not a managed dependency.`,{details:{package:t},suggestions:n})}if(!e.isAllowedSpecifier(n))throw new w(`DEPENDENCY_VERSION_INVALID`,`${t} dependency version is invalid: ${n}`,{details:{package:t,specifier:n}})}if(this.config.packs.bp.achievement){for(let[t,n]of Object.entries(this.config.packs.bp.dependencies))if(!e.isAchievementCompatible(n))throw new w(`ACHIEVEMENT_REQUIRES_STABLE_API`,`${t}: achievement requires stable Script API dependencies (${n} is not allowed).`)}}}isManagedBpDependency(e){return!!(`module_name`in e&&typeof e.module_name==`string`&&this.catalog[e.module_name]?.manifest||`uuid`in e&&typeof e.uuid==`string`&&this.config.packs.rp?.uuid===e.uuid)}isManagedRpDependency(e,t){return t!==void 0&&`uuid`in e&&typeof e.uuid==`string`&&e.uuid===t}buildManagedDependencies(){if(this.dependencyDiagnostics.length=0,!this.config.packs.bp)return[];let t=[];for(let[n,r]of Object.entries(this.config.packs.bp.dependencies)){if(!this.catalog[n]?.manifest)continue;let i=e.resolveVersionDetail({specifier:r,target:this.config.target,resolvedVersion:this.installVersions[n],manifestVersion:this.manifestVersions[n]});t.push({module_name:n,version:i.version}),this.dependencyDiagnostics.push({name:n,specifier:r,version:i.version,source:i.source})}return t}getDependencyDiagnostics(){return this.dependencyDiagnostics}getFormatAwareVersion(e){return(e??this.config.manifestFormat??2)===3?this.versionStr:this.version}replaceBpDependencies(e,t,n){let r=G(e).filter(e=>!this.isManagedBpDependency(e)),i=this.buildManagedDependencies();return t&&i.push({uuid:t,version:this.getFormatAwareVersion(n)}),[...r,...i]}replaceRpDependencies(e,t,n){let r=G(e).filter(e=>!this.isManagedRpDependency(e,t));return t?[...r,{uuid:t,version:this.getFormatAwareVersion(n)}]:r}buildBpDependenciesClean(e,t,n){let r=this.buildManagedDependencies();return t&&r.push({uuid:t,version:this.getFormatAwareVersion(e)}),[...r,...n]}buildRpDependenciesClean(e,t,n){let r=[];return t&&r.push({uuid:t,version:this.getFormatAwareVersion(e)}),[...r,...n]}};const q=ut.default.createColors(process.env.NO_COLOR===void 0&&process.env.FORCE_COLOR!==`0`);async function Tt(e){let n=V(e.config),r=e.config.packs.bp?ce(e.cwd,e.config):void 0,i=r?await K.read(r):void 0,a=Dt(i,n),o=new wt(e.config,n,{...e.resolvedDeps?{install:e.resolvedDeps}:{},manifest:a}),s=new Ct(e.config,o),c={};if(e.config.packs.bp){let n=i!==void 0;e.config.manifestFormat===2&&i?.format_version===3&&(e.logger?.warn??console.warn)(`Warning: config manifestFormat is 2, but existing manifest uses format_version 3. format_version 2 does not support string versions; any string versions in the existing manifest will be preserved as-is.`);let l=s.buildBp(i),u=o.getDependencyDiagnostics().map(e=>({module_name:e.name,specifier:e.specifier,version:e.version,source:e.source,...a[e.name]===void 0?{}:{previous:a[e.name]}}));e.dryRun||await K.write(r,l,`bp`),Et(u,e.logger),c.bpManifest={path:D(t.relative(e.cwd,r)),updated:!0,existed:n,dependencies:u}}if(e.config.packs.rp){let n=le(e.cwd,e.config),r=await K.read(n),i=r!==void 0,a=s.buildRp(r);e.dryRun||await K.write(n,a,`rp`),c.rpManifest={path:D(t.relative(e.cwd,n)),updated:!0,existed:i}}return c}function Et(e,t){if(t)for(let n of e){let e=q.cyan(n.module_name);n.previous!==void 0&&n.previous!==n.version?t.info(`manifest ${e}: ${n.previous} ${q.dim(`->`)} ${n.version} (specifier ${JSON.stringify(n.specifier)}, ${n.source})`):n.source===`manifest`?t.info(`manifest ${e} ${n.version} ${q.dim(`kept from manifest`)} (specifier ${JSON.stringify(n.specifier)}) — run \`bepack install\` to refresh`):t.verbose(`manifest ${e} ${n.version} (specifier ${JSON.stringify(n.specifier)}, ${n.source})`)}}function Dt(e,t){let n={};for(let r of e?.dependencies??[])`module_name`in r&&typeof r.module_name==`string`&&typeof r.version==`string`&&t[r.module_name]?.manifest&&r.version!==`stable`&&(n[r.module_name]=r.version);return n}function Ot(e,t){e?.install?e.install(t):e?.info(`[Install] ${t}`)}var kt=class{registry;logger;cache=/* @__PURE__ */ new Map;constructor(e,t){this.registry=e,this.logger=t}async metadata(e){let t=this.packageUrl(e),n=this.cache.get(t);if(n)return this.logger?.verbose(`Using cached metadata for ${e}`),n;Ot(this.logger,`fetching ${e} metadata from ${this.registry}`);let r=await fetch(t);if(!r.ok)throw new w(`SAPI_VERSION_NOT_FOUND`,`Cannot fetch ${e} versions from registry.`,{details:{package:e,registry:this.registry,status:r.status}});let i=await r.json();return this.cache.set(t,i),this.logger?.verbose(`Fetched ${e} metadata (${Object.keys(i.versions??{}).length} versions)`),i}versions(e){return Object.keys(e.versions??{})}async versionsOf(e){return this.versions(await this.metadata(e))}distTag(e,t){let n=e[`dist-tags`]?.[t];return n&&e.versions?.[n]?n:void 0}packageUrl(e){return`${this.registry.replace(/\/$/,``)}/${encodeURIComponent(e).replace(/^%40/,`@`)}`}};function At(e){return t=>{e?.install?e.install(t):e?.info(`[Install] ${t}`)}}var jt=class{config;logger;npm;catalog;pkgResolver;log;constructor(e,t){this.config=e,this.logger=t,this.npm=new kt(e.install.registry,t),this.catalog=V(e),this.pkgResolver=new N(this.npm,t),this.log=At(t)}async resolveAll(){let e={},t=this.config.packs.bp?.dependencies;if(!t||Object.keys(t).length===0)return this.log(`no BP dependencies to resolve`),e;this.log(`resolving dependencies for target ${this.config.target}`);for(let[n,r]of Object.entries(t)){let t=dt(this.catalog,n),i=await this.resolveOne(n,r,t),a=t.manifest??!1;e[n]={specifier:r,packageVersion:i.packageVersion,manifestVersion:a?i.manifestVersion??i.packageVersion:null,manifest:a,external:a,resolver:typeof t.resolver==`string`?t.resolver:t.resolver.name},this.log(`${n}: ${r} -> package ${e[n].packageVersion}, manifest ${e[n].manifestVersion}`)}return this.logger?.verbose(`Dependency resolution complete`),e}async resolveOne(e,t,n){let r={packageName:e,specifier:t,target:this.config.target,entry:n,config:this.config};await this.runDependencyHooks(`beforeResolveDependency`,r);let i=await Ve.fromConfig(this.config.install.dependencyResolvers,this.config.plugins??[]).resolve({packageName:e,specifier:t,target:this.config.target,entry:n,config:this.config,npm:this.npm,...this.logger?{logger:this.logger}:{}});return await this.runDependencyHooks(`afterResolveDependency`,{...r,result:i}),i}async runDependencyHooks(e,t){for(let n of this.config.plugins??[]){let r=n.install?.hooks?.[e];if(r)try{await r(t)}catch(t){throw new w(`PLUGIN_FAILED`,`Plugin ${n.name} ${e} hook failed: ${t instanceof Error?t.message:String(t)}`)}}}};async function Mt(e,t){return new jt(e,t).resolveAll()}const Nt=`<profile>`;function J(e,t,n){throw new w(`PROFILE_INVALID`,`${e}: ${t}`,{...n===void 0?{}:{details:n},suggestions:[`Check that the file was produced by a V8 profiler and is valid JSON.`]})}function Y(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function X(e,t,n){return(typeof e!=`number`||!Number.isFinite(e))&&J(n,`${t} must be a finite number`),e}function Z(e,t,n){let r=X(e,t,n);return Number.isInteger(r)||J(n,`${t} must be an integer`),r}function Pt(e,t,n,r){let i=e[t];if(i!==void 0)return X(i,`${n}.${t}`,r)}function Ft(e,t,n,r){let i=e[t];if(i!==void 0)return Z(i,`${n}.${t}`,r)}function It(e,t,n){Y(e)||J(n,`${t} must be an object`);let r=e.functionName??``;typeof r!=`string`&&J(n,`${t}.functionName must be a string`);let i=e.url??``;typeof i!=`string`&&J(n,`${t}.url must be a string`);let a=e.scriptId,o;a===void 0?o=`0`:typeof a==`number`&&Number.isFinite(a)?o=String(a):typeof a==`string`?o=a:J(n,`${t}.scriptId must be a string`);let s=e.lineNumber??-1;(typeof s!=`number`||!Number.isFinite(s))&&J(n,`${t}.lineNumber must be a finite number`);let c=e.columnNumber??-1;return(typeof c!=`number`||!Number.isFinite(c))&&J(n,`${t}.columnNumber must be a finite number`),{functionName:r,scriptId:o,url:i,lineNumber:s,columnNumber:c}}function Lt(e,t,n){let r=`nodes[${t}]`;Y(e)||J(n,`${r} must be an object`);let i=Z(e.id,`${r}.id`,n),a=It(e.callFrame,`${r}.callFrame`,n),o=Ft(e,`hitCount`,r,n),s=Ft(e,`locationId`,r,n),c;return e.children!==void 0&&(Array.isArray(e.children)||J(n,`${r}.children must be an array`),c=e.children.map((e,t)=>Z(e,`${r}.children[${t}]`,n))),{id:i,callFrame:a,...o===void 0?{}:{hitCount:o},...c===void 0?{}:{children:c},...s===void 0?{}:{locationId:s}}}function Rt(e,t=Nt){Y(e)||J(t,`profile root must be a JSON object`),Array.isArray(e.nodes)||J(t,`missing nodes array`),Array.isArray(e.samples)||J(t,`missing samples array`),Array.isArray(e.timeDeltas)||J(t,`missing timeDeltas array`);let n=e.nodes.map((e,n)=>Lt(e,n,t)),r=/* @__PURE__ */ new Set;for(let e of n)r.has(e.id)&&J(t,`duplicate node id ${e.id}`),r.add(e.id);for(let e of n)for(let n of e.children??[])r.has(n)||J(t,`node ${e.id} references unknown child node ${n}`);e.timeDeltas.length!==e.samples.length&&J(t,`samples and timeDeltas must have the same length (${e.samples.length} != ${e.timeDeltas.length})`);let i=e.samples.map((e,n)=>{let i=Z(e,`samples[${n}]`,t);return r.has(i)||J(t,`samples[${n}] references unknown node ${i}`),i}),a=e.timeDeltas.map((e,n)=>{let r=X(e,`timeDeltas[${n}]`,t);return r<0&&J(t,`timeDeltas[${n}] must not be negative`),r}),o=Pt(e,`startTime`,`profile`,t),s=Pt(e,`endTime`,`profile`,t);return{nodes:n,samples:i,timeDeltas:a,...o===void 0?{}:{startTime:o},...s===void 0?{}:{endTime:s}}}function zt(e,t,n){let r=[],i=/* @__PURE__ */ new Set,a=e.id;for(;a!==void 0&&!i.has(a);){i.add(a);let e=n.get(a);if(!e)break;r.push(e),a=t.get(a)}return r}function Bt(e){let t=e[0],n=e[e.length-1];if(!t||!n)throw Error(`cannot create a burst from an empty sample run`);let r=e.reduce((e,t)=>e+t.deltaMs,0);return{startMs:t.timeMs,endMs:n.timeMs,spanMs:n.timeMs-t.timeMs,busyMs:r,samples:e.length,run:e}}function Vt(e,t){let n=[],r=[];for(let i of e){if(i.active){r.push(i);continue}r.length>0&&r.length>=t&&n.push(Bt(r)),r=[]}return r.length>0&&r.length>=t&&n.push(Bt(r)),n}function Ht(e,t,n){let r=Rt(e,t),i=n.gapMs??5,a=n.minSamples??20,o=new Map(r.nodes.map(e=>[e.id,e])),s=/* @__PURE__ */ new Map;for(let e of r.nodes)for(let t of e.children??[])s.set(t,e.id);let c=i*1e3,l=0,u=[];for(let e=0;e<r.samples.length;e++){let t=r.timeDeltas[e]??0;l+=t;let n=o.get(r.samples[e]??-1);n&&u.push({index:e,timeMs:l/1e3,deltaMs:t/1e3,active:t<=c,node:n,stack:zt(n,s,o)})}let d=u.filter(e=>e.active),f=u.filter(e=>!e.active);return{file:t,raw:r,samples:u,activeSamples:d,gapSamples:f,busyMs:d.reduce((e,t)=>e+t.deltaMs,0),idleMs:f.reduce((e,t)=>e+t.deltaMs,0),durationMs:l/1e3,gapMs:i,minSamples:a,bursts:Vt(u,a)}}function Ut(e,t={}){return Ht(e,Nt,t)}async function Wt(e,t={}){let n;try{n=await c(e,`utf8`)}catch(t){throw new w(`PROFILE_READ_FAILED`,`Cannot read profile ${e}: ${t instanceof Error?t.message:String(t)}`,{details:{file:e},suggestions:[`Check the path and that the file is readable.`]})}let r;try{r=JSON.parse(n)}catch(t){J(e,`not valid JSON: ${t instanceof Error?t.message:String(t)}`)}return Ht(r,e,t)}const Gt=10485760;async function Kt(e,n={}){let r=nn(n.command),i=n.tsconfigPath??`tsconfig.json`,a=t.resolve(e,i),o=await pt(a),c=fe(n.command,n.args??[],r?{tsconfigPath:a,incremental:!!n.incremental,useNpx:!!n.useNpx,...n.tsBuildInfoFile?{tsBuildInfoFile:n.tsBuildInfoFile}:{}}:{});if(!o){if(r)throw new w(`TYPECHECK_FAILED`,`TypeScript config not found: ${i}. Create it or run build with --skip-typecheck.`,{details:{path:i,command:c.label}});n.warn?.(`TypeScript config not found: ${i} — running \`${c.label}\` anyway.`)}n.incremental&&n.tsBuildInfoFile&&r&&await s(t.dirname(n.tsBuildInfoFile),{recursive:!0});let u=me(c),d=await Zt(c.command,e);if(!d)throw new w(`TYPECHECK_FAILED`,`Cannot find ${c.command}.`,{details:{command:u,label:c.label},suggestions:$(c)});let f=process.platform===`win32`&&/\.(cmd|bat)$/i.test(d),p=f?qt(d,c.args):d,m=f?[]:c.args,h;try{h=l(p,m,{cwd:e,windowsHide:!0,shell:f,stdio:[`ignore`,`pipe`,`pipe`]})}catch(e){throw new w(`TYPECHECK_FAILED`,`Cannot start ${u}.`,{details:{command:u,label:c.label,cause:e instanceof Error?e.message:String(e)},suggestions:$(c)})}return await new Promise((e,t)=>{let r=``,i=``,a=0,o=e=>{let t=Buffer.isBuffer(e)?e:Buffer.from(String(e)),n=Gt-a;return n<=0?``:t.length<=n?(a+=t.length,t.toString(`utf8`)):(a=Gt,t.subarray(0,n).toString(`utf8`))};h.stdout?.on(`data`,e=>{r+=o(e),n.quiet||process.stdout.write(e)}),h.stderr?.on(`data`,e=>{i+=o(e),n.quiet||process.stderr.write(e)}),h.on(`error`,e=>{t(new w(`TYPECHECK_FAILED`,`Cannot start ${u}.`,{details:{command:u,label:c.label,cause:e.message},suggestions:$(c)}))}),h.on(`close`,n=>{if(n===0){e();return}let a=[r.trim(),i.trim()].filter(Boolean).join(`
|
|
2
|
+
`),o=Xt(a);t(new w(`TYPECHECK_FAILED`,o?`Cannot find ${c.command}.`:`${u} failed.`,{details:{command:u,label:c.label,exitCode:typeof n==`number`?n:null,...a?{diagnostics:a}:{}},...o?{suggestions:$(c)}:{}}))})}),{...c,commandLine:u}}function qt(e,t){let n=process.platform===`win32`?Jt:Yt;return[e,...t].map(n).join(` `)}function Jt(e){if(e===``)return`""`;if(!/[\s"&|<>^()!,;=]/.test(e))return e.replace(/%/g,`^%`);let t=`"`,n=0;for(let r of e){if(r===`\\`){n+=1;continue}if(r===`%`){t+=`\\`.repeat(n*2)+`"^%"`,n=0;continue}if(r===`"`){t+=`\\`.repeat(n*2+1)+`"`,n=0;continue}t+=`\\`.repeat(n)+r,n=0}return t+=`\\`.repeat(n*2)+`"`,t}function Yt(e){return e===``?`''`:/[\s"'\\$`!*?[\]{}();&|<>~#]/.test(e)?`'${e.replace(/'/g,`'\\''`)}'`:e}function Xt(e){return e.includes(`ENOENT`)||e.includes(`is not recognized`)||e.includes(`不是内部或外部命令`)||e.includes(`command not found`)}async function Zt(e,n){let r=e.includes(`/`)||e.includes(`\\`);if(t.isAbsolute(e)||r){let r=t.resolve(n,e);if(await Q(r)){if(process.platform===`win32`&&!Qt(r)){let e=await en(r);if(e)return e}return r}return}let i=process.env.PATH??``,a=process.platform===`win32`?(process.env.PATHEXT??`.COM;.EXE;.BAT;.CMD`).split(`;`).filter(Boolean):[``];for(let r of i.split(t.delimiter)){let i=r?t.resolve(n,r):n,o=t.join(i,e);if((process.platform!==`win32`||t.extname(e))&&await Q(o))return o;for(let n of a){if(n&&t.extname(e))continue;let r=t.join(i,e+n);if(await Q(r))return r}}}async function Q(e){try{return await o(e,n.X_OK),!0}catch{return!1}}function Qt(e){let n=t.extname(e).toLowerCase();return n===`.cmd`||n===`.bat`?!1:n!==``||!$t(e)}function $t(e){try{let t=i(e);return t.subarray(0,t.indexOf(10)).toString(`utf8`).startsWith(`#!`)}catch{return!1}}async function en(e){let n=t.dirname(e),r=t.basename(e);for(let e of tn){let i=t.join(n,r+e);if(await Q(i))return i}}const tn=[`.cmd`,`.bat`,`.exe`];function $(e){return[`Install the checker so \`${e.command}\` is available, or point packs.bp.compile.typecheck.command at a command you do have (for example "bun check", "tsc-rs --noEmit", "npx tsc --noEmit").`,`Run with --skip-typecheck to build without checking (the bundle is still produced).`]}function nn(e){return typeof e!=`string`||e.trim()===``}export{Re as BUILTIN_DEPENDENCY_CATALOG,Be as BUILTIN_DEPENDENCY_RESOLVERS,Ye as BUILTIN_PLUGINS,w as BePackError,O as DEFAULT_TYPECHECK_COMMAND,Ve as DependencyResolverRegistry,jt as DependencyService,N as MinecraftPackageResolver,kt as NpmRegistryClient,Ut as analyzeCpuProfile,V as createDependencyCatalog,ee as defineConfig,ze as exactVersionResolver,me as formatTypecheckCommand,T as getConfiguredPacks,lt as loadConfig,Wt as loadCpuProfile,F as minecraftScriptApiBpResolver,P as minecraftScriptApiResolver,Fe as minecraftVanillaDataResolver,Te as packageVersionForSpecifier,Tt as patchManifest,Mt as resolveDependencies,fe as resolveTypecheck,Kt as runTypecheck,Je as sapiPro,M as satisfiesSemver,we as satisfiesSemverRange,k as tokenizeCommandLine};
|