@bepack/cli 0.1.0-beta.1 → 0.1.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { RolldownOptions } from "rolldown";
1
2
  //#region src/utils/npmRegistry.d.ts
2
3
  declare class NpmRegistryClient {
3
4
  private readonly registry;
@@ -107,6 +108,8 @@ type HookContext = {
107
108
  cwd: string;
108
109
  mode?: string;
109
110
  target: string;
111
+ /** Whether the running command was started with `--dry-run` (no files are written). */
112
+ dryRun: boolean;
110
113
  config: ResolvedConfig;
111
114
  /** Convenience resolved paths. Only includes paths for packs that are configured. */
112
115
  paths: {
@@ -195,8 +198,12 @@ type PackManifestOptions = {
195
198
  * (e.g. dual-config projects) so another config's residue never survives.
196
199
  */
197
200
  merge?: "preserve" | "clean";
198
- /** `header.min_engine_version` in clean mode. Accepts a SemVer string (e.g. `"1.21.0"`),
199
- * converted to `[n, n, n]` for format 2 manifests. Ignored in preserve mode. */
201
+ /** `header.min_engine_version` written to the manifest. Accepts a SemVer string
202
+ * (e.g. `"1.21.0"`), converted to `[n, n, n]` for format 2 manifests.
203
+ *
204
+ * When set it is authoritative in both merge modes: `preserve` overrides the
205
+ * value already stored in the manifest, `clean` uses it as the generated value.
206
+ * When omitted, `preserve` keeps the existing value and `clean` uses the default. */
200
207
  minEngineVersion?: string;
201
208
  /** Dependencies appended verbatim to manifest `dependencies` in clean mode. */
202
209
  extraDependencies?: Record<string, unknown>[];
@@ -227,6 +234,87 @@ type CacheResolved = {
227
234
  build: boolean;
228
235
  file: string;
229
236
  };
237
+ /**
238
+ * `pack.optimize` options. All fields are optional; omitted ones fall back to
239
+ * Mojang-compatible defaults (see `PACK_OPTIMIZE_DEFAULTS`).
240
+ */
241
+ type PackOptimizeOptions = {
242
+ /**
243
+ * Also keep the original loose files inside the artifact. Default: `false`,
244
+ * matching Minecraft's pack optimizer, which stores everything in `__brarchive/`.
245
+ *
246
+ * Useful when the pack should also load in clients that predate `__brarchive/`
247
+ * support: those clients ignore the archives and read the loose files.
248
+ */
249
+ keepLooseFiles?: boolean;
250
+ /**
251
+ * Folders that keep a loose copy **in addition to** their archive, per pack type.
252
+ *
253
+ * Defaults mirror Minecraft's own packs, which keep path-addressed folders loose:
254
+ * behavior packs `functions`, `loot_tables`, `structures`, `texts`; resource packs
255
+ * `font`, `materials`, `sounds`, `texts`, `textures`. Entries are appended to that
256
+ * list — pass `false` to keep nothing extra (smallest artifact).
257
+ */
258
+ keepLoose?: string[] | false;
259
+ /** Extra top-level folders to leave as loose files, on top of the built-in list. */
260
+ exclude?: string[];
261
+ /** Minify JSON entries. Default: `true` (Mojang's optimizer always minifies). */
262
+ minifyJson?: boolean;
263
+ /**
264
+ * Value written to `header.pack_optimization_version` in the packaged manifest —
265
+ * this field is what makes the engine read content from `__brarchive/`.
266
+ *
267
+ * Default: `"0.1.0"` (verified working on 1.26.40+; game-version values such as
268
+ * `"1.26.40"` are ignored by the engine). It is written to the artifact only, the
269
+ * pack's own `manifest.json` on disk is left untouched.
270
+ */
271
+ packOptimizationVersion?: string;
272
+ /**
273
+ * Silence the warning emitted when `header.min_engine_version` is below 1.26.40.
274
+ * Optimization still runs either way — the field does not block loading, but older
275
+ * clients cannot read the archives. Default: `false`.
276
+ */
277
+ allowUnsupportedTarget?: boolean;
278
+ };
279
+ /** Resolved `pack.optimize` options with defaults filled. */
280
+ type PackOptimizeResolved = {
281
+ keepLooseFiles: boolean;
282
+ keepLoose: string[] | false;
283
+ exclude: string[];
284
+ minifyJson: boolean;
285
+ packOptimizationVersion: string;
286
+ allowUnsupportedTarget: boolean;
287
+ };
288
+ /**
289
+ * Context handed to a `compile.rolldown` customization function.
290
+ *
291
+ * All paths are absolute so custom options (alias, plugins, ...) can use them directly.
292
+ */
293
+ type RolldownCustomizeContext = {
294
+ /** Command currently running: `"build"` (`bepack build`) or `"dev"` (`bepack dev`). */
295
+ command: "build" | "dev";
296
+ /** CLI `--mode` value, when provided. */
297
+ mode?: string;
298
+ /** Minecraft target version (`config.target`). */
299
+ target: string;
300
+ /** Absolute path of the compile entry file. */
301
+ entry: string;
302
+ /** Absolute path of the script output directory. */
303
+ outDir: string;
304
+ /** Absolute path of the single-file output (informational in preserve-modules mode). */
305
+ outFile: string;
306
+ /** Whether modules are preserved instead of being bundled into one file. */
307
+ preserveModules: boolean;
308
+ };
309
+ /**
310
+ * Function form of `compile.rolldown`: receives the fully merged options built by
311
+ * BePack (plus context) and returns options that are merged on top of them.
312
+ *
313
+ * Returning `undefined` (or nothing) leaves the current options unchanged.
314
+ */
315
+ type RolldownCustomizeFunction = (options: RolldownOptions, context: RolldownCustomizeContext) => RolldownOptions | undefined | void | Promise<RolldownOptions | undefined | void>;
316
+ /** User-supplied rolldown customization: an options object or a function. */
317
+ type RolldownOverrides = RolldownOptions | RolldownCustomizeFunction;
230
318
  /** BP compile configuration. Only available on behavior packs. */
231
319
  type BpCompileOptions = {
232
320
  /** Script entry file, relative to project root. Default: "src/main.ts". */
@@ -259,6 +347,26 @@ type BpCompileOptions = {
259
347
  cache?: CacheOptions;
260
348
  /** Output directory for compiled scripts, relative to BP root. Default: "scripts". */
261
349
  scriptOutputDir?: string;
350
+ /**
351
+ * Extra rolldown options (object) or a customization function, merged on top of the
352
+ * options BePack generates.
353
+ *
354
+ * BePack-managed fields (`input`, `output.file` / `output.dir` / `output.format` /
355
+ * `output.preserveModules` / `output.preserveModulesRoot` / `output.entryFileNames`)
356
+ * cannot be overridden — configure `entry`, `scriptOutputDir` and `preserveModules`
357
+ * instead.
358
+ */
359
+ rolldown?: RolldownOverrides;
360
+ /**
361
+ * Path to a rolldown config file (relative to the project root, or absolute).
362
+ * The file is loaded with rolldown's own loader, so `.ts` / `.mts` / `.js` / `.mjs`
363
+ * are all supported, and the default export may be an options object, a single-element
364
+ * array, or a function.
365
+ *
366
+ * Takes precedence over the inline `rolldown` field. `bepack build --rolldown-config`
367
+ * overrides this path.
368
+ */
369
+ rolldownConfig?: string;
262
370
  };
263
371
  type BpConfig = PackConfig & {
264
372
  /** BP compile configuration (TypeScript entry, tsconfig, bundler options).
@@ -266,8 +374,6 @@ type BpConfig = PackConfig & {
266
374
  compile?: BpCompileOptions;
267
375
  /** Script API dependencies managed in both package.json and bp/manifest.json. */
268
376
  dependencies?: Record<string, DependencySpecifier>;
269
- /** Adds achievement-compatible metadata when every Script API dependency is stable. */
270
- achievement?: boolean;
271
377
  /** Additional files/folders to include when copying/packing the behavior pack,
272
378
  * on top of built-in defaults (scripts/, manifest.json, animations/, etc.). */
273
379
  include?: string[];
@@ -393,12 +499,27 @@ type UserConfig = {
393
499
  targets?: Record<string, CopyTarget & {
394
500
  name?: string | CopyTargetNames;
395
501
  }>;
502
+ /**
503
+ * Optimize the copied development folder into `__brarchive/` archives, so the
504
+ * exact shape that ships can be tested in-game. Off by default; requires the
505
+ * same `header.min_engine_version >= 1.26.40` as `pack.optimize`.
506
+ */
507
+ optimize?: boolean | PackOptimizeOptions;
396
508
  };
397
509
  pack?: {
398
510
  /** Output filename template without extension. Supports `{name}` and `{version}`. */
399
511
  name?: string;
400
512
  /** Output directory for .mcpack/.mcaddon, relative to `root` unless absolute. */
401
513
  outDir?: string;
514
+ /**
515
+ * Bundle the packs' loose files into `__brarchive/` archives inside the produced
516
+ * `.mcpack` / `.mcaddon`, the way Minecraft's pack optimizer does.
517
+ *
518
+ * Off by default: optimized packs require a `header.min_engine_version` of
519
+ * 1.26.40 or later and do not load in older clients. Copying to a development
520
+ * folder stays unoptimized unless `copy.optimize` is enabled.
521
+ */
522
+ optimize?: boolean | PackOptimizeOptions;
402
523
  };
403
524
  /** Lifecycle hooks. */
404
525
  hooks?: Hooks;
@@ -415,6 +536,8 @@ type BpCompileResolved = {
415
536
  minify: boolean;
416
537
  cache: CacheResolved;
417
538
  scriptOutputDir: string;
539
+ rolldown?: RolldownOverrides;
540
+ rolldownConfig?: string;
418
541
  };
419
542
  type ResolvedConfig = {
420
543
  root: string;
@@ -446,7 +569,6 @@ type ResolvedConfig = {
446
569
  compile?: BpCompileResolved;
447
570
  manifest: PackManifestResolved;
448
571
  dependencies: Record<string, DependencySpecifier>;
449
- achievement?: boolean;
450
572
  include: string[];
451
573
  };
452
574
  rp?: {
@@ -490,10 +612,14 @@ type ResolvedConfig = {
490
612
  targets: Record<string, CopyTarget & {
491
613
  name?: string | CopyTargetNames;
492
614
  }>;
615
+ /** Present only when `copy.optimize` is enabled. */
616
+ optimize?: PackOptimizeResolved;
493
617
  };
494
618
  pack: {
495
619
  name: string;
496
620
  outDir: string;
621
+ /** Present only when `pack.optimize` is enabled. */
622
+ optimize?: PackOptimizeResolved;
497
623
  };
498
624
  };
499
625
  type LoadConfigOptions = {
@@ -524,14 +650,42 @@ declare function loadConfig(options: LoadConfigOptions): Promise<{
524
650
  cwd: string;
525
651
  }>;
526
652
  //#endregion
653
+ //#region src/manifest/ManifestDepManager.d.ts
654
+ /** 依赖版本来自哪一层,用于诊断输出。 */
655
+ type DependencyVersionSource = "config" | "install" | "manifest";
656
+ //#endregion
527
657
  //#region src/manifest/patchManifest.d.ts
528
658
  type PatchManifestOptions = {
529
659
  cwd: string;
530
660
  config: ResolvedConfig;
531
661
  dryRun?: boolean;
662
+ /** Concrete versions resolved by `bepack install` / `build --install` (channel specifiers only). */
532
663
  resolvedDeps?: Record<string, string>;
533
664
  logger?: LoggerLike;
534
665
  };
666
+ /** One managed dependency as written to `manifest.json`. */
667
+ type PatchedManifestDependency = {
668
+ module_name: string;
669
+ /** Specifier from `packs.bp.dependencies` (e.g. `"stable"` or `"2.10.0"`). */
670
+ specifier: string;
671
+ /** Version actually written. */
672
+ version: string;
673
+ /** Where the version came from: the config, a fresh install, or the existing manifest. */
674
+ source: DependencyVersionSource;
675
+ /** Version the manifest held before this patch, when it had one. */
676
+ previous?: string;
677
+ };
678
+ type PatchedManifestFile = {
679
+ path: string;
680
+ updated: boolean;
681
+ existed: boolean;
682
+ /** Only present for the BP manifest: the managed dependencies that were written. */
683
+ dependencies?: PatchedManifestDependency[];
684
+ };
685
+ type PatchManifestResult = {
686
+ bpManifest?: PatchedManifestFile;
687
+ rpManifest?: PatchedManifestFile;
688
+ };
535
689
  /**
536
690
  * 修补 BP 和/或 RP manifest 文件。
537
691
  *
@@ -540,12 +694,12 @@ type PatchManifestOptions = {
540
694
  * - 如果 manifest 不存在,根据配置完整生成。
541
695
  * - dryRun 时返回结果但不写入文件。
542
696
  * - 只修补已配置的 Pack(至少一个必须存在)。
697
+ *
698
+ * 受管依赖的版本优先级:config 中的具体版本 > `resolvedDeps`(install 解析)>
699
+ * 现有 manifest 中的版本。版本发生变化或复用了旧值时都会打印说明,避免
700
+ * 「build 悄悄写回旧版本」这种情况无从排查。
543
701
  */
544
- declare function patchManifest(options: PatchManifestOptions): Promise<Record<string, {
545
- path: string;
546
- updated: boolean;
547
- existed: boolean;
548
- }>>;
702
+ declare function patchManifest(options: PatchManifestOptions): Promise<PatchManifestResult>;
549
703
  //#endregion
550
704
  //#region src/constants/dependencyCatalog.d.ts
551
705
  /** Built-in managed dependency catalog. Maps package names to resolver + manifest behavior. */
@@ -657,7 +811,7 @@ declare function sapiPro(): BePackPlugin;
657
811
  declare const BUILTIN_PLUGINS: Record<string, () => BePackPlugin>;
658
812
  //#endregion
659
813
  //#region src/errors/codes.d.ts
660
- 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", "COPY_TARGET_NOT_FOUND", "COPY_FAILED", "PACK_FAILED", "HOOK_FAILED", "PLUGIN_FAILED", "CLI_ARGUMENT_CONFLICT", "UNKNOWN_COMMAND"];
814
+ 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", "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_CONFLICT", "UNKNOWN_COMMAND"];
661
815
  type ErrorCode = (typeof ERROR_CODES)[number];
662
816
  //#endregion
663
817
  //#region src/errors/BePackError.d.ts
@@ -671,4 +825,4 @@ declare class BePackError extends Error {
671
825
  });
672
826
  }
673
827
  //#endregion
674
- export { BUILTIN_DEPENDENCY_CATALOG, BUILTIN_DEPENDENCY_RESOLVERS, BUILTIN_PLUGINS, BePackError, type BePackPlugin, type BpCompileOptions, type BpCompileResolved, type BpConfig, type ConfigResolvedHookContext, 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 PackScope, type PackType, type PluginDependencyHooks, type ReplaceBuiltins, type ReplaceOptions, type ReplaceValue, type ResolvedConfig, type RpConfig, type UserConfig, createDependencyCatalog, defineConfig, exactVersionResolver, getConfiguredPacks, loadConfig, minecraftScriptApiBpResolver, minecraftScriptApiResolver, minecraftVanillaDataResolver, packageVersionForSpecifier, patchManifest, resolveDependencies, sapiPro, satisfiesSemver, satisfiesSemverRange };
828
+ export { BUILTIN_DEPENDENCY_CATALOG, BUILTIN_DEPENDENCY_RESOLVERS, BUILTIN_PLUGINS, BePackError, type BePackPlugin, type BpCompileOptions, type BpCompileResolved, type BpConfig, type ConfigResolvedHookContext, 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 ReplaceBuiltins, type ReplaceOptions, type ReplaceValue, type ResolvedConfig, type RolldownCustomizeContext, type RolldownCustomizeFunction, type RolldownOverrides, type RpConfig, type UserConfig, createDependencyCatalog, defineConfig, exactVersionResolver, getConfiguredPacks, loadConfig, minecraftScriptApiBpResolver, minecraftScriptApiResolver, minecraftVanillaDataResolver, packageVersionForSpecifier, patchManifest, resolveDependencies, sapiPro, satisfiesSemver, satisfiesSemverRange };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{createRequire as e}from"node:module";import{pathToFileURL as t}from"node:url";import n from"node:path";import{promises as r}from"node:fs";import{platform as i}from"node:os";const a={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:{}},o={dev:!0,build:!1,file:`node_modules/.cache/bepack/tsconfig.tsbuildinfo`},s={entry:`src/main.ts`,define:{},tsconfig:`tsconfig.json`,typecheck:!0,preserveModules:!0,external:[/^@minecraft\/server.*/],useNpx:!1,minify:!1,cache:o,scriptOutputDir:`scripts`};function c(e){return e}const l=[`bepack.config.ts`,`bepack.config.mjs`,`bepack.config.js`];var u=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 d=[`world`,`global`,`any`];function f(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 p(e,t){return n.isAbsolute(t)?t:n.join(e,t)}function m(e){return e.replace(/\\/g,`/`)}function h(e,t){return p(e,t.root)}function g(e,t,n){return n===`bp`?t.packs.bp?p(e,t.packs.bp.root):void 0:t.packs.rp?p(e,t.packs.rp.root):void 0}function _(e,t){let n=g(h(e,t),t,`bp`);if(!n)throw Error(`packs.bp is not configured`);return n}function v(e,t){let n=g(h(e,t),t,`rp`);if(!n)throw Error(`packs.rp is not configured`);return n}function y(e,t){let r=n.relative(e,t);return r===``||!r.startsWith(`..${n.sep}`)&&r!==`..`&&!n.isAbsolute(r)}function b(e,t,r){if(!t||t===`.`)throw new u(`CONFIG_INVALID`,`compile.scriptOutputDir must be a non-empty relative path strictly inside the BP root. Got: "${t}". This directory will be emptied during build.`);let i=t.replace(/\\/g,`/`);if(n.posix.isAbsolute(i)||n.win32.isAbsolute(i))throw new u(`CONFIG_INVALID`,`compile.scriptOutputDir must be a relative path, not absolute. Got: "${t}". This directory will be emptied during build.`);let a=n.posix.normalize(i);if(a.split(`/`).includes(`..`))throw new u(`CONFIG_INVALID`,`compile.scriptOutputDir must not contain ".." (path escape). Got: "${t}" resolves outside the BP root. This directory will be emptied during build.`);let o=n.resolve(e,a),s=n.relative(e,o);if(!s||s.startsWith(`..`)||n.isAbsolute(s))throw new u(`CONFIG_INVALID`,`compile.scriptOutputDir must be a directory strictly inside the BP root. Value: "${t}", resolved: "${o}". This directory will be emptied during build and must not be the BP root or a path outside it.`);if(r&&y(o,r))throw new u(`CONFIG_INVALID`,`compile.scriptOutputDir "${t}" dangerously overlaps with the source entry directory. The output directory will be emptied during build and would delete source files.`);return m(s)}function x(e,t){if(t.packs.bp)return n.join(_(e,t),`manifest.json`)}function S(e,t){if(t.packs.rp)return n.join(v(e,t),`manifest.json`)}i();var C=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),w=e(import.meta.url),T=C(((e,t)=>{let n=w(`node:fs`),r=w(`node:child_process`),i=JSON.parse(n.readFileSync(w.resolve(`rolldown/package.json`),`utf-8`)).version,a=`/tmp/rolldown-${i}`,o=`${a}/node_modules/@rolldown/binding-wasm32-wasi/rolldown-binding.wasi.cjs`;if(!n.existsSync(o)){let e=`@rolldown/binding-wasm32-wasi@${i}`;n.rmSync(a,{recursive:!0,force:!0}),n.mkdirSync(a,{recursive:!0}),console.log(`[rolldown] Downloading ${e} on WebContainer...`),r.execFileSync(`pnpm`,[`i`,e],{cwd:a,stdio:`inherit`})}t.exports=w(o)}));C(((e,t)=>{let{readFileSync:n}=w(`fs`),r=null,i=[],a=()=>{let e=!1;return process.platform===`linux`&&(e=s(),e===null&&(e=c()),e===null&&(e=l())),e},o=e=>e.includes(`libc.musl-`)||e.includes(`ld-musl-`),s=()=>{try{return n(`/usr/bin/ldd`,`utf-8`).includes(`musl`)}catch{return null}},c=()=>{let e=null;return process.report&&typeof process.report.getReport==`function`&&(process.report.excludeNetwork=!0,e=process.report.getReport()),e?e.header&&e.header.glibcVersionRuntime?!1:!!(Array.isArray(e.sharedObjects)&&e.sharedObjects.some(o)):null},l=()=>{try{return w(`child_process`).execSync(`ldd --version`,{encoding:`utf8`}).includes(`musl`)}catch{return!1}};function u(){if(process.env.NAPI_RS_NATIVE_LIBRARY_PATH)try{return w(process.env.NAPI_RS_NATIVE_LIBRARY_PATH)}catch(e){i.push(e)}else if(process.platform===`android`)if(process.arch===`arm64`){try{return w(`./rolldown-binding.android-arm64.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-android-arm64`),t=w(`@rolldown/binding-android-arm64/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`arm`){try{return w(`./rolldown-binding.android-arm-eabi.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-android-arm-eabi`),t=w(`@rolldown/binding-android-arm-eabi/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else i.push(Error(`Unsupported architecture on Android ${process.arch}`));else if(process.platform===`win32`)if(process.arch===`x64`)if(process.config&&process.config.variables&&process.config.variables.shlib_suffix===`dll.a`||process.config&&process.config.variables&&process.config.variables.node_target_type===`shared_library`){try{return w(`./rolldown-binding.win32-x64-gnu.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-win32-x64-gnu`),t=w(`@rolldown/binding-win32-x64-gnu/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else{try{return w(`./rolldown-binding.win32-x64-msvc.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-win32-x64-msvc`),t=w(`@rolldown/binding-win32-x64-msvc/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`ia32`){try{return w(`./rolldown-binding.win32-ia32-msvc.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-win32-ia32-msvc`),t=w(`@rolldown/binding-win32-ia32-msvc/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`arm64`){try{return w(`./rolldown-binding.win32-arm64-msvc.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-win32-arm64-msvc`),t=w(`@rolldown/binding-win32-arm64-msvc/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else i.push(Error(`Unsupported architecture on Windows: ${process.arch}`));else if(process.platform===`darwin`){try{return w(`./rolldown-binding.darwin-universal.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-darwin-universal`),t=w(`@rolldown/binding-darwin-universal/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}if(process.arch===`x64`){try{return w(`./rolldown-binding.darwin-x64.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-darwin-x64`),t=w(`@rolldown/binding-darwin-x64/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`arm64`){try{return w(`./rolldown-binding.darwin-arm64.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-darwin-arm64`),t=w(`@rolldown/binding-darwin-arm64/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else i.push(Error(`Unsupported architecture on macOS: ${process.arch}`))}else if(process.platform===`freebsd`)if(process.arch===`x64`){try{return w(`./rolldown-binding.freebsd-x64.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-freebsd-x64`),t=w(`@rolldown/binding-freebsd-x64/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`arm64`){try{return w(`./rolldown-binding.freebsd-arm64.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-freebsd-arm64`),t=w(`@rolldown/binding-freebsd-arm64/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else i.push(Error(`Unsupported architecture on FreeBSD: ${process.arch}`));else if(process.platform===`linux`)if(process.arch===`x64`)if(a()){try{return w(`./rolldown-binding.linux-x64-musl.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-x64-musl`),t=w(`@rolldown/binding-linux-x64-musl/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else{try{return w(`../rolldown-binding.linux-x64-gnu.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-x64-gnu`),t=w(`@rolldown/binding-linux-x64-gnu/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`arm64`)if(a()){try{return w(`./rolldown-binding.linux-arm64-musl.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-arm64-musl`),t=w(`@rolldown/binding-linux-arm64-musl/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else{try{return w(`./rolldown-binding.linux-arm64-gnu.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-arm64-gnu`),t=w(`@rolldown/binding-linux-arm64-gnu/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`arm`)if(a()){try{return w(`./rolldown-binding.linux-arm-musleabihf.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-arm-musleabihf`),t=w(`@rolldown/binding-linux-arm-musleabihf/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else{try{return w(`./rolldown-binding.linux-arm-gnueabihf.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-arm-gnueabihf`),t=w(`@rolldown/binding-linux-arm-gnueabihf/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`loong64`)if(a()){try{return w(`./rolldown-binding.linux-loong64-musl.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-loong64-musl`),t=w(`@rolldown/binding-linux-loong64-musl/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else{try{return w(`./rolldown-binding.linux-loong64-gnu.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-loong64-gnu`),t=w(`@rolldown/binding-linux-loong64-gnu/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`riscv64`)if(a()){try{return w(`./rolldown-binding.linux-riscv64-musl.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-riscv64-musl`),t=w(`@rolldown/binding-linux-riscv64-musl/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else{try{return w(`./rolldown-binding.linux-riscv64-gnu.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-riscv64-gnu`),t=w(`@rolldown/binding-linux-riscv64-gnu/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`ppc64`){try{return w(`./rolldown-binding.linux-ppc64-gnu.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-ppc64-gnu`),t=w(`@rolldown/binding-linux-ppc64-gnu/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`s390x`){try{return w(`./rolldown-binding.linux-s390x-gnu.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-linux-s390x-gnu`),t=w(`@rolldown/binding-linux-s390x-gnu/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else i.push(Error(`Unsupported architecture on Linux: ${process.arch}`));else if(process.platform===`openharmony`)if(process.arch===`arm64`){try{return w(`./rolldown-binding.openharmony-arm64.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-openharmony-arm64`),t=w(`@rolldown/binding-openharmony-arm64/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`x64`){try{return w(`./rolldown-binding.openharmony-x64.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-openharmony-x64`),t=w(`@rolldown/binding-openharmony-x64/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else if(process.arch===`arm`){try{return w(`./rolldown-binding.openharmony-arm.node`)}catch(e){i.push(e)}try{let e=w(`@rolldown/binding-openharmony-arm`),t=w(`@rolldown/binding-openharmony-arm/package.json`).version;if(t!==`1.1.4`&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK&&process.env.NAPI_RS_ENFORCE_VERSION_CHECK!==`0`)throw Error(`Native binding package version mismatch, expected 1.1.4 but got ${t}. You can reinstall dependencies to fix this issue.`);return e}catch(e){i.push(e)}}else i.push(Error(`Unsupported architecture on OpenHarmony: ${process.arch}`));else i.push(Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))}r=u();let d=process.env.NAPI_RS_FORCE_WASI===`true`||process.env.NAPI_RS_FORCE_WASI===`error`;if(!r||d){let e=null,t=null;try{e=w(`../rolldown-binding.wasi.cjs`),r=e}catch(e){d&&(t=e)}if(!r||d)try{e=w(`@rolldown/binding-wasm32-wasi`),r=e}catch(e){d&&(t?t.cause=e:t=e,i.push(e))}if(process.env.NAPI_RS_FORCE_WASI===`error`&&!e){let e=Error(`WASI binding not found and NAPI_RS_FORCE_WASI is set to error`);throw e.cause=t,e}}if(!r&&globalThis.process?.versions?.webcontainer)try{r=T()}catch(e){i.push(e)}if(!r){if(i.length>0){let e=Error("Cannot find native binding. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). Please try `npm i` again after removing both package-lock.json and node_modules directory.");throw e.cause=i.reduce((e,t)=>(t.cause=e,t)),e}throw Error(`Failed to load native binding`)}t.exports=r,t.exports.LegalCommentsMode=r.LegalCommentsMode,t.exports.minify=r.minify,t.exports.minifySync=r.minifySync,t.exports.Severity=r.Severity,t.exports.ParseResult=r.ParseResult,t.exports.ExportExportNameKind=r.ExportExportNameKind,t.exports.ExportImportNameKind=r.ExportImportNameKind,t.exports.ExportLocalNameKind=r.ExportLocalNameKind,t.exports.ImportNameKind=r.ImportNameKind,t.exports.parse=r.parse,t.exports.parseSync=r.parseSync,t.exports.rawTransferSupported=r.rawTransferSupported,t.exports.ResolverFactory=r.ResolverFactory,t.exports.EnforceExtension=r.EnforceExtension,t.exports.ModuleType=r.ModuleType,t.exports.sync=r.sync,t.exports.HelperMode=r.HelperMode,t.exports.isolatedDeclaration=r.isolatedDeclaration,t.exports.isolatedDeclarationSync=r.isolatedDeclarationSync,t.exports.moduleRunnerTransform=r.moduleRunnerTransform,t.exports.moduleRunnerTransformSync=r.moduleRunnerTransformSync,t.exports.transform=r.transform,t.exports.transformSync=r.transformSync,t.exports.BindingBundleEndEventData=r.BindingBundleEndEventData,t.exports.BindingBundleErrorEventData=r.BindingBundleErrorEventData,t.exports.BindingBundler=r.BindingBundler,t.exports.BindingCallableBuiltinPlugin=r.BindingCallableBuiltinPlugin,t.exports.BindingChunkingContext=r.BindingChunkingContext,t.exports.BindingDecodedMap=r.BindingDecodedMap,t.exports.BindingDevEngine=r.BindingDevEngine,t.exports.BindingLoadPluginContext=r.BindingLoadPluginContext,t.exports.BindingMagicString=r.BindingMagicString,t.exports.BindingModuleInfo=r.BindingModuleInfo,t.exports.BindingNormalizedOptions=r.BindingNormalizedOptions,t.exports.BindingOutputAsset=r.BindingOutputAsset,t.exports.BindingOutputChunk=r.BindingOutputChunk,t.exports.BindingPluginContext=r.BindingPluginContext,t.exports.BindingRenderedChunk=r.BindingRenderedChunk,t.exports.BindingRenderedChunkMeta=r.BindingRenderedChunkMeta,t.exports.BindingRenderedModule=r.BindingRenderedModule,t.exports.BindingSourceMap=r.BindingSourceMap,t.exports.BindingTransformPluginContext=r.BindingTransformPluginContext,t.exports.BindingWatcher=r.BindingWatcher,t.exports.BindingWatcherBundler=r.BindingWatcherBundler,t.exports.BindingWatcherChangeData=r.BindingWatcherChangeData,t.exports.BindingWatcherEvent=r.BindingWatcherEvent,t.exports.ParallelJsPluginRegistry=r.ParallelJsPluginRegistry,t.exports.TraceSubscriberGuard=r.TraceSubscriberGuard,t.exports.TsconfigCache=r.TsconfigCache,t.exports.BindingAttachDebugInfo=r.BindingAttachDebugInfo,t.exports.BindingBuiltinPluginName=r.BindingBuiltinPluginName,t.exports.BindingChunkModuleOrderBy=r.BindingChunkModuleOrderBy,t.exports.BindingErrorStage=r.BindingErrorStage,t.exports.BindingLogLevel=r.BindingLogLevel,t.exports.BindingPluginOrder=r.BindingPluginOrder,t.exports.BindingPropertyReadSideEffects=r.BindingPropertyReadSideEffects,t.exports.BindingPropertyWriteSideEffects=r.BindingPropertyWriteSideEffects,t.exports.BindingRebuildStrategy=r.BindingRebuildStrategy,t.exports.collapseSourcemaps=r.collapseSourcemaps,t.exports.enhancedTransform=r.enhancedTransform,t.exports.enhancedTransformSync=r.enhancedTransformSync,t.exports.FilterTokenKind=r.FilterTokenKind,t.exports.initTraceSubscriber=r.initTraceSubscriber,t.exports.registerPlugins=r.registerPlugins,t.exports.resolveTsconfig=r.resolveTsconfig,t.exports.shutdownAsyncRuntime=r.shutdownAsyncRuntime,t.exports.startAsyncRuntime=r.startAsyncRuntime}))();function ee(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 te(e){let t={...e??{}};for(let[e,n]of Object.entries(t))try{Function(`return (${n});`)}catch{throw new u(`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}function ne(e){let t=/^(\d+)\.(\d+)\.(\d+)$/.exec(e);if(!t)throw new u(`VERSION_INVALID`,`Manifest version requires x.y.z.`,{details:{version:e}});return[Number(t[1]),Number(t[2]),Number(t[3])]}function E(e){return/^\d+\.\d+\.\d+(?:[-.][0-9A-Za-z.-]+)?$/.test(e)}function D(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 re(e){return e===`latest`?!0:D(e,`1.21.120`)>=0}function ie(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 ae(e,t){for(let n of[`major`,`minor`,`patch`])if(e[n]!==t[n])return e[n]-t[n];return 0}function O(e,t){let n=ie(e);return n?t.split(`||`).some(e=>{let t=/(?:\^|~|>=|<=|>|<|=)?\s*(v?\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)/.exec(e.trim()),r=t?ie(t[1]):void 0;return!r||n.major!==r.major||ae(n,r)<0?!1:r.minecraftTarget?n.minecraftTarget?D(n.minecraftTarget.join(`.`),r.minecraftTarget.join(`.`))>=0:!1:!0}):!1}const oe=O;function se(e){if(e===`stable`||e===`beta`||e===`preview`)throw new u(`DEPENDENCY_VERSION_INVALID`,`${e} must be resolved from npm registry before writing package.json.`,{details:{specifier:e}});if(E(e))return e;throw new u(`DEPENDENCY_VERSION_INVALID`,`Unsupported dependency version: ${e}`,{details:{specifier:e}})}function ce(e){return e.filter(e=>/^\d+\.\d+\.\d+$/.test(e)).sort(D)}function k(e){return e.filter(e=>/(?:^|[-.])beta(?:[-.]|$)/i.test(e)).sort(D)}var A=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=ce(this.npm.versions(t)).at(-1);if(!r)throw new u(`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=k(this.npm.versions(t)).at(-1);if(!r)throw new u(`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(D).at(-1);if(!a)throw new u(`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 u(`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 u(`SAPI_VERSION_NOT_FOUND`,`Cannot confirm inferred stable version ${s} for ${e}.`,{details:{package:e,target:t,beta:n,inferredStable:s}});return s}};function le(e,t){return t===`latest`||re(t)?`beta`:/^(\d+\.\d+\.\d+-beta)/i.exec(e)?.[1]??e}function j(e,t,n){let r=k(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 u(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest beta version for ${e}.`,{details:{package:e}});return n?.verbose(`Resolved ${e}@beta -> ${r}`),r}function ue(e){return e.filter(e=>/(?:rc|beta)\.\d+\.\d+\.\d+-preview\.\d+$/i.test(e)).sort(D)}function M(e,t,n){let r=ue(t).at(-1);if(!r)throw new u(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest preview version for ${e}.`,{details:{package:e}});return n?.verbose(`Resolved ${e}@preview -> ${r}`),r}function N(e,t,n,r){let i=n.replace(/\./g,`\\.`),a=RegExp(`(?:rc|beta)\\.${i}-preview\\.\\d+$`),o=t.filter(e=>a.test(e)).sort(D).at(-1);if(!o)throw new u(`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 A(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`?j(e.packageName,e.npm.versions(t),e.logger):n.betaForTarget(e.packageName,e.target,t);return{packageVersion:r,manifestVersion:le(r,e.target)}}e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`);let r=e.target===`latest`?M(e.packageName,e.npm.versions(t),e.logger):N(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 A(e.npm,e.logger);if(e.specifier===`beta`){e.logger?.verbose(`Resolving ${e.packageName}@beta for target ${e.target}`);let r=e.target===`latest`?j(e.packageName,e.npm.versions(t),e.logger):n.betaForTarget(e.packageName,e.target,t);return{packageVersion:r,manifestVersion:le(r,e.target)}}e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`);let r=e.target===`latest`?M(e.packageName,e.npm.versions(t),e.logger):N(e.packageName,e.npm.versions(t),e.target,e.logger);return{packageVersion:r,manifestVersion:r}}},de=/^\d+\.\d+\.\d+$/,fe=/^\d+\.\d+\.\d+-preview\.\d+$/,I={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`?pe(e,t):me(e,t)}};function pe(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&&de.test(n))return e.logger?.verbose(`Resolved ${e.packageName}@stable -> ${n}`),{packageVersion:n};let r=e.npm.versions(t).filter(e=>de.test(e)).sort(D).at(-1);if(!r)throw new u(`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 u(`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 me(e,t){if(e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`),e.target===`latest`){let n=e.npm.versions(t).filter(e=>fe.test(e)).sort(D).at(-1);if(!n)throw new u(`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(D).at(-1);if(!i)throw new u(`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 L={"@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:I,manifest:!1}},R={name:`exact-version`,match:e=>E(e.specifier),resolve(e){return e.logger?.verbose(`Using exact ${e.packageName}@${e.specifier}`),{packageVersion:se(e.specifier),manifestVersion:e.specifier}}},z=[P,F,I,R];var B=class e{resolvers;pluginNames=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,...z],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 u(`PLUGIN_FAILED`,`Plugin ${t} resolver ${n.name} match failed: ${e instanceof Error?e.message:String(e)}`):e}if(!t)throw new u(`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 u(`PLUGIN_FAILED`,`Plugin ${n} resolver ${t.name} failed: ${e instanceof Error?e.message:String(e)}`):e}}};const V=`sapi-pro`,H=[`@minecraft/server`,`@minecraft/server-ui`];function U(e){return/(?:beta|preview|alpha|rc)/i.test(e)}function he(e){return U(e)?`beta`:`stable`}function ge(e){let t=/^(\d+)\.(\d+)\./.exec(e);return!!t&&(Number(t[1])>0||Number(t[2])>=4)}function W(e){return{...e.dependencies??{},...e.peerDependencies??{}}}async function _e(e,t,n,r){let i=e.config.packs.bp?.dependencies??{},a={...L,...e.config.install.dependencyCatalog},o=B.fromConfig(e.config.install.dependencyResolvers.filter(e=>e!==G),e.config.plugins);for(let[s,c]of Object.entries(t)){if(!s.startsWith(`@minecraft/`))continue;let t=i[s],l=a[s];if(!t||!l)return r.add(s),!1;let u;if(n.has(s)?u=n.get(s):(u=await o.resolve({packageName:s,specifier:t,target:e.target,entry:l,config:e.config,npm:e.npm,...e.logger?{logger:e.logger}:{}}),n.set(s,u)),!u||H.includes(s)&&U(c)!==U(u.packageVersion)||!O(u.packageVersion,c))return!1}return!0}function ve(e,t){if(t!==`stable`&&t!==`beta`){let n=e[t];return n?[[t,n]]:[]}return Object.entries(e).filter(([e,n])=>{if(!ge(e))return!1;let r=W(n);return Object.keys(r).length===0?!1:t===`stable`?/-stable(?:\.\d+)?$/i.test(e):/^\d+\.\d+\.\d+$/.test(e)}).sort(([e],[t])=>D(e,t)).reverse()}const G={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(V),n=new Map,r=new Set;for(let[i,a]of ve(t.versions??{},e.specifier))if(await _e(e,W(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 u(`SAPI_VERSION_NOT_FOUND`,`Cannot find a compatible ${V}@${e.specifier} for target ${e.target}.${r.size>0?` Missing explicit dependencies: ${[...r].join(`, `)}.`:``}`,{details:{package:V,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 K(){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[V];if(!n)return;let r=H.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 H){let r=t[e];if(he(r)!==n)throw Error(`sapi-pro ${n} requires ${e} to use ${n}, received ${r}.`)}},install:{dependencyCatalog:{[V]:{resolver:`sapi-pro`,manifest:!1}},dependencyResolvers:[G]}}}const ye={"sapi-pro":K};function q(e){return e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0)):{}}function be(e,t){let n={};(e.packs?.bp||t.packs?.bp)&&(n.bp={...e.packs?.bp??{},...q(t.packs?.bp)}),(e.packs?.rp||t.packs?.rp)&&(n.rp={...e.packs?.rp??{},...q(t.packs?.rp)});let r={...e.copy?.targets??{},...q(t.copy?.targets)},i=q(t);return{...e,...i,...t.plugins!==void 0||e.plugins!==void 0?{plugins:t.plugins??e.plugins}:{},packs:n,install:{...e.install,...q(t.install)},build:{...e.build,...q(t.build)},dev:{...e.dev,...q(t.dev)},copy:{...e.copy,...q(t.copy),targets:r},pack:{...e.pack,...q(t.pack)},hooks:{...e.hooks,...q(t.hooks)}}}function xe(e){let t=(e??[]).map(e=>{if(typeof e!=`string`)return e;let t=ye[e];if(!t)throw new u(`CONFIG_INVALID`,`Unknown built-in plugin: ${e}.`);return t()}),n=new Set;for(let e of t){if(!e?.name||e.name.trim()===``)throw new u(`CONFIG_INVALID`,`Every plugin must have a non-empty name.`);if(n.has(e.name))throw new u(`CONFIG_INVALID`,`Plugin name is duplicated: ${e.name}.`);if(e.apiVersion!==void 0&&e.apiVersion!==1)throw new u(`CONFIG_INVALID`,`Plugin ${e.name} requires unsupported BePack plugin API version ${e.apiVersion}.`);if(e.priority!==void 0&&!Number.isFinite(e.priority))throw new u(`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 Se(e,t){let n=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 u(`PLUGIN_FAILED`,`Plugin ${t.name} ${String(n)} hook failed: ${e instanceof Error?e.message:String(e)}`):e}return t}]}))}function Ce(e,t){let n={},r=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 we(e,t,r){let i=s,a=e?.scriptOutputDir??i.scriptOutputDir,c=n.resolve(r,e?.entry??i.entry),l=b(t,a,n.dirname(c));return{entry:e?.entry??i.entry,define:te(e?.define),tsconfig:e?.tsconfig??i.tsconfig,typecheck:e?.typecheck??i.typecheck,preserveModules:e?.preserveModules??i.preserveModules,external:e?.external??i.external,useNpx:e?.useNpx??i.useNpx,minify:e?.minify??i.minify,cache:u(e?.cache),scriptOutputDir:l};function u(e){let t=o;return{dev:e?.dev??t.dev,build:e?.build??t.build,file:e?.file??t.file}}}function Te(e){let t=e?.merge??`preserve`;if(t!==`preserve`&&t!==`clean`)throw new u(`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 u(`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 Ee(e,t={},r=process.cwd()){let i=be(e,t),o=xe(i.plugins),s=i.target??a.target;if(s===`stable`||s===`beta`)throw new u(`TARGET_INVALID`,`target must be a Minecraft game version or latest, not a Script API channel.`,{details:{target:s}});let c=!!i.packs?.bp,l=!!i.packs?.rp;if(!c&&!l)throw new u(`CONFIG_INVALID`,`At least one pack (packs.bp or packs.rp) is required.`);if(!i.name||i.name.trim()===``)throw new u(`CONFIG_INVALID`,`name is required.`);let f=i.name,p=i.version??a.version,m=i.description,h=i.packs,g=h.bp?.compile,_=h.bp,v=h.rp;if(_){if(!_.uuid)throw new u(`CONFIG_INVALID`,`packs.bp.uuid is required.`);if(_.compile&&!_.moduleUuid)throw new u(`CONFIG_INVALID`,`packs.bp.moduleUuid is required when packs.bp.compile is configured.`);if(_.root===void 0)throw new u(`CONFIG_INVALID`,`packs.bp.root is required. Set the behavior pack directory in bepack.config.ts.`);if(g?.define){let e=Object.keys(i.replace?.values??{}),t=Object.keys(g.define),n=e.filter(e=>t.includes(e));if(n.length>0)throw new u(`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 y=n.resolve(r,i.root??`.`),b=_?n.resolve(y,_.root):void 0;if(v){if(!v.uuid||!v.moduleUuid)throw new u(`CONFIG_INVALID`,`packs.rp.uuid and packs.rp.moduleUuid are required.`);if(v.root===void 0)throw new u(`CONFIG_INVALID`,`packs.rp.root is required when packs.rp is configured.`);if(v.packScope!==void 0&&!d.includes(v.packScope))throw new u(`CONFIG_INVALID`,`packs.rp.packScope must be one of ${d.map(e=>`"${e}"`).join(`, `)}.`,{details:{packScope:v.packScope}})}let x=_?.description??m,S=v?.description??m,{catalog:C,diagnostics:w}=Ce(o,i.install?.dependencyCatalog??{}),T=o.flatMap(e=>e.install?.dependencyResolvers??[]);return{root:i.root??a.root,configured:{root:i.root!==void 0,packOutDir:i.pack?.outDir!==void 0},name:f,version:p,...m===void 0?{}:{description:m},replace:ee(i.replace),target:s,plugins:o,...w.length>0?{pluginDiagnostics:w}:{},...i.manifestFormat===void 0?{}:{manifestFormat:i.manifestFormat},packs:{..._?{bp:{root:_.root,uuid:_.uuid,..._.moduleUuid===void 0?{}:{moduleUuid:_.moduleUuid},name:_.name??f,...x===void 0?{}:{description:x},...g&&b?{compile:we(g,b,y)}:{},manifest:Te(_.manifest),dependencies:_.dependencies??{},..._.achievement===void 0?{}:{achievement:_.achievement},include:_.include??[]}}:{},...v?{rp:{root:v.root,uuid:v.uuid,moduleUuid:v.moduleUuid,name:v.name??f,...S===void 0?{}:{description:S},manifest:Te(v.manifest),...v.pbr===void 0?{}:{pbr:v.pbr},...v.packScope===void 0?{}:{packScope:v.packScope},include:v.include??[]}}:{}},install:{registry:i.install?.registry??a.install.registry,saveTo:i.install?.saveTo??a.install.saveTo,packageManager:i.install?.packageManager??a.install.packageManager,runPackageManager:i.install?.runPackageManager??a.install.runPackageManager,updatePackageJson:i.install?.updatePackageJson??a.install.updatePackageJson,updateManifest:i.install?.updateManifest??a.install.updateManifest,dependencyCatalog:C,dependencyResolvers:[...T,...i.install?.dependencyResolvers??[]]},build:{copy:i.build?.copy??a.build.copy,timing:i.build?.timing??a.build.timing},dev:{copy:i.dev?.copy??a.dev.copy,...i.dev?.watch?{watch:i.dev.watch}:{}},copy:{defaultTarget:i.copy?.defaultTarget??a.copy.defaultTarget,...i.copy?.name?{name:i.copy.name}:{},...i.copy?.include?{include:i.copy.include}:{},targets:i.copy?.targets??{}},pack:{name:i.pack?.name??a.pack.name,outDir:i.pack?.outDir??a.pack.outDir},hooks:Se(o,i.hooks)}}async function De(e,t){if(t){let n=p(e,t);return await r.access(n).catch(()=>{throw new u(`CONFIG_NOT_FOUND`,`Config not found: ${t}`,{details:{configPath:t}})}),n}for(let t of l){let i=n.join(e,t);try{return await r.access(i),i}catch{}}throw new u(`CONFIG_NOT_FOUND`,`No bepack.config.ts, bepack.config.mjs, or bepack.config.js found.`,{details:{cwd:e}})}async function Oe(e){try{if(e.endsWith(`.ts`))try{return await import(`${t(e).href}?t=${Date.now()}`)}catch{let t=ke(await r.readFile(e,`utf8`));return await import(`data:text/javascript;base64,${Buffer.from(t,`utf8`).toString(`base64`)}`)}return await import(`${t(e).href}?t=${Date.now()}`)}catch(t){throw new u(`CONFIG_INVALID`,`Failed to load config: ${t instanceof Error?t.message:String(t)}`,{details:{file:e},suggestions:[`Use bepack.config.mjs/js for complex config logic.`,`Keep bepack.config.ts free of TypeScript-only runtime syntax.`]})}}function ke(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 Ae(e,t){for(let n of e.plugins??[])if(n.configResolved)try{await n.configResolved({cwd:t,config:e})}catch(e){throw new u(`PLUGIN_FAILED`,`Plugin ${n.name} configResolved hook failed: ${e instanceof Error?e.message:String(e)}`)}}async function je(e){let t=n.resolve(e.cwd),r=await De(t,e.configPath),i=await Oe(r);if(i.default===void 0)throw new u(`CONFIG_INVALID`,`Config must use default export.`,{details:{file:r}});let a=Ee(i.default,e.overrides,t);return await Ae(a,t),{config:a,path:r,cwd:t}}function J(e){return{...L,...e.install.dependencyCatalog}}function Me(e,t){let n=e[t];if(!n)throw new u(`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 Ne(e){return`${JSON.stringify(e,null,4)}\n`}async function Pe(e){try{return await r.access(e),!0}catch{return!1}}async function Fe(e){await r.mkdir(e,{recursive:!0})}async function Ie(e,t){await Fe(n.dirname(e)),await r.writeFile(e,Ne(t),`utf8`)}function Le(e){return Array.isArray(e)&&e.length===3&&typeof e[0]==`number`&&typeof e[1]==`number`&&typeof e[2]==`number`}function Re(e){return typeof e==`string`&&/^\d+\.\d+\.\d+$/.test(e)}function Y(e){return e===3?Re:Le}function X(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 ze=[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?Y(e.format_version)(e.header.version)?null:X(e.format_version,`header.version`):null,e=>e.header?Y(e.format_version)(e.header.min_engine_version)?null:X(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=Y(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`}): ${X(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=Y(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}): ${X(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 Be(e,t){let n=[];for(let r of ze){let i=r(e,t);i!==null&&(Array.isArray(i)?n.push(...i):n.push(i))}if(n.length>0)throw new u(`MANIFEST_INVALID`,`Manifest validation failed: ${n.join(`; `)}`)}function Z(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:{...e}}function Q(e){return Array.isArray(e)?e:[]}function Ve(e){if(!(e&&Object.keys(e).length===0))return e}var $=class{static async read(e){if(!await Pe(e))return;let t=await r.readFile(e,`utf8`);try{return Z(JSON.parse(t))}catch{throw new u(`MANIFEST_INVALID`,`Invalid JSON in manifest: ${e}`)}}static async write(e,t,n){Be(t,n),await Ie(e,t)}};const He=[1,21,0],Ue=[1,0,0];var We=class{config;version;versionStr;depManager;constructor(e,t){this.config=e,this.version=ne(e.version),this.versionStr=e.version,this.depManager=t}buildBp(e){let t=this.requireBp(),n=Z(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=Z(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:this.cleanMinEngineVersion(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:this.cleanMinEngineVersion(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)}}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)}}getScriptEntry(){let e=this.config.packs.bp?.compile;return e?`${e.scriptOutputDir}/${n.basename(e.entry,n.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:!1}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[...Q(e).filter(e=>!this.isManagedBpModule(e,t)),this.createScriptModule(t,n)]}replaceManagedRpModules(e,t,n){return[...Q(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=Ve(t);n?e.metadata=n:delete e.metadata}}applyPbrCapability(e,t){if(t.pbr===!0){let t=Q(e.capabilities);e.capabilities=t.includes(`pbr`)?t:[...t,`pbr`]}else if(t.pbr===!1){let t=Q(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`:Ue}getWriteFormatVersion(e){return this.config.manifestFormat===void 0?e.format_version??2:this.config.manifestFormat}normalizeMinEngineVersion(e,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)}cleanMinEngineVersion(e,t){return e===void 0?this.defaultMinEngineVersion(t):t===3?e:this.stringToVersionTuple(e)??this.defaultMinEngineVersion(t)}defaultMinEngineVersion(e){return e===3?`1.21.0`:He}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 u(`CONFIG_INVALID`,`packs.bp is required to build the BP manifest.`);return this.config.packs.bp}requireRp(){if(!this.config.packs.rp)throw new u(`CONFIG_INVALID`,`packs.rp is required to build the RP manifest.`);return this.config.packs.rp}},Ge=class e{config;catalog;resolvedDeps;version;versionStr;constructor(e,t,n){this.config=e,this.catalog=t,this.resolvedDeps=n??{},this.version=ne(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(e){let{specifier:t,target:n,resolvedVersion:r}=e;if(t===`stable`){if(r)return r;throw new u(`DEPENDENCY_REQUIRES_INSTALL`,"Run `bepack install` to resolve stable manifest dependencies.",{details:{specifier:t,target:n}})}if(t===`beta`){if(re(n))return`beta`;if(r)return r;throw new u(`DEPENDENCY_REQUIRES_INSTALL`,`Run \`bepack install\` to resolve manifest dependencies for target ${n}.`,{details:{target:n}})}if(t===`preview`){if(r)return r;throw new u(`DEPENDENCY_REQUIRES_INSTALL`,`Run \`bepack install\` to resolve preview manifest dependencies for target ${n}.`,{details:{specifier:t,target:n}})}return t}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 u(`UNSUPPORTED_DEPENDENCY`,`${t} is not a managed dependency.`,{details:{package:t},suggestions:n})}if(!e.isAllowedSpecifier(n))throw new u(`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 u(`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.config.packs.bp)return[];let t=[];for(let[n,r]of Object.entries(this.config.packs.bp.dependencies))this.catalog[n]?.manifest&&t.push({module_name:n,version:e.resolveVersion({specifier:r,target:this.config.target,resolvedVersion:this.resolvedDeps[n]})});return t}getFormatAwareVersion(e){return(e??this.config.manifestFormat??2)===3?this.versionStr:this.version}replaceBpDependencies(e,t,n){let r=Q(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=Q(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]}};async function Ke(e){let t=J(e.config),r=e.config.packs.bp?x(e.cwd,e.config):void 0,i=r?await $.read(r):void 0,a=qe(i,t),o=new Ge(e.config,t,e.resolvedDeps?{...a,...e.resolvedDeps}:a),s=new We(e.config,o),c={};if(e.config.packs.bp){let t=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 a=s.buildBp(i);e.dryRun||await $.write(r,a,`bp`),c.bpManifest={path:m(n.relative(e.cwd,r)),updated:!0,existed:t}}if(e.config.packs.rp){let t=S(e.cwd,e.config),r=await $.read(t),i=r!==void 0,a=s.buildRp(r);e.dryRun||await $.write(t,a,`rp`),c.rpManifest={path:m(n.relative(e.cwd,t)),updated:!0,existed:i}}return c}function qe(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 Je(e,t){e?.install?e.install(t):e?.info(`[Install] ${t}`)}var Ye=class{registry;logger;cache=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;Je(this.logger,`fetching ${e} metadata from ${this.registry}`);let r=await fetch(t);if(!r.ok)throw new u(`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 Xe(e){return t=>{e?.install?e.install(t):e?.info(`[Install] ${t}`)}}var Ze=class{config;logger;npm;catalog;pkgResolver;log;constructor(e,t){this.config=e,this.logger=t,this.npm=new Ye(e.install.registry,t),this.catalog=J(e),this.pkgResolver=new A(this.npm,t),this.log=Xe(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=Me(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 B.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 u(`PLUGIN_FAILED`,`Plugin ${n.name} ${e} hook failed: ${t instanceof Error?t.message:String(t)}`)}}}};async function Qe(e,t){return new Ze(e,t).resolveAll()}export{L as BUILTIN_DEPENDENCY_CATALOG,z as BUILTIN_DEPENDENCY_RESOLVERS,ye as BUILTIN_PLUGINS,u as BePackError,B as DependencyResolverRegistry,Ze as DependencyService,A as MinecraftPackageResolver,Ye as NpmRegistryClient,J as createDependencyCatalog,c as defineConfig,R as exactVersionResolver,f as getConfiguredPacks,je as loadConfig,F as minecraftScriptApiBpResolver,P as minecraftScriptApiResolver,I as minecraftVanillaDataResolver,se as packageVersionForSpecifier,Ke as patchManifest,Qe as resolveDependencies,K as sapiPro,O as satisfiesSemver,oe as satisfiesSemverRange};
1
+ import{pathToFileURL as e}from"node:url";import t from"node:path";import{promises as n}from"node:fs";import{platform as r}from"node:os";import"rolldown/plugins";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,u=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),d=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=s(t),c=0,u=i.length,d;c<u;c++)d=i[c],!l.call(e,d)&&d!==n&&a(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=o(t,d))||r.enumerable});return e},f=(e,t,n)=>(n=e==null?{}:i(c(e)),d(t||!e||!e.__esModule||!l.call(e,`default`)?a(n,`default`,{value:e,enumerable:!0}):n,e));const p={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:{}},m={dev:!0,build:!1,file:`node_modules/.cache/bepack/tsconfig.tsbuildinfo`},h={keepLooseFiles:!1,keepLoose:[],exclude:[],minifyJson:!0,packOptimizationVersion:`0.1.0`,allowUnsupportedTarget:!1},g={entry:`src/main.ts`,define:{},tsconfig:`tsconfig.json`,typecheck:!0,preserveModules:!0,external:[/^@minecraft\/server.*/],useNpx:!1,minify:!1,cache:m,scriptOutputDir:`scripts`};function _(e){return e}const v=[`bepack.config.ts`,`bepack.config.mjs`,`bepack.config.js`];var y=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 b=[`world`,`global`,`any`];function x(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 S(e,n){return t.isAbsolute(n)?n:t.join(e,n)}function C(e){return e.replace(/\\/g,`/`)}function w(e,t){return S(e,t.root)}function T(e,t,n){return n===`bp`?t.packs.bp?S(e,t.packs.bp.root):void 0:t.packs.rp?S(e,t.packs.rp.root):void 0}function E(e,t){let n=T(w(e,t),t,`bp`);if(!n)throw Error(`packs.bp is not configured`);return n}function D(e,t){let n=T(w(e,t),t,`rp`);if(!n)throw Error(`packs.rp is not configured`);return n}function ee(e,n){let r=t.relative(e,n);return r===``||!r.startsWith(`..${t.sep}`)&&r!==`..`&&!t.isAbsolute(r)}function te(e,n,r){if(!n||n===`.`)throw new y(`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 y(`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 y(`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 y(`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&&ee(o,r))throw new y(`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 C(s)}function ne(e,n){if(n.packs.bp)return t.join(E(e,n),`manifest.json`)}function re(e,n){if(n.packs.rp)return t.join(D(e,n),`manifest.json`)}r();function ie(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 ae(e){let t={...e??{}};for(let[e,n]of Object.entries(t))try{Function(`return (${n});`)}catch{throw new y(`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}function oe(e){let t=/^(\d+)\.(\d+)\.(\d+)$/.exec(e);if(!t)throw new y(`VERSION_INVALID`,`Manifest version requires x.y.z.`,{details:{version:e}});return[Number(t[1]),Number(t[2]),Number(t[3])]}function O(e){return/^\d+\.\d+\.\d+(?:[-.][0-9A-Za-z.-]+)?$/.test(e)}function k(e,t){let n=e.split(/[^0-9A-Za-z]+/),r=t.split(/[^0-9A-Za-z]+/),i=Math.max(n.length,r.length);for(let e=0;e<i;e+=1){let t=n[e]??``,i=r[e]??``,a=/^\d+$/.test(t)?Number(t):NaN,o=/^\d+$/.test(i)?Number(i):NaN,s=Number.isNaN(a)||Number.isNaN(o)?t.localeCompare(i):a-o;if(s!==0)return s}return 0}function A(e){return e===`latest`||k(e,`1.21.120`)>=0}function j(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 se(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=j(e);return n?t.split(`||`).some(e=>{let t=/(?:\^|~|>=|<=|>|<|=)?\s*(v?\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)/.exec(e.trim()),r=t?j(t[1]):void 0;return!r||n.major!==r.major||se(n,r)<0?!1:r.minecraftTarget?n.minecraftTarget?k(n.minecraftTarget.join(`.`),r.minecraftTarget.join(`.`))>=0:!1:!0}):!1}const ce=M;function le(e){if(e===`stable`||e===`beta`||e===`preview`)throw new y(`DEPENDENCY_VERSION_INVALID`,`${e} must be resolved from npm registry before writing package.json.`,{details:{specifier:e}});if(O(e))return e;throw new y(`DEPENDENCY_VERSION_INVALID`,`Unsupported dependency version: ${e}`,{details:{specifier:e}})}function ue(e){return e.filter(e=>/^\d+\.\d+\.\d+$/.test(e)).sort(k)}function de(e){return e.filter(e=>/(?:^|[-.])beta(?:[-.]|$)/i.test(e)).sort(k)}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=ue(this.npm.versions(t)).at(-1);if(!r)throw new y(`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 y(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest beta version for ${e}.`,{details:{package:e}});return this.logger?.verbose(`Resolved ${e}@beta -> ${r}`),r}betaForTarget(e,t,n){let r=t.replace(/\./g,`\\.`),i=RegExp(`beta[-.]${r}-stable`),a=this.npm.versions(n).filter(e=>i.test(e)).sort(k).at(-1);if(!a)throw new y(`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 y(`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 y(`SAPI_VERSION_NOT_FOUND`,`Cannot confirm inferred stable version ${s} for ${e}.`,{details:{package:e,target:t,beta:n,inferredStable:s}});return s}};function fe(e,t){return t===`latest`||A(t)?`beta`:/^(\d+\.\d+\.\d+-beta)/i.exec(e)?.[1]??e}function pe(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 y(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest beta version for ${e}.`,{details:{package:e}});return n?.verbose(`Resolved ${e}@beta -> ${r}`),r}function me(e){return e.filter(e=>/(?:rc|beta)\.\d+\.\d+\.\d+-preview\.\d+$/i.test(e)).sort(k)}function P(e,t,n){let r=me(t).at(-1);if(!r)throw new y(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest preview version for ${e}.`,{details:{package:e}});return n?.verbose(`Resolved ${e}@preview -> ${r}`),r}function F(e,t,n,r){let i=n.replace(/\./g,`\\.`),a=RegExp(`(?:rc|beta)\\.${i}-preview\\.\\d+$`),o=t.filter(e=>a.test(e)).sort(k).at(-1);if(!o)throw new y(`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 I={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`?pe(e.packageName,e.npm.versions(t),e.logger):n.betaForTarget(e.packageName,e.target,t);return{packageVersion:r,manifestVersion:fe(r,e.target)}}e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`);let r=e.target===`latest`?P(e.packageName,e.npm.versions(t),e.logger):F(e.packageName,e.npm.versions(t),e.target,e.logger);return{packageVersion:r,manifestVersion:r}}},L={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`?pe(e.packageName,e.npm.versions(t),e.logger):n.betaForTarget(e.packageName,e.target,t);return{packageVersion:r,manifestVersion:fe(r,e.target)}}e.logger?.verbose(`Resolving ${e.packageName}@preview for target ${e.target}`);let r=e.target===`latest`?P(e.packageName,e.npm.versions(t),e.logger):F(e.packageName,e.npm.versions(t),e.target,e.logger);return{packageVersion:r,manifestVersion:r}}},R=/^\d+\.\d+\.\d+$/,he=/^\d+\.\d+\.\d+-preview\.\d+$/,z={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`?ge(e,t):_e(e,t)}};function ge(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&&R.test(n))return e.logger?.verbose(`Resolved ${e.packageName}@stable -> ${n}`),{packageVersion:n};let r=e.npm.versions(t).filter(e=>R.test(e)).sort(k).at(-1);if(!r)throw new y(`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 y(`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 _e(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=>he.test(e)).sort(k).at(-1);if(!n)throw new y(`SAPI_VERSION_NOT_FOUND`,`Cannot resolve latest preview version for ${e.packageName}.`,{details:{package:e.packageName}});return e.logger?.verbose(`Resolved ${e.packageName}@preview -> ${n}`),{packageVersion:n}}let n=e.target.replace(/\./g,`\\.`),r=RegExp(`^${n}-preview\\.\\d+$`),i=e.npm.versions(t).filter(e=>r.test(e)).sort(k).at(-1);if(!i)throw new y(`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 B={"@minecraft/common":{resolver:I,manifest:!0},"@minecraft/server":{resolver:I,manifest:!0},"@minecraft/server-ui":{resolver:I,manifest:!0},"@minecraft/server-net":{resolver:L,manifest:!0},"@minecraft/server-admin":{resolver:L,manifest:!0},"@minecraft/server-gametest":{resolver:L,manifest:!0},"@minecraft/debug-utilities":{resolver:L,manifest:!0},"@minecraft/diagnostics":{resolver:L,manifest:!0},"@minecraft/server-graphics":{resolver:L,manifest:!0},"@minecraft/server-editor":{resolver:L,manifest:!0},"@minecraft/vanilla-data":{resolver:z,manifest:!1}},ve={name:`exact-version`,match:e=>O(e.specifier),resolve(e){return e.logger?.verbose(`Using exact ${e.packageName}@${e.specifier}`),{packageVersion:le(e.specifier),manifestVersion:e.specifier}}},ye=[I,L,z,ve];var V=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,...ye],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 y(`PLUGIN_FAILED`,`Plugin ${t} resolver ${n.name} match failed: ${e instanceof Error?e.message:String(e)}`):e}if(!t)throw new y(`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 y(`PLUGIN_FAILED`,`Plugin ${n} resolver ${t.name} failed: ${e instanceof Error?e.message:String(e)}`):e}}};const H=`sapi-pro`,U=[`@minecraft/server`,`@minecraft/server-ui`];function W(e){return/(?:beta|preview|alpha|rc)/i.test(e)}function be(e){return W(e)?`beta`:`stable`}function xe(e){let t=/^(\d+)\.(\d+)\./.exec(e);return!!t&&(Number(t[1])>0||Number(t[2])>=4)}function Se(e){return{...e.dependencies??{},...e.peerDependencies??{}}}async function Ce(e,t,n,r){let i=e.config.packs.bp?.dependencies??{},a={...B,...e.config.install.dependencyCatalog},o=V.fromConfig(e.config.install.dependencyResolvers.filter(e=>e!==Te),e.config.plugins);for(let[s,c]of Object.entries(t)){if(!s.startsWith(`@minecraft/`))continue;let t=i[s],l=a[s];if(!t||!l)return r.add(s),!1;let u;if(n.has(s)?u=n.get(s):(u=await o.resolve({packageName:s,specifier:t,target:e.target,entry:l,config:e.config,npm:e.npm,...e.logger?{logger:e.logger}:{}}),n.set(s,u)),!u||U.includes(s)&&W(c)!==W(u.packageVersion)||!M(u.packageVersion,c))return!1}return!0}function we(e,t){if(t!==`stable`&&t!==`beta`){let n=e[t];return n?[[t,n]]:[]}return Object.entries(e).filter(([e,n])=>{if(!xe(e))return!1;let r=Se(n);return Object.keys(r).length===0?!1:t===`stable`?/-stable(?:\.\d+)?$/i.test(e):/^\d+\.\d+\.\d+$/.test(e)}).sort(([e],[t])=>k(e,t)).reverse()}const Te={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(H),n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Set;for(let[i,a]of we(t.versions??{},e.specifier))if(await Ce(e,Se(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 y(`SAPI_VERSION_NOT_FOUND`,`Cannot find a compatible ${H}@${e.specifier} for target ${e.target}.${r.size>0?` Missing explicit dependencies: ${[...r].join(`, `)}.`:``}`,{details:{package:H,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 Ee(){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[H];if(!n)return;let r=U.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 U){let r=t[e];if(be(r)!==n)throw Error(`sapi-pro ${n} requires ${e} to use ${n}, received ${r}.`)}},install:{dependencyCatalog:{[H]:{resolver:`sapi-pro`,manifest:!1}},dependencyResolvers:[Te]}}}const De={"sapi-pro":Ee};function G(e){return e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0)):{}}function K(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 Oe(e,t){let n={};(e.packs?.bp||t.packs?.bp)&&(n.bp={...e.packs?.bp??{},...G(t.packs?.bp)}),(e.packs?.rp||t.packs?.rp)&&(n.rp={...e.packs?.rp??{},...G(t.packs?.rp)});let r={...e.copy?.targets??{},...G(t.copy?.targets)},i=G(t);return{...e,...i,...t.plugins!==void 0||e.plugins!==void 0?{plugins:t.plugins??e.plugins}:{},packs:n,install:{...e.install,...G(t.install)},build:{...e.build,...G(t.build)},dev:{...e.dev,...G(t.dev)},copy:{...e.copy,...G(t.copy),targets:r},pack:{...e.pack,...G(t.pack)},hooks:{...e.hooks,...G(t.hooks)}}}function ke(e){let t=(e??[]).map(e=>{if(typeof e!=`string`)return e;let t=De[e];if(!t)throw new y(`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 y(`CONFIG_INVALID`,`Every plugin must have a non-empty name.`);if(n.has(e.name))throw new y(`CONFIG_INVALID`,`Plugin name is duplicated: ${e.name}.`);if(e.apiVersion!==void 0&&e.apiVersion!==1)throw new y(`CONFIG_INVALID`,`Plugin ${e.name} requires unsupported BePack plugin API version ${e.apiVersion}.`);if(e.priority!==void 0&&!Number.isFinite(e.priority))throw new y(`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 Ae(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 y(`PLUGIN_FAILED`,`Plugin ${t.name} ${String(n)} hook failed: ${e instanceof Error?e.message:String(e)}`):e}return t}]}))}function je(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 Me(e,n,r){let i=g,a=e?.scriptOutputDir??i.scriptOutputDir,o=t.resolve(r,e?.entry??i.entry),s=te(n,a,t.dirname(o));return{entry:e?.entry??i.entry,define:ae(e?.define),tsconfig:e?.tsconfig??i.tsconfig,typecheck:e?.typecheck??i.typecheck,preserveModules:e?.preserveModules??i.preserveModules,external:e?.external??i.external,useNpx:e?.useNpx??i.useNpx,minify:e?.minify??i.minify,cache:u(e?.cache),scriptOutputDir:s,...e?.rolldown===void 0?{}:{rolldown:c(e.rolldown)},...e?.rolldownConfig===void 0?{}:{rolldownConfig:l(e.rolldownConfig)}};function c(e){if(typeof e==`function`||e&&typeof e==`object`&&!Array.isArray(e))return e;throw new y(`CONFIG_INVALID`,`packs.bp.compile.rolldown must be a rolldown options object or a function (options, context) => options, got: ${K(e)}.`)}function l(e){if(typeof e!=`string`||e.trim()===``)throw new y(`CONFIG_INVALID`,`packs.bp.compile.rolldownConfig must be a non-empty path string, got: ${K(e)}.`);return e}function u(e){let t=m;return{dev:e?.dev??t.dev,build:e?.build??t.build,file:e?.file??t.file}}}function Ne(e){if(e===void 0||e===!1)return;let t=e===!0?{}:e;if(typeof t!=`object`||!t||Array.isArray(t))throw new y(`CONFIG_INVALID`,`pack.optimize must be a boolean or an options object, got: ${K(e)}.`);let n=t.packOptimizationVersion;if(n!==void 0&&(typeof n!=`string`||n.trim()===``))throw new y(`CONFIG_INVALID`,`pack.optimize.packOptimizationVersion must be a non-empty string, got: ${K(n)}.`);return{keepLooseFiles:t.keepLooseFiles??h.keepLooseFiles,keepLoose:t.keepLoose!==!1&&(t.keepLoose??[]).map(Pe),exclude:(t.exclude??[]).map(Pe),minifyJson:t.minifyJson??h.minifyJson,packOptimizationVersion:n??h.packOptimizationVersion,allowUnsupportedTarget:t.allowUnsupportedTarget??h.allowUnsupportedTarget}}function Pe(e){let n=String(e).replace(/\\/g,`/`).replace(/^\.\//,``).replace(/\/+$/,``);if(!n||n.includes(`/`)||n.includes(`..`)||t.posix.isAbsolute(n))throw new y(`CONFIG_INVALID`,`pack.optimize.exclude entries must be top-level folder names (no path separators, no ".."), got: ${K(e)}.`);return n}function Fe(e){let t=e?.merge??`preserve`;if(t!==`preserve`&&t!==`clean`)throw new y(`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 y(`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 Ie(e,n={},r=process.cwd()){let i=Oe(e,n),a=ke(i.plugins),o=i.target??p.target;if(o===`stable`||o===`beta`)throw new y(`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 y(`CONFIG_INVALID`,`At least one pack (packs.bp or packs.rp) is required.`);if(!i.name||i.name.trim()===``)throw new y(`CONFIG_INVALID`,`name is required.`);let l=i.name,u=i.version??p.version,d=i.description,f=i.packs,m=f.bp?.compile,h=f.bp,g=f.rp;if(h){if(!h.uuid)throw new y(`CONFIG_INVALID`,`packs.bp.uuid is required.`);if(h.compile&&!h.moduleUuid)throw new y(`CONFIG_INVALID`,`packs.bp.moduleUuid is required when packs.bp.compile is configured.`);if(h.root===void 0)throw new y(`CONFIG_INVALID`,`packs.bp.root is required. Set the behavior pack directory in bepack.config.ts.`);if(m?.define){let e=Object.keys(i.replace?.values??{}),t=Object.keys(m.define),n=e.filter(e=>t.includes(e));if(n.length>0)throw new y(`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 _=t.resolve(r,i.root??`.`),v=h?t.resolve(_,h.root):void 0;if(g){if(!g.uuid||!g.moduleUuid)throw new y(`CONFIG_INVALID`,`packs.rp.uuid and packs.rp.moduleUuid are required.`);if(g.root===void 0)throw new y(`CONFIG_INVALID`,`packs.rp.root is required when packs.rp is configured.`);if(g.packScope!==void 0&&!b.includes(g.packScope))throw new y(`CONFIG_INVALID`,`packs.rp.packScope must be one of ${b.map(e=>`"${e}"`).join(`, `)}.`,{details:{packScope:g.packScope}})}let x=h?.description??d,S=g?.description??d,{catalog:C,diagnostics:w}=je(a,i.install?.dependencyCatalog??{}),T=a.flatMap(e=>e.install?.dependencyResolvers??[]),E=Ne(i.pack?.optimize),D=Ne(i.copy?.optimize);return{root:i.root??p.root,configured:{root:i.root!==void 0,packOutDir:i.pack?.outDir!==void 0},name:l,version:u,...d===void 0?{}:{description:d},replace:ie(i.replace),target:o,plugins:a,...w.length>0?{pluginDiagnostics:w}:{},...i.manifestFormat===void 0?{}:{manifestFormat:i.manifestFormat},packs:{...h?{bp:{root:h.root,uuid:h.uuid,...h.moduleUuid===void 0?{}:{moduleUuid:h.moduleUuid},name:h.name??l,...x===void 0?{}:{description:x},...m&&v?{compile:Me(m,v,_)}:{},manifest:Fe(h.manifest),dependencies:h.dependencies??{},include:h.include??[]}}:{},...g?{rp:{root:g.root,uuid:g.uuid,moduleUuid:g.moduleUuid,name:g.name??l,...S===void 0?{}:{description:S},manifest:Fe(g.manifest),...g.pbr===void 0?{}:{pbr:g.pbr},...g.packScope===void 0?{}:{packScope:g.packScope},include:g.include??[]}}:{}},install:{registry:i.install?.registry??p.install.registry,saveTo:i.install?.saveTo??p.install.saveTo,packageManager:i.install?.packageManager??p.install.packageManager,runPackageManager:i.install?.runPackageManager??p.install.runPackageManager,updatePackageJson:i.install?.updatePackageJson??p.install.updatePackageJson,updateManifest:i.install?.updateManifest??p.install.updateManifest,dependencyCatalog:C,dependencyResolvers:[...T,...i.install?.dependencyResolvers??[]]},build:{copy:i.build?.copy??p.build.copy,timing:i.build?.timing??p.build.timing},dev:{copy:i.dev?.copy??p.dev.copy,...i.dev?.watch?{watch:i.dev.watch}:{}},copy:{defaultTarget:i.copy?.defaultTarget??p.copy.defaultTarget,...i.copy?.name?{name:i.copy.name}:{},...i.copy?.include?{include:i.copy.include}:{},targets:i.copy?.targets??{},...D?{optimize:D}:{}},pack:{name:i.pack?.name??p.pack.name,outDir:i.pack?.outDir??p.pack.outDir,...E?{optimize:E}:{}},hooks:Ae(a,i.hooks)}}async function Le(e,r){if(r){let t=S(e,r);return await n.access(t).catch(()=>{throw new y(`CONFIG_NOT_FOUND`,`Config not found: ${r}`,{details:{configPath:r}})}),t}for(let r of v){let i=t.join(e,r);try{return await n.access(i),i}catch{}}throw new y(`CONFIG_NOT_FOUND`,`No bepack.config.ts, bepack.config.mjs, or bepack.config.js found.`,{details:{cwd:e}})}async function Re(t){try{if(t.endsWith(`.ts`))try{return await import(`${e(t).href}?t=${Date.now()}`)}catch{let e=ze(await n.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 y(`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 ze(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 Be(e,t){for(let n of e.plugins??[])if(n.configResolved)try{await n.configResolved({cwd:t,config:e})}catch(e){throw new y(`PLUGIN_FAILED`,`Plugin ${n.name} configResolved hook failed: ${e instanceof Error?e.message:String(e)}`)}}async function Ve(e){let n=t.resolve(e.cwd),r=await Le(n,e.configPath),i=await Re(r);if(i.default===void 0)throw new y(`CONFIG_INVALID`,`Config must use default export.`,{details:{file:r}});let a=Ie(i.default,e.overrides,n);return await Be(a,n),{config:a,path:r,cwd:n}}var He=/* @__PURE__ */ f((/* @__PURE__ */ u(((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 q(e){return{...B,...e.install.dependencyCatalog}}function Ue(e,t){let n=e[t];if(!n)throw new y(`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 We(e){return`${JSON.stringify(e,null,4)}\n`}async function Ge(e){try{return await n.access(e),!0}catch{return!1}}async function Ke(e){await n.mkdir(e,{recursive:!0})}async function qe(e,r){await Ke(t.dirname(e)),await n.writeFile(e,We(r),`utf8`)}function Je(e){return Array.isArray(e)&&e.length===3&&typeof e[0]==`number`&&typeof e[1]==`number`&&typeof e[2]==`number`}function Ye(e){return typeof e==`string`&&/^\d+\.\d+\.\d+$/.test(e)}function J(e){return e===3?Ye:Je}function Y(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 Xe=[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?J(e.format_version)(e.header.version)?null:Y(e.format_version,`header.version`):null,e=>e.header?J(e.format_version)(e.header.min_engine_version)?null:Y(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=J(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`}): ${Y(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=J(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}): ${Y(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 Ze(e,t){let n=[];for(let r of Xe){let i=r(e,t);i!==null&&(Array.isArray(i)?n.push(...i):n.push(i))}if(n.length>0)throw new y(`MANIFEST_INVALID`,`Manifest validation failed: ${n.join(`; `)}`)}function X(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:{...e}}function Z(e){return Array.isArray(e)?e:[]}var Q=class{static async read(e){if(!await Ge(e))return;let t=await n.readFile(e,`utf8`);try{return X(JSON.parse(t))}catch{throw new y(`MANIFEST_INVALID`,`Invalid JSON in manifest: ${e}`)}}static async write(e,t,n){Ze(t,n),await qe(e,t)}};const Qe=[1,21,0],$e=[1,0,0];var et=class{config;version;versionStr;depManager;constructor(e,t){this.config=e,this.version=oe(e.version),this.versionStr=e.version,this.depManager=t}buildBp(e){let t=this.requireBp(),n=X(e);this.depManager.validateBpDependencies();let r=this.getWriteFormatVersion(n);return t.manifest.merge===`clean`?this.buildCleanBp(t,r):this.buildPreserveBp(n,t,r)}buildRp(e){let t=this.requireRp(),n=X(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[...Z(e).filter(e=>!this.isManagedBpModule(e,t)),this.createScriptModule(t,n)]}replaceManagedRpModules(e,t,n){return[...Z(e).filter(e=>!this.isManagedRpModule(e,t)),this.createResourcesModule(t,n)]}applyPbrCapability(e,t){if(t.pbr===!0){let t=Z(e.capabilities);e.capabilities=t.includes(`pbr`)?t:[...t,`pbr`]}else if(t.pbr===!1){let t=Z(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`:$e}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`:Qe}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 y(`CONFIG_INVALID`,`packs.bp is required to build the BP manifest.`);return this.config.packs.bp}requireRp(){if(!this.config.packs.rp)throw new y(`CONFIG_INVALID`,`packs.rp is required to build the RP manifest.`);return this.config.packs.rp}},tt=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=oe(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 y(`DEPENDENCY_REQUIRES_INSTALL`,"Run `bepack install` to resolve stable manifest dependencies.",{details:{specifier:t,target:n}})}if(t===`beta`){if(A(n))return{version:`beta`,source:`config`};if(r)return{version:r,source:`install`};if(i)return{version:i,source:`manifest`};throw new y(`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 y(`DEPENDENCY_REQUIRES_INSTALL`,`Run \`bepack install\` to resolve preview manifest dependencies for target ${n}.`,{details:{specifier:t,target:n}})}return{version:t,source:`config`}}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 y(`UNSUPPORTED_DEPENDENCY`,`${t} is not a managed dependency.`,{details:{package:t},suggestions:n})}if(!e.isAllowedSpecifier(n))throw new y(`DEPENDENCY_VERSION_INVALID`,`${t} dependency version is invalid: ${n}`,{details:{package:t,specifier:n}})}}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=Z(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=Z(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 $=He.default.createColors(process.env.NO_COLOR===void 0&&process.env.FORCE_COLOR!==`0`);async function nt(e){let n=q(e.config),r=e.config.packs.bp?ne(e.cwd,e.config):void 0,i=r?await Q.read(r):void 0,a=it(i,n),o=new tt(e.config,n,{...e.resolvedDeps?{install:e.resolvedDeps}:{},manifest:a}),s=new et(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`),rt(u,e.logger),c.bpManifest={path:C(t.relative(e.cwd,r)),updated:!0,existed:n,dependencies:u}}if(e.config.packs.rp){let n=re(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:C(t.relative(e.cwd,n)),updated:!0,existed:i}}return c}function rt(e,t){if(t)for(let n of e){let e=$.cyan(n.module_name);n.previous!==void 0&&n.previous!==n.version?t.info(`manifest ${e}: ${n.previous} ${$.dim(`->`)} ${n.version} (specifier ${JSON.stringify(n.specifier)}, ${n.source})`):n.source===`manifest`?t.info(`manifest ${e} ${n.version} ${$.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 it(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 at(e,t){e?.install?e.install(t):e?.info(`[Install] ${t}`)}var ot=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;at(this.logger,`fetching ${e} metadata from ${this.registry}`);let r=await fetch(t);if(!r.ok)throw new y(`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 st(e){return t=>{e?.install?e.install(t):e?.info(`[Install] ${t}`)}}var ct=class{config;logger;npm;catalog;pkgResolver;log;constructor(e,t){this.config=e,this.logger=t,this.npm=new ot(e.install.registry,t),this.catalog=q(e),this.pkgResolver=new N(this.npm,t),this.log=st(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=Ue(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 V.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 y(`PLUGIN_FAILED`,`Plugin ${n.name} ${e} hook failed: ${t instanceof Error?t.message:String(t)}`)}}}};async function lt(e,t){return new ct(e,t).resolveAll()}export{B as BUILTIN_DEPENDENCY_CATALOG,ye as BUILTIN_DEPENDENCY_RESOLVERS,De as BUILTIN_PLUGINS,y as BePackError,V as DependencyResolverRegistry,ct as DependencyService,N as MinecraftPackageResolver,ot as NpmRegistryClient,q as createDependencyCatalog,_ as defineConfig,ve as exactVersionResolver,x as getConfiguredPacks,Ve as loadConfig,L as minecraftScriptApiBpResolver,I as minecraftScriptApiResolver,z as minecraftVanillaDataResolver,le as packageVersionForSpecifier,nt as patchManifest,lt as resolveDependencies,Ee as sapiPro,M as satisfiesSemver,ce as satisfiesSemverRange};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bepack/cli",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.0-beta.3",
4
4
  "description": "A modern pack builder for Minecraft Bedrock Edition.",
5
5
  "keywords": [
6
6
  "minecraft",
@@ -56,7 +56,8 @@
56
56
  "check:create-mcbe": "npm run typecheck --workspace=create-mcbe",
57
57
  "test:create-mcbe": "npm test --workspace=create-mcbe",
58
58
  "format": "prettier ./src --write",
59
- "format:check": "prettier ./src --check"
59
+ "format:check": "prettier ./src --check",
60
+ "prepublishOnly": "npm run check && npm run test && npm run build"
60
61
  },
61
62
  "dependencies": {
62
63
  "cac": "^7.0.0",
@@ -74,6 +75,6 @@
74
75
  "vitest": "^4.1.10"
75
76
  },
76
77
  "allowScripts": {
77
- "esbuild@0.28.1": true
78
+ "esbuild@0.28.2": true
78
79
  }
79
80
  }