@bepack/cli 0.1.0-beta.7 → 0.1.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { RolldownOptions } from "rolldown";
2
- //#region src/utils/npmRegistry.d.ts
3
- declare class NpmRegistryClient {
2
+ export declare class NpmRegistryClient {
4
3
  private readonly registry;
5
4
  private readonly logger?;
6
5
  private readonly cache;
@@ -11,8 +10,6 @@ declare class NpmRegistryClient {
11
10
  distTag(metadata: NpmPackageMetadata, tag: string): string | undefined;
12
11
  private packageUrl;
13
12
  }
14
- //#endregion
15
- //#region src/config/configTypes.d.ts
16
13
  type CommandName = "init" | "install" | "manifest" | "build" | "dev" | "copy" | "pack" | "config";
17
14
  /**
18
15
  * Script API dependency selector.
@@ -685,23 +682,15 @@ type PackInfo = {
685
682
  include: string[];
686
683
  };
687
684
  /** Iterate over all configured packs, returning uniform PackInfo objects. */
688
- declare function getConfiguredPacks(config: ResolvedConfig): PackInfo[];
689
- //#endregion
690
- //#region src/config/defaultConfig.d.ts
691
- declare function defineConfig(config: UserConfig): UserConfig;
692
- //#endregion
693
- //#region src/config/loadConfig.d.ts
694
- declare function loadConfig(options: LoadConfigOptions): Promise<{
685
+ export declare function getConfiguredPacks(config: ResolvedConfig): PackInfo[];
686
+ export declare function defineConfig(config: UserConfig): UserConfig;
687
+ export declare function loadConfig(options: LoadConfigOptions): Promise<{
695
688
  config: ResolvedConfig;
696
689
  path: string;
697
690
  cwd: string;
698
691
  }>;
699
- //#endregion
700
- //#region src/manifest/ManifestDepManager.d.ts
701
692
  /** 依赖版本来自哪一层,用于诊断输出。 */
702
693
  type DependencyVersionSource = "config" | "install" | "manifest";
703
- //#endregion
704
- //#region src/manifest/patchManifest.d.ts
705
694
  type PatchManifestOptions = {
706
695
  cwd: string;
707
696
  config: ResolvedConfig;
@@ -746,18 +735,12 @@ type PatchManifestResult = {
746
735
  * 现有 manifest 中的版本。版本发生变化或复用了旧值时都会打印说明,避免
747
736
  * 「build 悄悄写回旧版本」这种情况无从排查。
748
737
  */
749
- declare function patchManifest(options: PatchManifestOptions): Promise<PatchManifestResult>;
750
- //#endregion
751
- //#region src/constants/dependencyCatalog.d.ts
738
+ export declare function patchManifest(options: PatchManifestOptions): Promise<PatchManifestResult>;
752
739
  /** Built-in managed dependency catalog. Maps package names to resolver + manifest behavior. */
753
- declare const BUILTIN_DEPENDENCY_CATALOG: Record<string, DependencyCatalogEntry>;
754
- //#endregion
755
- //#region src/install/dependencyCatalog.d.ts
756
- declare function createDependencyCatalog(config: ResolvedConfig): Record<string, DependencyCatalogEntry>;
757
- //#endregion
758
- //#region src/install/MinecraftPackageResolver.d.ts
759
- declare function packageVersionForSpecifier(specifier: string): string;
760
- declare class MinecraftPackageResolver {
740
+ export declare const BUILTIN_DEPENDENCY_CATALOG: Record<string, DependencyCatalogEntry>;
741
+ export declare function createDependencyCatalog(config: ResolvedConfig): Record<string, DependencyCatalogEntry>;
742
+ export declare function packageVersionForSpecifier(specifier: string): string;
743
+ export declare class MinecraftPackageResolver {
761
744
  private readonly npm;
762
745
  private readonly logger?;
763
746
  constructor(npm: NpmRegistryClient, logger?: LoggerLike | undefined);
@@ -770,8 +753,6 @@ declare class MinecraftPackageResolver {
770
753
  /** Infer the concurrent stable version from a beta version string. */
771
754
  inferStableFromBeta(packageName: string, target: string, beta: string, metadata: NpmPackageMetadata): string;
772
755
  }
773
- //#endregion
774
- //#region src/install/DependencyService.d.ts
775
756
  type ResolvedDependency = {
776
757
  specifier: string;
777
758
  packageVersion: string;
@@ -780,7 +761,7 @@ type ResolvedDependency = {
780
761
  external: boolean;
781
762
  resolver: string;
782
763
  };
783
- declare class DependencyService {
764
+ export declare class DependencyService {
784
765
  readonly config: ResolvedConfig;
785
766
  readonly logger?: LoggerLike | undefined;
786
767
  readonly npm: NpmRegistryClient;
@@ -804,9 +785,7 @@ declare class DependencyService {
804
785
  private runDependencyHooks;
805
786
  }
806
787
  /** @deprecated Use `new DependencyService(config, logger).resolveAll()` instead. */
807
- declare function resolveDependencies(config: ResolvedConfig, logger?: LoggerLike): Promise<Record<string, ResolvedDependency>>;
808
- //#endregion
809
- //#region src/utils/semver.d.ts
788
+ export declare function resolveDependencies(config: ResolvedConfig, logger?: LoggerLike): Promise<Record<string, ResolvedDependency>>;
810
789
  /**
811
790
  * Checks Minecraft Script API compatibility, intentionally differing from
812
791
  * standard npm semver. The actual version must have the same major and an API
@@ -818,13 +797,11 @@ declare function resolveDependencies(config: ResolvedConfig, logger?: LoggerLike
818
797
  * prefix is accepted for peer-dependency ergonomics but does not impose npm's
819
798
  * usual upper bound.
820
799
  */
821
- declare function satisfiesSemver(version: string, requirement: string): boolean;
800
+ export declare function satisfiesSemver(version: string, requirement: string): boolean;
822
801
  /** @deprecated Use satisfiesSemver; retained for plugins using the earlier name. */
823
- declare const satisfiesSemverRange: typeof satisfiesSemver;
824
- //#endregion
825
- //#region src/install/resolvers/registry.d.ts
826
- declare const BUILTIN_DEPENDENCY_RESOLVERS: DependencyResolverRule[];
827
- declare class DependencyResolverRegistry {
802
+ export declare const satisfiesSemverRange: typeof satisfiesSemver;
803
+ export declare const BUILTIN_DEPENDENCY_RESOLVERS: DependencyResolverRule[];
804
+ export declare class DependencyResolverRegistry {
828
805
  private readonly resolvers;
829
806
  private readonly pluginNames;
830
807
  constructor(resolvers: DependencyResolverRule[], plugins?: BePackPlugin[]);
@@ -833,36 +810,20 @@ declare class DependencyResolverRegistry {
833
810
  find(ctx: DependencyResolverContext): DependencyResolverRule;
834
811
  resolve(ctx: DependencyResolverContext): Promise<DependencyResolverResult>;
835
812
  }
836
- //#endregion
837
- //#region src/install/resolvers/minecraftScriptApi.d.ts
838
- declare const minecraftScriptApiResolver: DependencyResolverRule;
839
- //#endregion
840
- //#region src/install/resolvers/minecraftScriptApiBp.d.ts
841
- declare const minecraftScriptApiBpResolver: DependencyResolverRule;
842
- //#endregion
843
- //#region src/install/resolvers/minecraftVanillaData.d.ts
844
- declare const minecraftVanillaDataResolver: DependencyResolverRule;
845
- //#endregion
846
- //#region src/install/resolvers/exact.d.ts
847
- declare const exactVersionResolver: DependencyResolverRule;
848
- //#endregion
849
- //#region src/plugins/sapiPro.d.ts
813
+ export declare const minecraftScriptApiResolver: DependencyResolverRule;
814
+ export declare const minecraftScriptApiBpResolver: DependencyResolverRule;
815
+ export declare const minecraftVanillaDataResolver: DependencyResolverRule;
816
+ export declare const exactVersionResolver: DependencyResolverRule;
850
817
  /**
851
818
  * Resolves sapi-pro against explicitly declared Minecraft Script API packages.
852
819
  * sapi-pro itself is package-only and is never written to manifest.json.
853
820
  */
854
- declare function sapiPro(): BePackPlugin;
855
- //#endregion
856
- //#region src/plugins/builtins.d.ts
821
+ export declare function sapiPro(): BePackPlugin;
857
822
  /** Factories for plugins that can be referenced by name in project configs. */
858
- declare const BUILTIN_PLUGINS: Record<string, () => BePackPlugin>;
859
- //#endregion
860
- //#region src/errors/codes.d.ts
823
+ export declare const BUILTIN_PLUGINS: Record<string, () => BePackPlugin>;
861
824
  declare const ERROR_CODES: readonly ["CONFIG_NOT_FOUND", "CONFIG_INVALID", "TARGET_INVALID", "TARGET_NOT_SUPPORTED", "UNSUPPORTED_DEPENDENCY", "DEPENDENCY_VERSION_INVALID", "DEPENDENCY_REQUIRES_INSTALL", "SAPI_VERSION_NOT_FOUND", "ACHIEVEMENT_REQUIRES_STABLE_API", "PACKAGE_JSON_NOT_FOUND", "PACKAGE_MANAGER_NOT_FOUND", "PACKAGE_MANAGER_FAILED", "MANIFEST_INVALID", "MANIFEST_GENERATE_FAILED", "MANIFEST_PATCH_FAILED", "VERSION_INVALID", "TYPECHECK_FAILED", "BUILD_FAILED", "DEV_NO_WATCH_TARGETS", "COPY_TARGET_NOT_FOUND", "COPY_FAILED", "PACK_FAILED", "HOOK_FAILED", "PLUGIN_FAILED", "CLI_ARGUMENT_INVALID", "CLI_ARGUMENT_CONFLICT", "PROFILE_INVALID", "PROFILE_READ_FAILED", "UNKNOWN_COMMAND"];
862
825
  type ErrorCode = (typeof ERROR_CODES)[number];
863
- //#endregion
864
- //#region src/errors/BePackError.d.ts
865
- declare class BePackError extends Error {
826
+ export declare class BePackError extends Error {
866
827
  readonly code: ErrorCode;
867
828
  readonly details: unknown | undefined;
868
829
  readonly suggestions: string[] | undefined;
@@ -871,8 +832,6 @@ declare class BePackError extends Error {
871
832
  suggestions?: string[];
872
833
  });
873
834
  }
874
- //#endregion
875
- //#region src/profile/types.d.ts
876
835
  interface CallFrame {
877
836
  functionName: string;
878
837
  scriptId: string;
@@ -934,14 +893,10 @@ interface CpuProfileOptions {
934
893
  gapMs?: number;
935
894
  minSamples?: number;
936
895
  }
937
- //#endregion
938
- //#region src/profile/analyze.d.ts
939
896
  /** Analyze an already-parsed profile object. */
940
- declare function analyzeCpuProfile(value: unknown, options?: CpuProfileOptions): CpuProfileAnalysis;
897
+ export declare function analyzeCpuProfile(value: unknown, options?: CpuProfileOptions): CpuProfileAnalysis;
941
898
  /** Read and analyze a `.cpuprofile` file. */
942
- declare function loadCpuProfile(file: string, options?: CpuProfileOptions): Promise<CpuProfileAnalysis>;
943
- //#endregion
944
- //#region src/build/typecheckers.d.ts
899
+ export declare function loadCpuProfile(file: string, options?: CpuProfileOptions): Promise<CpuProfileAnalysis>;
945
900
  /**
946
901
  * The default checker, used when the user configures none.
947
902
  *
@@ -950,7 +905,7 @@ declare function loadCpuProfile(file: string, options?: CpuProfileOptions): Prom
950
905
  * the exact command line is always visible in the config, the `--json` output and the
951
906
  * error messages, and BePack never has to guess how a third-party tool spells its flags.
952
907
  */
953
- declare const DEFAULT_TYPECHECK_COMMAND = "tsc --noEmit";
908
+ export declare const DEFAULT_TYPECHECK_COMMAND = "tsc --noEmit";
954
909
  /** A fully-resolved typecheck step: the executable plus its arguments. */
955
910
  type ResolvedTypecheck = {
956
911
  /** Executable to spawn. */
@@ -973,7 +928,7 @@ type ResolvedTypecheck = {
973
928
  * general escape character: Windows paths are full of backslashes, and any broader rule
974
929
  * silently rewrites them (`C:\tools\check.mjs` → `C:toolscheck.mjs`).
975
930
  */
976
- declare function tokenizeCommandLine(input: string): string[];
931
+ export declare function tokenizeCommandLine(input: string): string[];
977
932
  /**
978
933
  * Resolve the checker to run.
979
934
  *
@@ -981,7 +936,7 @@ declare function tokenizeCommandLine(input: string): string[];
981
936
  * can extend or override it. BePack adds nothing of its own to a custom command — include
982
937
  * the tsconfig flag in `args` yourself when the tool needs one.
983
938
  */
984
- declare function resolveTypecheck(command: TypecheckCommandSetting | undefined, args?: string[], options?: {
939
+ export declare function resolveTypecheck(command: TypecheckCommandSetting | undefined, args?: string[], options?: {
985
940
  tsconfigPath?: string;
986
941
  incremental?: boolean;
987
942
  tsBuildInfoFile?: string;
@@ -989,12 +944,10 @@ declare function resolveTypecheck(command: TypecheckCommandSetting | undefined,
989
944
  useNpx?: boolean;
990
945
  }): ResolvedTypecheck;
991
946
  /** Render the command line for logs, `--json` output and error details. */
992
- declare function formatTypecheckCommand(typecheck: {
947
+ export declare function formatTypecheckCommand(typecheck: {
993
948
  command: string;
994
949
  args: string[];
995
950
  }): string;
996
- //#endregion
997
- //#region src/build/runTypecheck.d.ts
998
951
  type TypecheckOptions = {
999
952
  quiet?: boolean;
1000
953
  /**
@@ -1025,8 +978,7 @@ type TypecheckOptions = {
1025
978
  * for the default `tsc` and a warning for everything else: a custom command may not need
1026
979
  * one at all (a formatter-style checker, a wrapper script, a tool with its own defaults).
1027
980
  */
1028
- declare function runTypecheck(cwd: string, options?: TypecheckOptions): Promise<ResolvedTypecheck & {
981
+ export declare function runTypecheck(cwd: string, options?: TypecheckOptions): Promise<ResolvedTypecheck & {
1029
982
  commandLine: string;
1030
983
  }>;
1031
- //#endregion
1032
- export { BUILTIN_DEPENDENCY_CATALOG, BUILTIN_DEPENDENCY_RESOLVERS, BUILTIN_PLUGINS, BePackError, type BePackPlugin, type BpCompileOptions, type BpCompileResolved, type BpConfig, type Burst, type ConfigResolvedHookContext, type CpuProfile, type CpuProfileAnalysis, type CpuProfileOptions, DEFAULT_TYPECHECK_COMMAND, type DependencyCatalogEntry, type DependencyResolveHookContext, type DependencyResolvedHookContext, type DependencyResolverContext, DependencyResolverRegistry, type DependencyResolverResult, type DependencyResolverRule, DependencyService, type HookContext, MinecraftPackageResolver, type NpmPackageMetadata, type NpmPackageVersionMetadata, NpmRegistryClient, type PackInfo, type PackOptimizeOptions, type PackOptimizeResolved, type PackScope, type PackType, type PatchManifestOptions, type PatchManifestResult, type PatchedManifestDependency, type PatchedManifestFile, type PluginDependencyHooks, type ProfileSample, type ReplaceBuiltins, type ReplaceOptions, type ReplaceValue, type ResolvedConfig, type ResolvedTypecheck, type RolldownCustomizeContext, type RolldownCustomizeFunction, type RolldownOverrides, type RpConfig, type TypecheckCommandSetting, type TypecheckConfig, type TypecheckOptions, type UserConfig, analyzeCpuProfile, createDependencyCatalog, defineConfig, exactVersionResolver, formatTypecheckCommand, getConfiguredPacks, loadConfig, loadCpuProfile, minecraftScriptApiBpResolver, minecraftScriptApiResolver, minecraftVanillaDataResolver, packageVersionForSpecifier, patchManifest, resolveDependencies, resolveTypecheck, runTypecheck, sapiPro, satisfiesSemver, satisfiesSemverRange, tokenizeCommandLine };
984
+ export type { BePackPlugin, BpCompileOptions, BpCompileResolved, BpConfig, Burst, ConfigResolvedHookContext, CpuProfile, CpuProfileAnalysis, CpuProfileOptions, DependencyCatalogEntry, DependencyResolveHookContext, DependencyResolvedHookContext, DependencyResolverContext, DependencyResolverResult, DependencyResolverRule, HookContext, NpmPackageMetadata, NpmPackageVersionMetadata, PackInfo, PackOptimizeOptions, PackOptimizeResolved, PackScope, PackType, PatchManifestOptions, PatchManifestResult, PatchedManifestDependency, PatchedManifestFile, PluginDependencyHooks, ProfileSample, ReplaceBuiltins, ReplaceOptions, ReplaceValue, ResolvedConfig, ResolvedTypecheck, RolldownCustomizeContext, RolldownCustomizeFunction, RolldownOverrides, RpConfig, TypecheckCommandSetting, TypecheckConfig, TypecheckOptions, UserConfig };
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,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};
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,t.exports),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];r?o===r?r=void 0:o===`\\`&&e[a+1]===r?(a+=1,n+=r):n+=o:o===`"`||o===`'`?(r=o,i=!0):o===`\\`&&(e[a+1]===`"`||e[a+1]===`'`)?(a+=1,n+=e[a],i=!0):/\s/.test(o)?i&&=(t.push(n),n=``,!1):(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}}},I=/^\d+\.\d+\.\d+$/,Ne=/^\d+\.\d+\.\d+-preview\.\d+$/;function Pe(e,t){return e.filter(e=>I.test(e)).filter(e=>j(e,t)<=0).sort(j).at(-1)}const 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&&I.test(n))return e.logger?.verbose(`Resolved ${e.packageName}@stable -> ${n}`),{packageVersion:n};let r=e.npm.versions(t).filter(e=>I.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};let n=I.test(e.target)?Pe(e.npm.versions(t),e.target):void 0;if(n)return e.logger?.warn(`${e.packageName} has no stable release for target ${e.target}; using ${n} (newest stable release at or below the target). Pin an exact version to override.`),{packageVersion:n};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 and no older stable release is available.`,{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=>Ne.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 L=`sapi-pro`,R=[`@minecraft/server`,`@minecraft/server-ui`];function z(e){return/(?:beta|preview|alpha|rc)/i.test(e)}function He(e){return z(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||R.includes(s)&&z(c)!==z(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(L),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 ${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 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[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(He(r)!==n)throw Error(`sapi-pro ${n} requires ${e} to use ${n}, received ${r}.`)}},install:{dependencyCatalog:{[L]:{resolver:`sapi-pro`,manifest:!1}},dependencyResolvers:[qe]}}}const Ye={"sapi-pro":Je};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 Xe(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 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);o?i.push(`dependency catalog ${e}: plugin ${o} takes precedence over plugin ${t.name}`):(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: ${V(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: ${V(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: ${V(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: ${V(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: ${V(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 H(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 U(e){return e===3?_t:gt}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 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?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];i?(`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`)):n.push(`dependencies[${r}] is invalid`)}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 G(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:{...e}}function K(e){return Array.isArray(e)?e:[]}function bt(e){if(!(e&&Object.keys(e).length===0))return e}var q=class{static async read(e){if(!await pt(e))return;let t=await r.readFile(e,`utf8`);try{return G(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=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=bt(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`: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=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=ut.default.createColors(process.env.NO_COLOR===void 0&&process.env.FORCE_COLOR!==`0`);async function Tt(e){let n=H(e.config),r=e.config.packs.bp?ce(e.cwd,e.config):void 0,i=r?await q.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 q.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 q.read(n),i=r!==void 0,a=s.buildRp(r);e.dryRun||await q.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=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 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=H(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 Y(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 X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pt(e,t,n){return typeof e==`number`&&Number.isFinite(e)||Y(n,`${t} must be a finite number`),e}function Z(e,t,n){let r=Pt(e,t,n);return Number.isInteger(r)||Y(n,`${t} must be an integer`),r}function Ft(e,t,n,r){let i=e[t];if(i!==void 0)return Pt(i,`${n}.${t}`,r)}function It(e,t,n,r){let i=e[t];if(i!==void 0)return Z(i,`${n}.${t}`,r)}function Lt(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 Rt(e,t,n){let r=`nodes[${t}]`;X(e)||Y(n,`${r} must be an object`);let i=Z(e.id,`${r}.id`,n),a=Lt(e.callFrame,`${r}.callFrame`,n),o=It(e,`hitCount`,r,n),s=It(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)=>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 zt(e,t=Nt){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)=>Rt(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=Z(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=Pt(e,`timeDeltas[${n}]`,t);return r<0&&Y(t,`timeDeltas[${n}] must not be negative`),r}),o=Ft(e,`startTime`,`profile`,t),s=Ft(e,`endTime`,`profile`,t);return{nodes:n,samples:i,timeDeltas:a,...o===void 0?{}:{startTime:o},...s===void 0?{}:{endTime:s}}}function Bt(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 Vt(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 Ht(e,t){let n=[],r=[];for(let i of e)i.active?r.push(i):(r.length>0&&r.length>=t&&n.push(Vt(r)),r=[]);return r.length>0&&r.length>=t&&n.push(Vt(r)),n}function Ut(e,t,n){let r=zt(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:Bt(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:Ht(u,a)}}function Wt(e,t={}){return Ut(e,Nt,t)}async function Gt(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){Y(e,`not valid JSON: ${t instanceof Error?t.message:String(t)}`)}return Ut(r,e,t)}const Kt=10485760;async function qt(e,n={}){let r=rn(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 Qt(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?Jt(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=Kt-a;return n<=0?``:t.length<=n?(a+=t.length,t.toString(`utf8`)):(a=Kt,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=Zt(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 Jt(e,t){let n=process.platform===`win32`?Yt:Xt;return[e,...t].map(n).join(` `)}function Yt(e){if(e===``)return`""`;if(!/[\s"&|<>^()!,;=]/.test(e))return e.replace(/%/g,`^%`);let t=`"`,n=0;for(let r of e)r===`\\`?n+=1:r===`%`?(t+=`\\`.repeat(n*2)+`"^%"`,n=0):r===`"`?(t+=`\\`.repeat(n*2+1)+`"`,n=0):(t+=`\\`.repeat(n)+r,n=0);return t+=`\\`.repeat(n*2)+`"`,t}function Xt(e){return e===``?`''`:/[\s"'\\$`!*?[\]{}();&|<>~#]/.test(e)?`'${e.replace(/'/g,`'\\''`)}'`:e}function Zt(e){return e.includes(`ENOENT`)||e.includes(`is not recognized`)||e.includes(`不是内部或外部命令`)||e.includes(`command not found`)}async function Qt(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`&&!$t(r)){let e=await tn(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 $t(e){let n=t.extname(e).toLowerCase();return n===`.cmd`||n===`.bat`?!1:n!==``||!en(e)}function en(e){try{let t=i(e);return t.subarray(0,t.indexOf(10)).toString(`utf8`).startsWith(`#!`)}catch{return!1}}async function tn(e){let n=t.dirname(e),r=t.basename(e);for(let e of nn){let i=t.join(n,r+e);if(await Q(i))return i}}const nn=[`.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 rn(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,Wt as analyzeCpuProfile,H as createDependencyCatalog,ee as defineConfig,ze as exactVersionResolver,me as formatTypecheckCommand,T as getConfiguredPacks,lt as loadConfig,Gt as loadCpuProfile,F as minecraftScriptApiBpResolver,P as minecraftScriptApiResolver,Fe as minecraftVanillaDataResolver,Te as packageVersionForSpecifier,Tt as patchManifest,Mt as resolveDependencies,fe as resolveTypecheck,qt as runTypecheck,Je as sapiPro,M as satisfiesSemver,we as satisfiesSemverRange,k as tokenizeCommandLine};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bepack/cli",
3
- "version": "0.1.0-beta.7",
3
+ "version": "0.1.0-beta.8",
4
4
  "description": "A modern pack builder for Minecraft Bedrock Edition.",
5
5
  "keywords": [
6
6
  "minecraft",
@@ -64,12 +64,12 @@
64
64
  "chokidar": "^5.0.0",
65
65
  "fflate": "^0.8.3",
66
66
  "picocolors": "^1.1.1",
67
- "rolldown": "^1.1.4"
67
+ "rolldown": "^1.3.0"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@types/node": "^26.1.0",
71
71
  "prettier": "^3.6.2",
72
- "rolldown-plugin-dts": "^0.27.6",
72
+ "rolldown-plugin-dts": "^0.30.0",
73
73
  "tsx": "^4.19.0",
74
74
  "typescript": "7.0.2",
75
75
  "vitest": "^4.1.10"
package/reference.md CHANGED
@@ -367,11 +367,14 @@ dependencies: {
367
367
  | 说明符 | 目标 | 行为 |
368
368
  | --------- | ----------- | --------------------------------------------- |
369
369
  | `stable` | `latest` | 最新稳定版(dist-tag `latest` 或最高 semver) |
370
- | `stable` | `"1.26.32"` | 如果注册表中存在,则精确使用 `1.26.32` |
370
+ | `stable` | `"1.26.32"` | 精确版本存在时使用 `1.26.32` |
371
+ | `stable` | 热修版本 | 回退到不高于 target 的最新稳定版,并输出警告 |
371
372
  | `preview` | `latest` | 最高 `X.X.X-preview.N` 版本 |
372
373
  | `preview` | `"1.26.40"` | 最高 `1.26.40-preview.N` 版本 |
373
374
  | `beta` | — | **拒绝** — `DEPENDENCY_VERSION_INVALID` |
374
375
 
376
+ 游戏热修版本(例如 `1.26.61`–`1.26.63`)通常不会单独发布 `@minecraft/vanilla-data`,因为方块/物品/实体数据没有变化。对于这类 target,BePack 会选用**不高于** target 的最新稳定版(例如 `1.26.63` → `1.26.60`)并输出一条警告,而不是让整个安装以 `SAPI_VERSION_NOT_FOUND` 失败;更旧的稳定版仍然完整描述目标游戏版本的内容。若想使用其他数据版本,把依赖写成精确版本(`"@minecraft/vanilla-data": "1.26.60"`)即可。target 低于所有已发布稳定版时仍然失败。
377
+
375
378
  #### 稳定版推断示例
376
379
 
377
380
  对于 `minecraft-script-api` 解析器,稳定版从对应的 beta 版本推断: